Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/10/17 11:23:05 (7 years ago)
Author:
pkimmesw
Message:

#2665 Added IsNoop to Expression, Made Expressions storable, Fixed Debugger, Fixed and improved problem data and result visualisation, Added custom ErcOption view, Added problem difficulty to problem data name

File:
1 edited

Legend:

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

    r14909 r14952  
    44  using System;
    55
     6  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    67  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
    78  using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
     
    1213  /// </summary>
    1314  /// <typeparam name="T"></typeparam>
     15  [StorableClass]
    1416  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) { }
    1720
     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) {
    1826      var first = (int)Math.Min(vectorStack.Top.Count, Math.Max(0, interpreter.IntegerStack[1]));
    1927      var second = (int)Math.Min(vectorStack.Top.Count, Math.Max(first, interpreter.IntegerStack.Top));
     
    2129
    2230      if (vectorStack.Top.Count == 0)
    23         return true;
     31        return;
    2432
    2533      var result = vectorStack.Top.GetRange(first, second - first);
    2634      vectorStack.SetTop(result);
    27       return true;
    2835    }
    2936  }
    3037
     38  [StorableClass]
    3139  [PushExpression(StackTypes.IntegerVector, "INTEGER[].SUB", StackTypes.Integer)]
    3240  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);
    3551    }
    3652  }
    3753
     54  [StorableClass]
    3855  [PushExpression(StackTypes.FloatVector, "FLOAT[].SUB", StackTypes.Integer)]
    3956  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);
    4267    }
    4368  }
    4469
     70  [StorableClass]
    4571  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].SUB", StackTypes.Integer)]
    4672  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);
    4983    }
    5084  }
    5185
     86  [StorableClass]
    5287  [PushExpression(StackTypes.StringVector, "STRING[].SUB", StackTypes.Integer)]
    5388  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);
    5699    }
    57100  }
Note: See TracChangeset for help on using the changeset viewer.