Changeset 14952 for branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/BooleanExpressions.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/BooleanExpressions.cs
r14905 r14952 3 3 4 4 using Attributes; 5 6 using HeuristicLab.Common; 7 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 8 5 9 using Interpreter; 6 10 using Stack; … … 10 14 /// </summary> 11 15 [PushExpression(StackTypes.Boolean, "BOOLEAN.AND")] 16 [StorableClass] 12 17 public class BooleanAndExpression : StatelessExpression { 13 public bool IsNoop(IInternalPushInterpreter interpreter) { 18 public BooleanAndExpression() { } 19 [StorableConstructor] 20 public BooleanAndExpression(bool deserializing) : base(deserializing) { } 21 22 public override bool IsNoop(IInternalPushInterpreter interpreter) { 14 23 return interpreter.BooleanStack.Count < 2; 15 24 } 16 25 17 public void TryEval(IInternalPushInterpreter interpreter) {26 public override void Eval(IInternalPushInterpreter interpreter) { 18 27 var first = interpreter.BooleanStack.Pop(); 19 28 var second = interpreter.BooleanStack.Top; … … 21 30 22 31 interpreter.BooleanStack.SetTop(result); 23 }24 25 public override bool Eval(IInternalPushInterpreter interpreter) {26 if (IsNoop(interpreter))27 return false;28 29 TryEval(interpreter);30 return true;31 32 } 32 33 } … … 36 37 /// </summary> 37 38 [PushExpression(StackTypes.Boolean, "BOOLEAN.OR")] 39 [StorableClass] 38 40 public class BooleanOrExpression : StatelessExpression { 39 public override bool Eval(IInternalPushInterpreter interpreter) {40 if (interpreter.BooleanStack.Count < 2)41 return false;41 public BooleanOrExpression() { } 42 [StorableConstructor] 43 public BooleanOrExpression(bool deserializing) : base(deserializing) { } 42 44 45 public override bool IsNoop(IInternalPushInterpreter interpreter) { 46 return interpreter.BooleanStack.Count < 2; 47 } 48 49 public override void Eval(IInternalPushInterpreter interpreter) { 43 50 var first = interpreter.BooleanStack.Pop(); 44 51 var second = interpreter.BooleanStack.Top; … … 46 53 47 54 interpreter.BooleanStack.SetTop(result); 48 return true;49 55 } 50 56 } … … 54 60 /// </summary> 55 61 [PushExpression(StackTypes.Boolean, "BOOLEAN.NOT")] 62 [StorableClass] 56 63 public class BooleanNotExpression : StatelessExpression { 57 public override bool Eval(IInternalPushInterpreter interpreter) {58 if (interpreter.BooleanStack.IsEmpty)59 return false;64 public BooleanNotExpression() { } 65 [StorableConstructor] 66 public BooleanNotExpression(bool deserializing) : base(deserializing) { } 60 67 68 public override bool IsNoop(IInternalPushInterpreter interpreter) { 69 return interpreter.BooleanStack.IsEmpty; 70 } 71 72 public override void Eval(IInternalPushInterpreter interpreter) { 61 73 interpreter.BooleanStack.SetTop(!interpreter.BooleanStack.Top); 62 return true;63 74 } 64 75 } … … 68 79 /// </summary> 69 80 [PushExpression(StackTypes.Boolean, "BOOLEAN.FROMFLOAT", StackTypes.Float)] 81 [StorableClass] 70 82 public class BooleanFromFloatExpression : StatelessExpression { 71 public override bool Eval(IInternalPushInterpreter interpreter) { 72 if (interpreter.FloatStack.Count == 0) return false; 83 public BooleanFromFloatExpression() { } 84 [StorableConstructor] 85 public BooleanFromFloatExpression(bool deserializing) : base(deserializing) { } 73 86 74 var value = Math.Abs(interpreter.FloatStack.Pop()) > 0.0000001; 87 public override bool IsNoop(IInternalPushInterpreter interpreter) { 88 return interpreter.FloatStack.Count == 0; 89 } 75 90 91 public override void Eval(IInternalPushInterpreter interpreter) { 92 var value = !Math.Abs(interpreter.FloatStack.Pop()).IsAlmost(0); 76 93 interpreter.BooleanStack.Push(value); 77 return true;78 94 } 79 95 } … … 83 99 /// </summary> 84 100 [PushExpression(StackTypes.Boolean, "BOOLEAN.FROMINTEGER", StackTypes.Integer)] 101 [StorableClass] 85 102 public class BooleanFromIntegerExpression : StatelessExpression { 86 public override bool Eval(IInternalPushInterpreter interpreter) { 87 if (interpreter.IntegerStack.Count == 0) return false; 103 public BooleanFromIntegerExpression() { } 104 [StorableConstructor] 105 public BooleanFromIntegerExpression(bool deserializing) : base(deserializing) { } 88 106 107 public override bool IsNoop(IInternalPushInterpreter interpreter) { 108 return interpreter.IntegerStack.Count == 0; 109 } 110 111 public override void Eval(IInternalPushInterpreter interpreter) { 89 112 var value = interpreter.IntegerStack.Pop() != 0; 90 91 113 interpreter.BooleanStack.Push(value); 92 return true;93 114 } 94 115 } … … 98 119 /// </summary> 99 120 [PushExpression(StackTypes.Boolean, "BOOLEAN.INVERT_FIRST_THEN_AND")] 121 [StorableClass] 100 122 public class BooleanInvertFirstThenAnd : StatelessExpression { 101 public override bool Eval(IInternalPushInterpreter interpreter) {102 if (interpreter.BooleanStack.Count < 2)103 return false;123 public BooleanInvertFirstThenAnd() { } 124 [StorableConstructor] 125 public BooleanInvertFirstThenAnd(bool deserializing) : base(deserializing) { } 104 126 127 public override bool IsNoop(IInternalPushInterpreter interpreter) { 128 return interpreter.BooleanStack.Count < 2; 129 } 130 131 public override void Eval(IInternalPushInterpreter interpreter) { 105 132 var first = interpreter.BooleanStack.Pop(); 106 133 var second = interpreter.BooleanStack.Top; … … 108 135 109 136 interpreter.BooleanStack.SetTop(result); 110 return true;111 137 } 112 138 } … … 116 142 /// </summary> 117 143 [PushExpression(StackTypes.Boolean, "BOOLEAN.INVERT_SECOND_THEN_AND")] 144 [StorableClass] 118 145 public class BooleanInvertSecondThenAnd : StatelessExpression { 119 public override bool Eval(IInternalPushInterpreter interpreter) {120 if (interpreter.BooleanStack.Count < 2)121 return false;146 public BooleanInvertSecondThenAnd() { } 147 [StorableConstructor] 148 public BooleanInvertSecondThenAnd(bool deserializing) : base(deserializing) { } 122 149 150 public override bool IsNoop(IInternalPushInterpreter interpreter) { 151 return interpreter.BooleanStack.Count < 2; 152 } 153 154 public override void Eval(IInternalPushInterpreter interpreter) { 123 155 var first = interpreter.BooleanStack.Pop(); 124 156 var second = interpreter.BooleanStack.Top; … … 126 158 127 159 interpreter.BooleanStack.SetTop(result); 128 return true;129 160 } 130 161 } … … 135 166 /// </summary> 136 167 [PushExpression(StackTypes.Boolean, "BOOLEAN.XOR")] 168 [StorableClass] 137 169 public class BooleanXorExpression : StatelessExpression { 138 public override bool Eval(IInternalPushInterpreter interpreter) {139 if (interpreter.BooleanStack.Count < 2)140 return false;170 public BooleanXorExpression() { } 171 [StorableConstructor] 172 public BooleanXorExpression(bool deserializing) : base(deserializing) { } 141 173 174 public override bool IsNoop(IInternalPushInterpreter interpreter) { 175 return interpreter.BooleanStack.Count < 2; 176 } 177 178 public override void Eval(IInternalPushInterpreter interpreter) { 142 179 var first = interpreter.BooleanStack.Pop(); 143 180 var second = interpreter.BooleanStack.Top; … … 145 182 146 183 interpreter.BooleanStack.SetTop(result); 147 return true;148 184 } 149 185 }
Note: See TracChangeset
for help on using the changeset viewer.