Private
Public Access
Updated to ValueStorage
This commit is contained in:
1 parent
7ed91d7998
commit
3b6bfa11a6
8 files changed
+91
-62
No files matched your search
@@ -12,6 +12,8 @@ namespace Advanced_Software_Engineering {
|
||||
/// </summary>
|
||||
public class Drawer {
|
||||
|
||||
protected static Dictionary<int, ValueStorage> ValueStorages = new Dictionary<int, ValueStorage>();
|
||||
|
||||
/// <summary>
|
||||
/// The starting color of the pen / brush
|
||||
/// </summary>
|
||||
@@ -47,8 +49,6 @@ namespace Advanced_Software_Engineering {
|
||||
/// </summary>
|
||||
protected Graphics graphics;
|
||||
|
||||
protected Dictionary<string, IValue> variables = new Dictionary<string, IValue>();
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new drawer object.
|
||||
/// </summary>
|
||||
@@ -67,7 +67,7 @@ namespace Advanced_Software_Engineering {
|
||||
pen = new Pen(defaultColor, defaultWidth);
|
||||
brush = new SolidBrush(defaultColor);
|
||||
fill = false;
|
||||
variables.Clear();
|
||||
foreach (int valueStorage in ValueStorages.Keys) ValueStorages[valueStorage].Reset();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -189,17 +189,17 @@ namespace Advanced_Software_Engineering {
|
||||
graphics.FillRectangle(new SolidBrush(pen.Color), penPosition.X, penPosition.Y, 1, 1);
|
||||
}
|
||||
|
||||
public void SetVariable(string name, IValue value) {
|
||||
variables[name] = value;
|
||||
public void SetStack(int name, ValueStorage value) {
|
||||
ValueStorages[name] = value;
|
||||
}
|
||||
|
||||
public IValue GetVariable(string name) {
|
||||
return variables[name];
|
||||
public ValueStorage GetStack(int name) {
|
||||
return ValueStorages[name];
|
||||
}
|
||||
|
||||
public bool CheckVariableExists(string name) {
|
||||
if (name == null) return false;
|
||||
return variables.ContainsKey(name);
|
||||
public bool CheckStackExists(int name) {
|
||||
return ValueStorages.ContainsKey(name);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+9
-9
@@ -4,7 +4,7 @@ using System;
|
||||
namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
|
||||
public class DeclareVariable : IVerb {
|
||||
private readonly Drawer drawer;
|
||||
private readonly ValueStorage storage;
|
||||
private readonly IValue value;
|
||||
private readonly string name;
|
||||
|
||||
@@ -46,8 +46,8 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
return true;
|
||||
}
|
||||
|
||||
public DeclareVariable(Drawer drawer, string assignment) {
|
||||
this.drawer = drawer;
|
||||
public DeclareVariable(ValueStorage storage, string assignment) {
|
||||
this.storage = storage;
|
||||
|
||||
//seperate assignment characters from everything else
|
||||
foreach (string op in new string[] { "=", "+", "-", "*", "/" }) {
|
||||
@@ -70,21 +70,21 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
if (!(assignmentStrings[1] == "=")) throw new Exception("No assignment in " + assignment);
|
||||
|
||||
name = assignmentStrings[0];
|
||||
if (drawer.CheckVariableExists(name)) throw new Exception("Declaration failed. " + name + " has been declared before");
|
||||
if (storage.CheckVariableExists(name)) throw new Exception("Declaration failed. " + name + " has been declared before");
|
||||
if (!CheckName(name)) throw new Exception("'" + name + "' name not allowed");
|
||||
|
||||
//preassign name
|
||||
drawer.SetVariable(name, null);
|
||||
storage.SetVariable(name, null);
|
||||
|
||||
//for single number assignments ["i", "=", "20"]
|
||||
if (assignmentStrings.Length == 3) value = ValueFactory.CreateValue(drawer, assignmentStrings[2]);
|
||||
if (assignmentStrings.Length == 3) value = ValueFactory.CreateValue(storage, assignmentStrings[2]);
|
||||
|
||||
//for expressions ["i", "=", "20", "+", "30"]
|
||||
//or some comparisons ["i", "=", "20", ">", "30"]
|
||||
if (assignmentStrings.Length == 5) {
|
||||
string op = assignmentStrings[3];
|
||||
IValue value1 = ValueFactory.CreateValue(drawer, assignmentStrings[2]);
|
||||
IValue value2 = ValueFactory.CreateValue(drawer, assignmentStrings[4]);
|
||||
IValue value1 = ValueFactory.CreateValue(storage, assignmentStrings[2]);
|
||||
IValue value2 = ValueFactory.CreateValue(storage, assignmentStrings[4]);
|
||||
|
||||
switch (op) {
|
||||
case "+":
|
||||
@@ -108,7 +108,7 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
}
|
||||
|
||||
public void ExecuteVerb() {
|
||||
drawer.SetVariable(name, value);
|
||||
storage.SetVariable(name, value);
|
||||
}
|
||||
|
||||
public string GetDescription() {
|
||||
|
||||
+12
-12
@@ -3,21 +3,21 @@
|
||||
namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
|
||||
public class UpdateVariable : IVerb {
|
||||
protected Drawer drawer;
|
||||
protected ValueStorage storage;
|
||||
protected string name;
|
||||
protected IValue value;
|
||||
|
||||
private void Init(Drawer drawer, string name, IValue value) {
|
||||
private void Init(ValueStorage storage, string name, IValue value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
this.drawer = drawer;
|
||||
this.storage = storage;
|
||||
}
|
||||
|
||||
public UpdateVariable(Drawer drawer, string name, IValue value) {
|
||||
Init(drawer, name, value);
|
||||
public UpdateVariable(ValueStorage storage, string name, IValue value) {
|
||||
Init(storage, name, value);
|
||||
}
|
||||
|
||||
public UpdateVariable(Drawer drawer, string name, string value) {
|
||||
public UpdateVariable(ValueStorage storage, string name, string value) {
|
||||
// incoming values look something like this "= 10"
|
||||
// or "= 10 + i"
|
||||
|
||||
@@ -37,19 +37,19 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
|
||||
// assignmentStrings will look something like this:
|
||||
// ["i"] or ["10", "+", "i"]
|
||||
if (assignmentStrings.Length == 1) Init(drawer, name, ValueFactory.CreateValue(drawer, assignmentStrings[0]));
|
||||
if (assignmentStrings.Length == 1) Init(storage, name, ValueFactory.CreateValue(storage, assignmentStrings[0]));
|
||||
else if (assignmentStrings.Length == 3) {
|
||||
// assignmentStrings looks like this => ["10", "+", "i"]
|
||||
IValue value1 = ValueFactory.CreateValue(drawer, assignmentStrings[0]);
|
||||
IValue value1 = ValueFactory.CreateValue(storage, assignmentStrings[0]);
|
||||
string op = assignmentStrings[1];
|
||||
IValue value2 = ValueFactory.CreateValue(drawer, assignmentStrings[2]);
|
||||
Init(drawer, name, new ExpressionValue(value1, value2, op));
|
||||
IValue value2 = ValueFactory.CreateValue(storage, assignmentStrings[2]);
|
||||
Init(storage, name, new ExpressionValue(value1, value2, op));
|
||||
}
|
||||
}
|
||||
|
||||
public void ExecuteVerb() {
|
||||
if (!drawer.CheckVariableExists(name)) throw new Exception("Cannot update variable because it is not declared");
|
||||
drawer.SetVariable(name, value.Clone());
|
||||
if (!storage.CheckVariableExists(name)) throw new Exception("Cannot update variable because it is not declared");
|
||||
storage.SetVariable(name, value.Clone());
|
||||
}
|
||||
|
||||
public string GetDescription() {
|
||||
|
||||
+10
-10
@@ -31,13 +31,13 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
}
|
||||
}
|
||||
|
||||
public static IValue CreateValue(Drawer drawer, string paramater1, string paramater2, string parameter3, string parameter4, string type) {
|
||||
public static IValue CreateValue(ValueStorage storage, string paramater1, string paramater2, string parameter3, string parameter4, string type) {
|
||||
switch (type) {
|
||||
case "color":
|
||||
IValue p1 = CreateValue(drawer, paramater1);
|
||||
IValue p2 = CreateValue(drawer, paramater2);
|
||||
IValue p3 = CreateValue(drawer, parameter3);
|
||||
IValue p4 = CreateValue(drawer, parameter4);
|
||||
IValue p1 = CreateValue(storage, paramater1);
|
||||
IValue p2 = CreateValue(storage, paramater2);
|
||||
IValue p3 = CreateValue(storage, parameter3);
|
||||
IValue p4 = CreateValue(storage, parameter4);
|
||||
|
||||
return new ColorValue(p1, p2, p3, p4);
|
||||
|
||||
@@ -46,12 +46,12 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
}
|
||||
}
|
||||
|
||||
public static IValue CreateValue(Drawer drawer, string paramater1, string paramater2, string parameter3, string type) {
|
||||
public static IValue CreateValue(ValueStorage storage, string paramater1, string paramater2, string parameter3, string type) {
|
||||
switch (type) {
|
||||
case "color":
|
||||
IValue p1 = CreateValue(drawer, paramater1);
|
||||
IValue p2 = CreateValue(drawer, paramater2);
|
||||
IValue p3 = CreateValue(drawer, parameter3);
|
||||
IValue p1 = CreateValue(storage, paramater1);
|
||||
IValue p2 = CreateValue(storage, paramater2);
|
||||
IValue p3 = CreateValue(storage, parameter3);
|
||||
|
||||
return new ColorValue(p1, p2, p3);
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
}
|
||||
}
|
||||
|
||||
public static IValue CreateValue(Drawer drawer, string value) {
|
||||
public static IValue CreateValue(ValueStorage drawer, string value) {
|
||||
value = HelperFunctions.Strip(value);
|
||||
if (drawer.CheckVariableExists(value)) return new VariableValue(drawer, value);
|
||||
else return ValueHelper.ConvertToIValue(value);
|
||||
|
||||
+3
-3
@@ -11,9 +11,9 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueObjects {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public PointValue(Drawer drawer, string parameter1, string parameter2) {
|
||||
x = ValueFactory.CreateValue(drawer, parameter1);
|
||||
y = ValueFactory.CreateValue(drawer, parameter2);
|
||||
public PointValue(ValueStorage storage, string parameter1, string parameter2) {
|
||||
x = ValueFactory.CreateValue(storage, parameter1);
|
||||
y = ValueFactory.CreateValue(storage, parameter2);
|
||||
}
|
||||
|
||||
public PointValue(string parameter1, string parameter2) {
|
||||
|
||||
+25
-6
@@ -1,10 +1,29 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
class ValueStorage {
|
||||
public class ValueStorage {
|
||||
|
||||
protected Dictionary<string, IValue> Variables = new Dictionary<string, IValue>();
|
||||
|
||||
public ValueStorage() {
|
||||
Reset();
|
||||
}
|
||||
|
||||
public void Reset() {
|
||||
Variables.Clear();
|
||||
}
|
||||
|
||||
public void SetVariable(string name, IValue value) {
|
||||
Variables[name] = value;
|
||||
}
|
||||
|
||||
public IValue GetVariable(string name) {
|
||||
return Variables[name];
|
||||
}
|
||||
|
||||
public bool CheckVariableExists(string name) {
|
||||
if (name == null) return false;
|
||||
return Variables.ContainsKey(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -4,17 +4,17 @@ using System.Drawing;
|
||||
namespace Advanced_Software_Engineering.Verbs.Value.ValueTypes {
|
||||
|
||||
public class VariableValue : IValue {
|
||||
private readonly Drawer drawer;
|
||||
private readonly ValueStorage storage;
|
||||
private readonly string variableName;
|
||||
|
||||
public VariableValue(Drawer drawer, string variableName) {
|
||||
public VariableValue(ValueStorage storage, string variableName) {
|
||||
this.variableName = variableName;
|
||||
if (!drawer.CheckVariableExists(variableName)) throw new Exception("Tried to access " + variableName + " before it was assigned. ");
|
||||
this.drawer = drawer;
|
||||
if (!storage.CheckVariableExists(variableName)) throw new Exception("Tried to access " + variableName + " before it was assigned. ");
|
||||
this.storage = storage;
|
||||
}
|
||||
|
||||
private IValue get() {
|
||||
return drawer.GetVariable(variableName);
|
||||
return storage.GetVariable(variableName);
|
||||
}
|
||||
|
||||
public string GetDescription() {
|
||||
@@ -46,7 +46,7 @@ namespace Advanced_Software_Engineering.Verbs.Value.ValueTypes {
|
||||
}
|
||||
|
||||
public IValue Clone() {
|
||||
return new VariableValue(drawer, variableName);
|
||||
return new VariableValue(storage, variableName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,16 @@ namespace Advanced_Software_Engineering {
|
||||
/// <param name="fullCommand">The command as a string</param>
|
||||
/// <returns>A IVerb that maches the command</returns>
|
||||
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);
|
||||
}
|
||||
|
||||
CommandAndParameterParserResult result = HelperFunctions.CommandAndParameterParser(fullCommand);
|
||||
|
||||
string command = result.getCommand();
|
||||
@@ -29,9 +39,9 @@ namespace Advanced_Software_Engineering {
|
||||
if (command == null) throw new Exception("There is no command to process");
|
||||
|
||||
//check for names in directory
|
||||
if (drawer.CheckVariableExists(command)) {
|
||||
if (rootValueStorage.CheckVariableExists(command)) {
|
||||
if (commandParameters.Length == 1) {
|
||||
return new UpdateVariable(drawer, command, commandParameters[0]);
|
||||
return new UpdateVariable(rootValueStorage, command, commandParameters[0]);
|
||||
} else throw new Exception(command + "needs something to be assigned to it");
|
||||
}
|
||||
|
||||
@@ -40,22 +50,22 @@ namespace Advanced_Software_Engineering {
|
||||
switch (command) {
|
||||
case "var":
|
||||
if (commandParameters.Length == 1) {
|
||||
return new DeclareVariable(drawer, commandParameters[0]);
|
||||
return new DeclareVariable(rootValueStorage, commandParameters[0]);
|
||||
} else throw new Exception(command + "s need to be initialised");
|
||||
|
||||
default:
|
||||
//assignment
|
||||
if (drawer.CheckVariableExists(command)) {
|
||||
if (rootValueStorage.CheckVariableExists(command)) {
|
||||
string[] assignmentCommands = command.Split("="[0]);
|
||||
if (assignmentCommands.Length > 2) throw new Exception("Cannot have two assignments");
|
||||
return new UpdateVariable(drawer, assignmentCommands[0], ValueFactory.CreateValue(drawer, assignmentCommands[1]));
|
||||
return new UpdateVariable(rootValueStorage, assignmentCommands[0], ValueFactory.CreateValue(rootValueStorage, assignmentCommands[1]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
List<IValue> parameters = new List<IValue>();
|
||||
if (!(commandParameters == null)) foreach (string parameter in commandParameters) {
|
||||
parameters.Add(ValueFactory.CreateValue(drawer, parameter));
|
||||
parameters.Add(ValueFactory.CreateValue(rootValueStorage, parameter));
|
||||
}
|
||||
int parameterLength = parameters.Count;
|
||||
|
||||
|
||||
Reference in new issue
Block a user