Index: /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ReadMem.cs
===================================================================
--- /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ReadMem.cs	(revision 4898)
+++ /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ReadMem.cs	(revision 4898)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols {
+  [StorableClass]
+  [Item("Read Memory", "Represents a read memory operation.")]
+  public sealed class ReadMem : Symbol {
+    #region Propeties
+    [Storable]
+    private int minAddress;
+    public int MinAddress {
+      get { return minAddress; }
+      set {
+        if (value != minAddress) {
+          minAddress = value;
+          OnChanged(EventArgs.Empty);
+        }
+      }
+    }
+    [Storable]
+    private int maxAddress;
+    public int MaxAddress {
+      get { return maxAddress; }
+      set {
+        if (value != maxAddress) {
+          maxAddress = value;
+          OnChanged(EventArgs.Empty);
+        }
+      }
+    }
+    #endregion
+    [StorableConstructor]
+    private ReadMem(bool deserializing) : base(deserializing) { }
+    private ReadMem(ReadMem original, Cloner cloner)
+      : base(original, cloner) {
+      minAddress = original.minAddress;
+      maxAddress = original.maxAddress;
+    }
+    public ReadMem()
+      : base("ReadMem", "Represents a read memory operation.") {
+      minAddress = 0;
+      maxAddress = 3;
+    }
+
+    public override SymbolicExpressionTreeNode CreateTreeNode() {
+      return new ReadMemTreeNode(this);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ReadMem(this, cloner);
+    }
+  }
+}
Index: /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ReadMemTreeNode.cs
===================================================================
--- /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ReadMemTreeNode.cs	(revision 4898)
+++ /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/ReadMemTreeNode.cs	(revision 4898)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Random;
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols {
+  [StorableClass]
+  public sealed class ReadMemTreeNode : SymbolicExpressionTreeTerminalNode {
+    public new ReadMem Symbol {
+      get { return (ReadMem)base.Symbol; }
+    }
+
+    private int address;
+    [Storable]
+    public int Address {
+      get { return address; }
+      set { address = value; }
+    }
+
+    [StorableConstructor]
+    private ReadMemTreeNode(bool deserializing) : base(deserializing) { }
+
+    private ReadMemTreeNode(ReadMemTreeNode original, Cloner cloner)
+      : base(original, cloner) {
+      address = original.address;
+    }
+
+    private ReadMemTreeNode() { }
+    public ReadMemTreeNode(ReadMem readMemSymbol) : base(readMemSymbol) { }
+
+    public override bool HasLocalParameters {
+      get {
+        return true;
+      }
+    }
+    public override void ResetLocalParameters(IRandom random) {
+      base.ResetLocalParameters(random);
+      Address = random.Next(Symbol.MinAddress, Symbol.MaxAddress + 1);
+    }
+
+    public override void ShakeLocalParameters(IRandom random, double shakingFactor) {
+      base.ShakeLocalParameters(random, shakingFactor);
+      Address = random.Next(Symbol.MinAddress, Symbol.MaxAddress + 1);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ReadMemTreeNode(this, cloner);
+    }
+
+    public override string ToString() {
+      return "ReadMem " + address;
+    }
+  }
+}
Index: /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/SetMem.cs
===================================================================
--- /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/SetMem.cs	(revision 4898)
+++ /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/SetMem.cs	(revision 4898)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols {
+  [StorableClass]
+  [Item("Set Memory", "Represents a set memory operation.")]
+  public sealed class SetMem : Symbol {
+    #region Propeties
+    [Storable]
+    private int minAddress;
+    public int MinAddress {
+      get { return minAddress; }
+      set {
+        if (value != minAddress) {
+          minAddress = value;
+          OnChanged(EventArgs.Empty);
+        }
+      }
+    }
+    [Storable]
+    private int maxAddress;
+    public int MaxAddress {
+      get { return maxAddress; }
+      set {
+        if (value != maxAddress) {
+          maxAddress= value;
+          OnChanged(EventArgs.Empty);
+        }
+      }
+    }
+    #endregion
+    [StorableConstructor]
+    private SetMem(bool deserializing) : base(deserializing) { }
+    private SetMem(SetMem original, Cloner cloner)
+      : base(original, cloner) {
+      minAddress = original.minAddress;
+      maxAddress = original.maxAddress;
+    }
+    public SetMem()
+      : base("SetMem", "Represents a set memory operation.") {
+      minAddress = 0;
+      maxAddress = 3;
+    }
+
+    public override SymbolicExpressionTreeNode CreateTreeNode() {
+      return new SetMemTreeNode(this);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SetMem(this, cloner);
+    }
+  }
+}
Index: /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/SetMemTreeNode.cs
===================================================================
--- /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/SetMemTreeNode.cs	(revision 4898)
+++ /branches/GP-MemoryOperations/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/Symbols/SetMemTreeNode.cs	(revision 4898)
@@ -0,0 +1,74 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Random;
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols {
+  [StorableClass]
+  public sealed class SetMemTreeNode : SymbolicExpressionTreeNode {
+    public new SetMem Symbol {
+      get { return (SetMem)base.Symbol; }
+    }
+
+    private int address;
+    [Storable]
+    public int Address {
+      get { return address; }
+      set { address = value; }
+    }
+
+    [StorableConstructor]
+    private SetMemTreeNode(bool deserializing) : base(deserializing) { }
+
+    private SetMemTreeNode(SetMemTreeNode original, Cloner cloner)
+      : base(original, cloner) {
+      address = original.address;
+    }
+
+    public SetMemTreeNode(SetMem setMemSymbol) : base(setMemSymbol) { }
+
+    public override bool HasLocalParameters {
+      get {
+        return true;
+      }
+    }
+    public override void ResetLocalParameters(IRandom random) {
+      base.ResetLocalParameters(random);
+      Address = random.Next(Symbol.MinAddress, Symbol.MaxAddress + 1);
+    }
+
+    public override void ShakeLocalParameters(IRandom random, double shakingFactor) {
+      base.ShakeLocalParameters(random, shakingFactor);
+      Address = random.Next(Symbol.MinAddress, Symbol.MaxAddress + 1);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SetMemTreeNode(this, cloner);
+    }
+
+    public override string ToString() {
+      return "SetMem " + address;
+    }
+  }
+}
