Changeset 14952 for branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DefineExpressions.cs
- Timestamp:
- 05/10/17 11:23:05 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DefineExpressions.cs
r14908 r14952 4 4 5 5 using Attributes; 6 7 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 8 6 9 using Interpreter; 7 10 using Stack; … … 12 15 /// </summary> 13 16 /// <typeparam name="T">Stacktype</typeparam> 17 [StorableClass] 14 18 public abstract class DefineExpression<T> : StatelessExpression { 15 protected bool Eval( 19 protected DefineExpression() { } 20 [StorableConstructor] 21 protected DefineExpression(bool deserializing) : base(deserializing) { } 22 23 protected void Eval( 16 24 IPushStack<T> stack, 17 25 IPushStack<string> nameStack, 18 26 IDictionary<string, Expression> customExpressions, 19 27 Func<T, Expression> creator) { 20 // not enough arguments on stack21 if ((nameStack.Count == 0) || (stack.Count < 1)) return false;22 23 28 var name = nameStack.Pop(); 24 29 var expression = creator(stack.Top); … … 26 31 if (customExpressions.ContainsKey(name)) customExpressions[name] = expression; 27 32 else customExpressions.Add(name, expression); 28 29 return true;30 33 } 31 34 } 32 35 33 36 [PushExpression(StackTypes.Code, "CODE.DEFINE", StackTypes.Name)] 37 [StorableClass] 34 38 public class CodeDefineExpression : DefineExpression<Expression> { 35 public override bool Eval(IInternalPushInterpreter interpreter) { 36 if (interpreter.Configuration.TopLevelPushCode && (interpreter.CodeStack.Count < 2)) return false; 37 39 public CodeDefineExpression() { } 40 [StorableConstructor] 41 protected CodeDefineExpression(bool deserializing) : base(deserializing) { } 42 43 public override bool IsNoop(IInternalPushInterpreter interpreter) { 44 return (interpreter.Configuration.TopLevelPushCode && interpreter.CodeStack.Count < 2) || 45 interpreter.CodeStack.IsEmpty || 46 interpreter.NameStack.IsEmpty; 47 } 48 49 public override void Eval(IInternalPushInterpreter interpreter) { 38 50 Eval( 39 51 interpreter.CodeStack, … … 43 55 44 56 interpreter.CodeStack.Pop(); 45 46 return true;47 57 } 48 58 } 49 59 50 60 [PushExpression(StackTypes.Exec, "EXEC.DEFINE", StackTypes.Name)] 61 [StorableClass] 51 62 public class ExecDefineExpression : DefineExpression<Expression> { 52 public override bool Eval(IInternalPushInterpreter interpreter) { 53 if (interpreter.ExecStack.Count < 2) return false; 54 55 var noop = Eval( 63 public ExecDefineExpression() { } 64 [StorableConstructor] 65 protected ExecDefineExpression(bool deserializing) : base(deserializing) { } 66 67 public override bool IsNoop(IInternalPushInterpreter interpreter) { 68 return interpreter.ExecStack.Count < 2 || 69 interpreter.NameStack.IsEmpty; 70 } 71 72 public override void Eval(IInternalPushInterpreter interpreter) { 73 Eval( 56 74 interpreter.ExecStack, 57 75 interpreter.NameStack, … … 59 77 v => new ExecPushExpression(v)); 60 78 61 if (!noop) 62 interpreter.ExecStack.Pop(); 63 64 return noop; 79 interpreter.ExecStack.Pop(); 65 80 } 66 81 } 67 82 68 83 [PushExpression(StackTypes.Float, "FLOAT.DEFINE", StackTypes.Name)] 84 [StorableClass] 69 85 public class FloatDefineExpression : DefineExpression<double> { 70 71 public override bool Eval(IInternalPushInterpreter interpreter) { 72 return Eval( 86 public FloatDefineExpression() { } 87 [StorableConstructor] 88 protected FloatDefineExpression(bool deserializing) : base(deserializing) { } 89 90 public override bool IsNoop(IInternalPushInterpreter interpreter) { 91 return interpreter.FloatStack.IsEmpty || 92 interpreter.NameStack.IsEmpty; 93 } 94 95 public override void Eval(IInternalPushInterpreter interpreter) { 96 Eval( 73 97 interpreter.FloatStack, 74 98 interpreter.NameStack, … … 79 103 80 104 [PushExpression(StackTypes.Integer, "INTEGER.DEFINE", StackTypes.Name)] 105 [StorableClass] 81 106 public class IntegerDefineExpression : DefineExpression<long> { 82 public override bool Eval(IInternalPushInterpreter interpreter) { 83 return Eval( 107 public IntegerDefineExpression() { } 108 [StorableConstructor] 109 protected IntegerDefineExpression(bool deserializing) : base(deserializing) { } 110 111 public override bool IsNoop(IInternalPushInterpreter interpreter) { 112 return interpreter.IntegerStack.IsEmpty || 113 interpreter.NameStack.IsEmpty; 114 } 115 116 public override void Eval(IInternalPushInterpreter interpreter) { 117 Eval( 84 118 interpreter.IntegerStack, 85 119 interpreter.NameStack, … … 90 124 91 125 [PushExpression(StackTypes.Boolean, "BOOLEAN.DEFINE", StackTypes.Name)] 126 [StorableClass] 92 127 public class BooleanDefineExpression : DefineExpression<bool> { 93 public override bool Eval(IInternalPushInterpreter interpreter) { 94 return Eval( 128 public BooleanDefineExpression() { } 129 [StorableConstructor] 130 protected BooleanDefineExpression(bool deserializing) : base(deserializing) { } 131 132 public override bool IsNoop(IInternalPushInterpreter interpreter) { 133 return interpreter.BooleanStack.IsEmpty || 134 interpreter.NameStack.IsEmpty; 135 } 136 137 public override void Eval(IInternalPushInterpreter interpreter) { 138 Eval( 95 139 interpreter.BooleanStack, 96 140 interpreter.NameStack, … … 101 145 102 146 [PushExpression(StackTypes.Char, "CHAR.DEFINE", StackTypes.Name)] 147 [StorableClass] 103 148 public class CharDefineExpression : DefineExpression<char> { 104 public override bool Eval(IInternalPushInterpreter interpreter) { 105 return Eval( 149 public CharDefineExpression() { } 150 [StorableConstructor] 151 protected CharDefineExpression(bool deserializing) : base(deserializing) { } 152 153 public override bool IsNoop(IInternalPushInterpreter interpreter) { 154 return interpreter.CharStack.IsEmpty || 155 interpreter.NameStack.IsEmpty; 156 } 157 158 public override void Eval(IInternalPushInterpreter interpreter) { 159 Eval( 106 160 interpreter.CharStack, 107 161 interpreter.NameStack, … … 112 166 113 167 [PushExpression(StackTypes.String, "STRING.DEFINE", StackTypes.Name)] 168 [StorableClass] 114 169 public class StringDefineExpression : DefineExpression<string> { 115 public override bool Eval(IInternalPushInterpreter interpreter) { 116 return Eval( 170 public StringDefineExpression() { } 171 [StorableConstructor] 172 protected StringDefineExpression(bool deserializing) : base(deserializing) { } 173 174 public override bool IsNoop(IInternalPushInterpreter interpreter) { 175 return interpreter.StringStack.IsEmpty || 176 interpreter.NameStack.IsEmpty; 177 } 178 179 public override void Eval(IInternalPushInterpreter interpreter) { 180 Eval( 117 181 interpreter.StringStack, 118 182 interpreter.NameStack, … … 123 187 124 188 [PushExpression(StackTypes.IntegerVector, "INTEGER[].DEFINE", StackTypes.Name)] 189 [StorableClass] 125 190 public class IntegerVectorDefineExpression : DefineExpression<List<long>> { 126 public override bool Eval(IInternalPushInterpreter interpreter) { 127 return Eval( 191 public IntegerVectorDefineExpression() { } 192 [StorableConstructor] 193 protected IntegerVectorDefineExpression(bool deserializing) : base(deserializing) { } 194 195 public override bool IsNoop(IInternalPushInterpreter interpreter) { 196 return interpreter.IntegerVectorStack.IsEmpty || 197 interpreter.NameStack.IsEmpty; 198 } 199 200 public override void Eval(IInternalPushInterpreter interpreter) { 201 Eval( 128 202 interpreter.IntegerVectorStack, 129 203 interpreter.NameStack, … … 134 208 135 209 [PushExpression(StackTypes.FloatVector, "FLOAT[].DEFINE", StackTypes.Name)] 210 [StorableClass] 136 211 public class FloatVectorDefineExpression : DefineExpression<List<double>> { 137 public override bool Eval(IInternalPushInterpreter interpreter) { 138 return Eval( 212 public FloatVectorDefineExpression() { } 213 [StorableConstructor] 214 protected FloatVectorDefineExpression(bool deserializing) : base(deserializing) { } 215 216 public override bool IsNoop(IInternalPushInterpreter interpreter) { 217 return interpreter.FloatVectorStack.IsEmpty || 218 interpreter.NameStack.IsEmpty; 219 } 220 221 public override void Eval(IInternalPushInterpreter interpreter) { 222 Eval( 139 223 interpreter.FloatVectorStack, 140 224 interpreter.NameStack, … … 145 229 146 230 [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].DEFINE", StackTypes.Name)] 231 [StorableClass] 147 232 public class BooleanVectorDefineExpression : DefineExpression<List<bool>> { 148 public override bool Eval(IInternalPushInterpreter interpreter) { 149 return Eval( 233 public BooleanVectorDefineExpression() { } 234 [StorableConstructor] 235 protected BooleanVectorDefineExpression(bool deserializing) : base(deserializing) { } 236 237 public override bool IsNoop(IInternalPushInterpreter interpreter) { 238 return interpreter.BooleanVectorStack.IsEmpty || 239 interpreter.NameStack.IsEmpty; 240 } 241 242 public override void Eval(IInternalPushInterpreter interpreter) { 243 Eval( 150 244 interpreter.BooleanVectorStack, 151 245 interpreter.NameStack, … … 156 250 157 251 [PushExpression(StackTypes.StringVector, "STRING[].DEFINE", StackTypes.Name)] 252 [StorableClass] 158 253 public class StringVectorDefineExpression : DefineExpression<List<string>> { 159 public override bool Eval(IInternalPushInterpreter interpreter) { 160 return Eval( 254 public StringVectorDefineExpression() { } 255 [StorableConstructor] 256 protected StringVectorDefineExpression(bool deserializing) : base(deserializing) { } 257 258 public override bool IsNoop(IInternalPushInterpreter interpreter) { 259 return interpreter.StringVectorStack.IsEmpty || 260 interpreter.NameStack.IsEmpty; 261 } 262 263 public override void Eval(IInternalPushInterpreter interpreter) { 264 Eval( 161 265 interpreter.StringVectorStack, 162 266 interpreter.NameStack,
Note: See TracChangeset
for help on using the changeset viewer.