Changeset 14952 for branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/VectorContainsExpressions.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/VectorContainsExpressions.cs
r14834 r14952 2 2 3 3 namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions { 4 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 4 5 using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes; 5 6 using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter; … … 10 11 /// </summary> 11 12 /// <typeparam name="T"></typeparam> 13 [StorableClass] 12 14 public abstract class VectorContainsExpression<T> : StatelessExpression { 13 protected bool Eval(IInternalPushInterpreter interpreter, IPushStack<List<T>> vectorStack, IPushStack<T> literalStack, bool canOverride = false) {14 if (vectorStack.IsEmpty || literalStack.IsEmpty)15 return false;15 protected VectorContainsExpression() { } 16 [StorableConstructor] 17 protected VectorContainsExpression(bool deserializing) : base(deserializing) { } 16 18 19 protected bool IsNoop(IPushStack<List<T>> vectorStack, IPushStack<T> literalStack) { 20 return vectorStack.IsEmpty || literalStack.IsEmpty; 21 } 22 23 protected void Eval(IInternalPushInterpreter interpreter, IPushStack<List<T>> vectorStack, IPushStack<T> literalStack, bool canOverride = false) { 17 24 var vector = vectorStack.Pop(); 18 25 var literal = canOverride ? literalStack.Top : literalStack.Pop(); … … 21 28 if (canOverride) interpreter.BooleanStack.SetTop(contains); 22 29 else interpreter.BooleanStack.Push(contains); 23 return true;24 30 } 25 31 } 26 32 33 [StorableClass] 27 34 [PushExpression(StackTypes.IntegerVector, "INTEGER[].CONTAINS", StackTypes.Integer | StackTypes.Boolean)] 28 35 public class IntegerVectorContainsExpression : VectorContainsExpression<long> { 29 public override bool Eval(IInternalPushInterpreter interpreter) { 30 return Eval(interpreter, interpreter.IntegerVectorStack, interpreter.IntegerStack); 36 public IntegerVectorContainsExpression() { } 37 [StorableConstructor] 38 protected IntegerVectorContainsExpression(bool deserializing) : base(deserializing) { } 39 40 public override bool IsNoop(IInternalPushInterpreter interpreter) { 41 return IsNoop(interpreter.IntegerVectorStack, interpreter.IntegerStack); 42 } 43 44 public override void Eval(IInternalPushInterpreter interpreter) { 45 Eval(interpreter, interpreter.IntegerVectorStack, interpreter.IntegerStack); 31 46 } 32 47 } 33 48 49 [StorableClass] 34 50 [PushExpression(StackTypes.FloatVector, "FLOAT[].CONTAINS", StackTypes.Float | StackTypes.Boolean)] 35 51 public class FloatVectorContainsExpression : VectorContainsExpression<double> { 36 public override bool Eval(IInternalPushInterpreter interpreter) { 37 return Eval(interpreter, interpreter.FloatVectorStack, interpreter.FloatStack); 52 public FloatVectorContainsExpression() { } 53 [StorableConstructor] 54 protected FloatVectorContainsExpression(bool deserializing) : base(deserializing) { } 55 56 public override bool IsNoop(IInternalPushInterpreter interpreter) { 57 return IsNoop(interpreter.FloatVectorStack, interpreter.FloatStack); 58 } 59 60 public override void Eval(IInternalPushInterpreter interpreter) { 61 Eval(interpreter, interpreter.FloatVectorStack, interpreter.FloatStack); 38 62 } 39 63 } 40 64 65 [StorableClass] 41 66 [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].CONTAINS", StackTypes.Boolean)] 42 67 public class BooleanVectorContainsExpression : VectorContainsExpression<bool> { 43 public override bool Eval(IInternalPushInterpreter interpreter) { 44 return Eval(interpreter, interpreter.BooleanVectorStack, interpreter.BooleanStack, true); 68 public BooleanVectorContainsExpression() { } 69 [StorableConstructor] 70 protected BooleanVectorContainsExpression(bool deserializing) : base(deserializing) { } 71 72 public override bool IsNoop(IInternalPushInterpreter interpreter) { 73 return IsNoop(interpreter.BooleanVectorStack, interpreter.BooleanStack); 74 } 75 76 public override void Eval(IInternalPushInterpreter interpreter) { 77 Eval(interpreter, interpreter.BooleanVectorStack, interpreter.BooleanStack, true); 45 78 } 46 79 } 47 80 81 [StorableClass] 48 82 [PushExpression(StackTypes.StringVector, "STRING[].CONTAINS", StackTypes.String | StackTypes.Boolean)] 49 83 public class StringVectorContainsExpression : VectorContainsExpression<string> { 50 public override bool Eval(IInternalPushInterpreter interpreter) { 51 return Eval(interpreter, interpreter.StringVectorStack, interpreter.StringStack); 84 public StringVectorContainsExpression() { } 85 [StorableConstructor] 86 protected StringVectorContainsExpression(bool deserializing) : base(deserializing) { } 87 88 public override bool IsNoop(IInternalPushInterpreter interpreter) { 89 return IsNoop(interpreter.StringVectorStack, interpreter.StringStack); 90 } 91 92 public override void Eval(IInternalPushInterpreter interpreter) { 93 Eval(interpreter, interpreter.StringVectorStack, interpreter.StringStack); 52 94 } 53 95 }
Note: See TracChangeset
for help on using the changeset viewer.