Changeset 14875 for branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/YankExpressions.cs
- Timestamp:
- 04/18/17 01:15:25 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/YankExpressions.cs
r14834 r14875 1 1 namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions { 2 using System; 2 3 using System.Collections.Generic; 3 4 … … 12 13 /// <typeparam name="T">Stacktype</typeparam> 13 14 public abstract class YankExpression<T> : StatelessExpression { 14 public bool Eval(IPushStack<T> stack, IPushStack<long> integerStack, int count = 1) { 15 if (integerStack.Count == 0) return false; 15 public bool Eval(IPushStack<T> stack, IPushStack<long> integerStack) { 16 if ((stack == integerStack && integerStack.Count < 2) || 17 (stack != integerStack && (integerStack.IsEmpty || stack.IsEmpty))) 18 return false; 16 19 17 var index = integerStack.Top; 18 19 if ((index > stack.Count - count) || (index < 0) || (stack.Count < 2)) return false; 20 21 integerStack.Pop(); 22 stack.Yank((int)index); 23 20 var index = (int)Math.Abs(integerStack.Pop() % stack.Count); 21 stack.Yank(index); 24 22 return true; 25 23 } … … 29 27 public class IntegerYankExpression : YankExpression<long> { 30 28 public override bool Eval(IInternalPushInterpreter interpreter) { 31 return this.Eval(interpreter.IntegerStack, interpreter.IntegerStack , 2);29 return this.Eval(interpreter.IntegerStack, interpreter.IntegerStack); 32 30 } 33 31 } … … 88 86 } 89 87 } 88 89 [PushExpression(StackTypes.FloatVector, "FLOAT[].YANK", StackTypes.Integer)] 90 public class FloatVectorYankExpression : YankExpression<List<double>> { 91 public override bool Eval(IInternalPushInterpreter interpreter) { 92 return Eval(interpreter.FloatVectorStack, interpreter.IntegerStack); 93 } 94 } 95 96 [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].YANK", StackTypes.Integer)] 97 public class BooleanVectorYankExpression : YankExpression<List<bool>> { 98 public override bool Eval(IInternalPushInterpreter interpreter) { 99 return Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack); 100 } 101 } 102 103 [PushExpression(StackTypes.StringVector, "STRING[].YANK", StackTypes.Integer)] 104 public class StringVectorYankExpression : YankExpression<List<string>> { 105 public override bool Eval(IInternalPushInterpreter interpreter) { 106 return Eval(interpreter.StringVectorStack, interpreter.IntegerStack); 107 } 108 } 90 109 }
Note: See TracChangeset
for help on using the changeset viewer.