diff --git a/Advanced Software Engineering/Advanced Software Engineering/Drawer.cs b/Advanced Software Engineering/Advanced Software Engineering/Drawer.cs index c00119a..9aa6313 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Drawer.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Drawer.cs @@ -12,7 +12,7 @@ namespace Advanced_Software_Engineering { /// public class Drawer { - protected static Dictionary ValueStorages = new Dictionary(); + private ValueStorage valueStorage = new ValueStorage(); /// /// The starting color of the pen / brush @@ -67,7 +67,7 @@ namespace Advanced_Software_Engineering { pen = new Pen(defaultColor, defaultWidth); brush = new SolidBrush(defaultColor); fill = false; - foreach (int valueStorage in ValueStorages.Keys) ValueStorages[valueStorage].Reset(); + valueStorage = new ValueStorage(); } /// @@ -189,16 +189,8 @@ namespace Advanced_Software_Engineering { graphics.FillRectangle(new SolidBrush(pen.Color), penPosition.X, penPosition.Y, 1, 1); } - public void SetStack(int name, ValueStorage value) { - ValueStorages[name] = value; - } - - public ValueStorage GetStack(int name) { - return ValueStorages[name]; - } - - public bool CheckStackExists(int name) { - return ValueStorages.ContainsKey(name); + public ValueStorage GetValueStorage() { + return valueStorage; } } diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/VerbChunk.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/VerbChunk.cs index 5f4e769..a1c1200 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/VerbChunk.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Flow/VerbChunk.cs @@ -1,12 +1,22 @@ -namespace Advanced_Software_Engineering.Verbs.Flow { +using System.Collections.Generic; + +namespace Advanced_Software_Engineering.Verbs.Flow { public class VerbChunk : IVerb { - private readonly IVerb[] verbs; + private readonly List verbs; - public VerbChunk(IVerb[] verbs) { + public VerbChunk(List verbs) { this.verbs = verbs; } + public VerbChunk() { + verbs = new List { }; + } + + public void AddVerb(IVerb verb) { + verbs.Add(verb); + } + public void ExecuteVerb() { foreach (IVerb verb in verbs) verb.ExecuteVerb(); } diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueStorage.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueStorage.cs index 55f036a..89df096 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueStorage.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/Value/ValueStorage.cs @@ -3,7 +3,8 @@ namespace Advanced_Software_Engineering.Verbs.Value { public class ValueStorage { - protected Dictionary Variables = new Dictionary(); + protected int currentStack; + protected Dictionary> Variables = new Dictionary>(); public ValueStorage() { Reset(); @@ -11,19 +12,41 @@ namespace Advanced_Software_Engineering.Verbs.Value { public void Reset() { Variables.Clear(); + SetStack(0); + } + + public void Reset(int stack) { + Variables[stack].Clear(); + } + + public void SetStack(int stack) { + currentStack = stack; + if (!Variables.ContainsKey(stack)) Variables.Add(currentStack, new Dictionary()); + } + + public void SetVariable(string name, int stack, IValue value) { + Variables[stack][name] = value; } public void SetVariable(string name, IValue value) { - Variables[name] = value; + SetVariable(name, currentStack, value); + } + + public IValue GetVariable(string name, int stack) { + return Variables[stack][name]; } public IValue GetVariable(string name) { - return Variables[name]; + return GetVariable(name, currentStack); + } + + public bool CheckVariableExists(string name, int stack) { + if (name == null) return false; + return Variables[stack].ContainsKey(name); } public bool CheckVariableExists(string name) { - if (name == null) return false; - return Variables.ContainsKey(name); + return CheckVariableExists(name, currentStack); } } } diff --git a/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs b/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs index 37b44c5..0ee3eea 100644 --- a/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs +++ b/Advanced Software Engineering/Advanced Software Engineering/Verbs/VerbFactory.cs @@ -24,13 +24,7 @@ namespace Advanced_Software_Engineering { public static IVerb MakeVerb(Drawer drawer, string fullCommand) { int stackLevel = 0; - ValueStorage rootValueStorage; - if (drawer.CheckStackExists(stackLevel)) { - rootValueStorage = drawer.GetStack(stackLevel); - } else { - rootValueStorage = new ValueStorage(); - drawer.SetStack(stackLevel, rootValueStorage); - } + ValueStorage rootValueStorage = drawer.GetValueStorage(); CommandAndParameterParserResult result = HelperFunctions.CommandAndParameterParser(fullCommand);