Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/18/17 01:15:25 (7 years ago)
Author:
pkimmesw
Message:

#2665 BenchmarkSuite, all examples, partially tested, VectorExpressions added

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/YankExpressions.cs

    r14834 r14875  
    11namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
     2  using System;
    23  using System.Collections.Generic;
    34
     
    1213  /// <typeparam name="T">Stacktype</typeparam>
    1314  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;
    1619
    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);
    2422      return true;
    2523    }
     
    2927  public class IntegerYankExpression : YankExpression<long> {
    3028    public override bool Eval(IInternalPushInterpreter interpreter) {
    31       return this.Eval(interpreter.IntegerStack, interpreter.IntegerStack, 2);
     29      return this.Eval(interpreter.IntegerStack, interpreter.IntegerStack);
    3230    }
    3331  }
     
    8886    }
    8987  }
     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  }
    90109}
Note: See TracChangeset for help on using the changeset viewer.