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