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