Changeset 14952 for branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/VectorSubExpressions.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/VectorSubExpressions.cs
r14909 r14952 4 4 using System; 5 5 6 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 6 7 using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes; 7 8 using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter; … … 12 13 /// </summary> 13 14 /// <typeparam name="T"></typeparam> 15 [StorableClass] 14 16 public abstract class VectorSubExpression<T> : StatelessExpression { 15 protected bool Eval(IInternalPushInterpreter interpreter, IPushStack<List<T>> vectorStack) { 16 if (vectorStack.IsEmpty || interpreter.IntegerStack.Count < 2) return false; 17 protected VectorSubExpression() { } 18 [StorableConstructor] 19 protected VectorSubExpression(bool deserializing) : base(deserializing) { } 17 20 21 protected bool IsNoop(IInternalPushInterpreter interpreter, IPushStack<List<T>> vectorStack) { 22 return vectorStack.IsEmpty || interpreter.IntegerStack.Count < 2; 23 } 24 25 protected void Eval(IInternalPushInterpreter interpreter, IPushStack<List<T>> vectorStack) { 18 26 var first = (int)Math.Min(vectorStack.Top.Count, Math.Max(0, interpreter.IntegerStack[1])); 19 27 var second = (int)Math.Min(vectorStack.Top.Count, Math.Max(first, interpreter.IntegerStack.Top)); … … 21 29 22 30 if (vectorStack.Top.Count == 0) 23 return true;31 return; 24 32 25 33 var result = vectorStack.Top.GetRange(first, second - first); 26 34 vectorStack.SetTop(result); 27 return true;28 35 } 29 36 } 30 37 38 [StorableClass] 31 39 [PushExpression(StackTypes.IntegerVector, "INTEGER[].SUB", StackTypes.Integer)] 32 40 public class IntegerVectorSubExpression : VectorSubExpression<long> { 33 public override bool Eval(IInternalPushInterpreter interpreter) { 34 return Eval(interpreter, interpreter.IntegerVectorStack); 41 public IntegerVectorSubExpression() { } 42 [StorableConstructor] 43 protected IntegerVectorSubExpression(bool deserializing) : base(deserializing) { } 44 45 public override bool IsNoop(IInternalPushInterpreter interpreter) { 46 return IsNoop(interpreter, interpreter.IntegerVectorStack); 47 } 48 49 public override void Eval(IInternalPushInterpreter interpreter) { 50 Eval(interpreter, interpreter.IntegerVectorStack); 35 51 } 36 52 } 37 53 54 [StorableClass] 38 55 [PushExpression(StackTypes.FloatVector, "FLOAT[].SUB", StackTypes.Integer)] 39 56 public class FloatVectorSubExpression : VectorSubExpression<double> { 40 public override bool Eval(IInternalPushInterpreter interpreter) { 41 return Eval(interpreter, interpreter.FloatVectorStack); 57 public FloatVectorSubExpression() { } 58 [StorableConstructor] 59 protected FloatVectorSubExpression(bool deserializing) : base(deserializing) { } 60 61 public override bool IsNoop(IInternalPushInterpreter interpreter) { 62 return IsNoop(interpreter, interpreter.FloatVectorStack); 63 } 64 65 public override void Eval(IInternalPushInterpreter interpreter) { 66 Eval(interpreter, interpreter.FloatVectorStack); 42 67 } 43 68 } 44 69 70 [StorableClass] 45 71 [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].SUB", StackTypes.Integer)] 46 72 public class BooleanVectorSubExpression : VectorSubExpression<bool> { 47 public override bool Eval(IInternalPushInterpreter interpreter) { 48 return Eval(interpreter, interpreter.BooleanVectorStack); 73 public BooleanVectorSubExpression() { } 74 [StorableConstructor] 75 protected BooleanVectorSubExpression(bool deserializing) : base(deserializing) { } 76 77 public override bool IsNoop(IInternalPushInterpreter interpreter) { 78 return IsNoop(interpreter, interpreter.BooleanVectorStack); 79 } 80 81 public override void Eval(IInternalPushInterpreter interpreter) { 82 Eval(interpreter, interpreter.BooleanVectorStack); 49 83 } 50 84 } 51 85 86 [StorableClass] 52 87 [PushExpression(StackTypes.StringVector, "STRING[].SUB", StackTypes.Integer)] 53 88 public class StringVectorSubExpression : VectorSubExpression<string> { 54 public override bool Eval(IInternalPushInterpreter interpreter) { 55 return Eval(interpreter, interpreter.StringVectorStack); 89 public StringVectorSubExpression() { } 90 [StorableConstructor] 91 protected StringVectorSubExpression(bool deserializing) : base(deserializing) { } 92 93 public override bool IsNoop(IInternalPushInterpreter interpreter) { 94 return IsNoop(interpreter, interpreter.StringVectorStack); 95 } 96 97 public override void Eval(IInternalPushInterpreter interpreter) { 98 Eval(interpreter, interpreter.StringVectorStack); 56 99 } 57 100 }
Note: See TracChangeset
for help on using the changeset viewer.