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