Changeset 14952 for branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ShoveExpressions.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/ShoveExpressions.cs
r14875 r14952 4 4 5 5 using Attributes; 6 7 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 8 6 9 using Interpreter; 7 10 using Stack; 8 11 12 [StorableClass] 9 13 public abstract class ShoveExpression<T> : StatelessExpression { 10 protected bool Eval(IPushStack<T> stack, IPushStack<long> integerStack) {11 if ((stack == integerStack && integerStack.Count < 3) ||12 (stack != integerStack && (integerStack.IsEmpty || stack.Count < 2)))13 return false; 14 14 protected ShoveExpression() { } 15 [StorableConstructor] 16 protected ShoveExpression(bool deserializing) : base(deserializing) { } 17 18 protected void Eval(IPushStack<T> stack, IPushStack<long> integerStack) { 15 19 var index = (int)Math.Abs(integerStack.Pop() % stack.Count); 16 20 var item = stack.Pop(); 17 21 stack.Insert(index, item); 18 return true;19 22 } 20 23 } 21 24 22 25 [PushExpression(StackTypes.Integer, "INTEGER.SHOVE")] 26 [StorableClass] 23 27 public class IntegerShoveExpression : ShoveExpression<long> { 24 public override bool Eval(IInternalPushInterpreter interpreter) { 25 return Eval(interpreter.IntegerStack, interpreter.IntegerStack); 28 public IntegerShoveExpression() { } 29 [StorableConstructor] 30 protected IntegerShoveExpression(bool deserializing) : base(deserializing) { } 31 32 public override bool IsNoop(IInternalPushInterpreter interpreter) { 33 return interpreter.IntegerStack.Count < 3; 34 } 35 36 public override void Eval(IInternalPushInterpreter interpreter) { 37 Eval(interpreter.IntegerStack, interpreter.IntegerStack); 26 38 } 27 39 } 28 40 29 41 [PushExpression(StackTypes.Float, "FLOAT.SHOVE", StackTypes.Integer)] 42 [StorableClass] 30 43 public class FloatShoveExpression : ShoveExpression<double> { 31 public override bool Eval(IInternalPushInterpreter interpreter) { 32 return Eval(interpreter.FloatStack, interpreter.IntegerStack); 44 public FloatShoveExpression() { } 45 [StorableConstructor] 46 protected FloatShoveExpression(bool deserializing) : base(deserializing) { } 47 48 public override bool IsNoop(IInternalPushInterpreter interpreter) { 49 return interpreter.IntegerStack.IsEmpty || interpreter.FloatStack.Count < 2; 50 } 51 52 public override void Eval(IInternalPushInterpreter interpreter) { 53 Eval(interpreter.FloatStack, interpreter.IntegerStack); 33 54 } 34 55 } 35 56 36 57 [PushExpression(StackTypes.Boolean, "BOOLEAN.SHOVE", StackTypes.Integer)] 58 [StorableClass] 37 59 public class BooleanShoveExpression : ShoveExpression<bool> { 38 public override bool Eval(IInternalPushInterpreter interpreter) { 39 return Eval(interpreter.BooleanStack, interpreter.IntegerStack); 60 public BooleanShoveExpression() { } 61 [StorableConstructor] 62 protected BooleanShoveExpression(bool deserializing) : base(deserializing) { } 63 64 public override bool IsNoop(IInternalPushInterpreter interpreter) { 65 return interpreter.IntegerStack.IsEmpty || interpreter.BooleanStack.Count < 2; 66 } 67 68 public override void Eval(IInternalPushInterpreter interpreter) { 69 Eval(interpreter.BooleanStack, interpreter.IntegerStack); 40 70 } 41 71 } 42 72 43 73 [PushExpression(StackTypes.Name, "NAME.SHOVE", StackTypes.Integer)] 74 [StorableClass] 44 75 public class NameShoveExpression : ShoveExpression<string> { 45 public override bool Eval(IInternalPushInterpreter interpreter) { 46 return Eval(interpreter.NameStack, interpreter.IntegerStack); 76 public NameShoveExpression() { } 77 [StorableConstructor] 78 protected NameShoveExpression(bool deserializing) : base(deserializing) { } 79 80 public override bool IsNoop(IInternalPushInterpreter interpreter) { 81 return interpreter.IntegerStack.IsEmpty || interpreter.NameStack.Count < 2; 82 } 83 84 public override void Eval(IInternalPushInterpreter interpreter) { 85 Eval(interpreter.NameStack, interpreter.IntegerStack); 47 86 } 48 87 } 49 88 50 89 [PushExpression(StackTypes.Exec, "EXEC.SHOVE", StackTypes.Integer)] 90 [StorableClass] 51 91 public class ExecShoveExpression : ShoveExpression<Expression> { 52 public override bool Eval(IInternalPushInterpreter interpreter) { 53 return Eval(interpreter.ExecStack, interpreter.IntegerStack); 92 public ExecShoveExpression() { } 93 [StorableConstructor] 94 protected ExecShoveExpression(bool deserializing) : base(deserializing) { } 95 96 public override bool IsNoop(IInternalPushInterpreter interpreter) { 97 return interpreter.IntegerStack.IsEmpty || interpreter.ExecStack.Count < 2; 98 } 99 100 public override void Eval(IInternalPushInterpreter interpreter) { 101 Eval(interpreter.ExecStack, interpreter.IntegerStack); 54 102 } 55 103 } 56 104 57 105 [PushExpression(StackTypes.Code, "CODE.SHOVE", StackTypes.Integer)] 106 [StorableClass] 58 107 public class CodeShoveExpression : ShoveExpression<Expression> { 59 public override bool Eval(IInternalPushInterpreter interpreter) { 60 return Eval(interpreter.CodeStack, interpreter.IntegerStack); 108 public CodeShoveExpression() { } 109 [StorableConstructor] 110 protected CodeShoveExpression(bool deserializing) : base(deserializing) { } 111 112 public override bool IsNoop(IInternalPushInterpreter interpreter) { 113 return interpreter.IntegerStack.IsEmpty || interpreter.CodeStack.Count < 2; 114 } 115 116 public override void Eval(IInternalPushInterpreter interpreter) { 117 Eval(interpreter.CodeStack, interpreter.IntegerStack); 61 118 } 62 119 } 63 120 64 121 [PushExpression(StackTypes.Char, "CHAR.SHOVE", StackTypes.Integer)] 122 [StorableClass] 65 123 public class CharShoveExpression : ShoveExpression<char> { 66 public override bool Eval(IInternalPushInterpreter interpreter) { 67 return Eval(interpreter.CharStack, interpreter.IntegerStack); 124 public CharShoveExpression() { } 125 [StorableConstructor] 126 protected CharShoveExpression(bool deserializing) : base(deserializing) { } 127 128 public override bool IsNoop(IInternalPushInterpreter interpreter) { 129 return interpreter.IntegerStack.IsEmpty || interpreter.CharStack.Count < 2; 130 } 131 132 public override void Eval(IInternalPushInterpreter interpreter) { 133 Eval(interpreter.CharStack, interpreter.IntegerStack); 68 134 } 69 135 } 70 136 71 137 [PushExpression(StackTypes.String, "STRING.SHOVE", StackTypes.Integer)] 138 [StorableClass] 72 139 public class StringShoveExpression : ShoveExpression<string> { 73 public override bool Eval(IInternalPushInterpreter interpreter) { 74 return Eval(interpreter.StringStack, interpreter.IntegerStack); 140 public StringShoveExpression() { } 141 [StorableConstructor] 142 protected StringShoveExpression(bool deserializing) : base(deserializing) { } 143 144 public override bool IsNoop(IInternalPushInterpreter interpreter) { 145 return interpreter.IntegerStack.IsEmpty || interpreter.StringStack.Count < 2; 146 } 147 148 public override void Eval(IInternalPushInterpreter interpreter) { 149 Eval(interpreter.StringStack, interpreter.IntegerStack); 75 150 } 76 151 } 77 152 78 153 [PushExpression(StackTypes.IntegerVector, "INTEGER[].SHOVE", StackTypes.Integer)] 154 [StorableClass] 79 155 public class IntegerVectorShoveExpression : ShoveExpression<List<long>> { 80 public override bool Eval(IInternalPushInterpreter interpreter) { 81 return Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack); 156 public IntegerVectorShoveExpression() { } 157 [StorableConstructor] 158 protected IntegerVectorShoveExpression(bool deserializing) : base(deserializing) { } 159 160 public override bool IsNoop(IInternalPushInterpreter interpreter) { 161 return interpreter.IntegerStack.IsEmpty || interpreter.IntegerVectorStack.Count < 2; 162 } 163 164 public override void Eval(IInternalPushInterpreter interpreter) { 165 Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack); 82 166 } 83 167 } 84 168 85 169 [PushExpression(StackTypes.FloatVector, "FLOAT[].SHOVE", StackTypes.Integer)] 170 [StorableClass] 86 171 public class FloatVectorShoveExpression : ShoveExpression<List<double>> { 87 public override bool Eval(IInternalPushInterpreter interpreter) { 88 return Eval(interpreter.FloatVectorStack, interpreter.IntegerStack); 172 public FloatVectorShoveExpression() { } 173 [StorableConstructor] 174 protected FloatVectorShoveExpression(bool deserializing) : base(deserializing) { } 175 176 public override bool IsNoop(IInternalPushInterpreter interpreter) { 177 return interpreter.IntegerStack.IsEmpty || interpreter.FloatVectorStack.Count < 2; 178 } 179 180 public override void Eval(IInternalPushInterpreter interpreter) { 181 Eval(interpreter.FloatVectorStack, interpreter.IntegerStack); 89 182 } 90 183 } 91 184 92 185 [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].SHOVE", StackTypes.Integer)] 186 [StorableClass] 93 187 public class BooleanVectorShoveExpression : ShoveExpression<List<bool>> { 94 public override bool Eval(IInternalPushInterpreter interpreter) { 95 return Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack); 188 public BooleanVectorShoveExpression() { } 189 [StorableConstructor] 190 protected BooleanVectorShoveExpression(bool deserializing) : base(deserializing) { } 191 192 public override bool IsNoop(IInternalPushInterpreter interpreter) { 193 return interpreter.IntegerStack.IsEmpty || interpreter.BooleanVectorStack.Count < 2; 194 } 195 196 public override void Eval(IInternalPushInterpreter interpreter) { 197 Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack); 96 198 } 97 199 } 98 200 99 201 [PushExpression(StackTypes.StringVector, "STRING[].SHOVE", StackTypes.Integer)] 202 [StorableClass] 100 203 public class StringVectorShoveExpression : ShoveExpression<List<string>> { 101 public override bool Eval(IInternalPushInterpreter interpreter) { 102 return Eval(interpreter.StringVectorStack, interpreter.IntegerStack); 204 public StringVectorShoveExpression() { } 205 [StorableConstructor] 206 protected StringVectorShoveExpression(bool deserializing) : base(deserializing) { } 207 208 public override bool IsNoop(IInternalPushInterpreter interpreter) { 209 return interpreter.IntegerStack.IsEmpty || interpreter.StringVectorStack.Count < 2; 210 } 211 212 public override void Eval(IInternalPushInterpreter interpreter) { 213 Eval(interpreter.StringVectorStack, interpreter.IntegerStack); 103 214 } 104 215 }
Note: See TracChangeset
for help on using the changeset viewer.