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/VectorContainsExpressions.cs

    r14834 r14952  
    22
    33namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
     4  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    45  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
    56  using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
     
    1011  /// </summary>
    1112  /// <typeparam name="T"></typeparam>
     13  [StorableClass]
    1214  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) { }
    1618
     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) {
    1724      var vector = vectorStack.Pop();
    1825      var literal = canOverride ? literalStack.Top : literalStack.Pop();
     
    2128      if (canOverride) interpreter.BooleanStack.SetTop(contains);
    2229      else interpreter.BooleanStack.Push(contains);
    23       return true;
    2430    }
    2531  }
    2632
     33  [StorableClass]
    2734  [PushExpression(StackTypes.IntegerVector, "INTEGER[].CONTAINS", StackTypes.Integer | StackTypes.Boolean)]
    2835  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);
    3146    }
    3247  }
    3348
     49  [StorableClass]
    3450  [PushExpression(StackTypes.FloatVector, "FLOAT[].CONTAINS", StackTypes.Float | StackTypes.Boolean)]
    3551  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);
    3862    }
    3963  }
    4064
     65  [StorableClass]
    4166  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].CONTAINS", StackTypes.Boolean)]
    4267  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);
    4578    }
    4679  }
    4780
     81  [StorableClass]
    4882  [PushExpression(StackTypes.StringVector, "STRING[].CONTAINS", StackTypes.String | StackTypes.Boolean)]
    4983  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);
    5294    }
    5395  }
Note: See TracChangeset for help on using the changeset viewer.