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

    r14897 r14952  
    22  using System.Collections.Generic;
    33  using Attributes;
    4   using Common;
     4
     5  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     6
    57  using Interpreter;
    68  using Stack;
     
    1012  /// </summary>
    1113  /// <typeparam name="T">Stacktype</typeparam>
     14  [StorableClass]
    1215  public abstract class EqualsExpression<T> : StatelessExpression {
    13     public bool Eval(IPushStack<T> stack, IPushStack<bool> booleanStack) {
    14       if (stack.Count < 2) return false;
    15 
     16    protected EqualsExpression() { }
     17    [StorableConstructor]
     18    protected EqualsExpression(bool deserializing) : base(deserializing) { }
     19
     20    protected void Eval(IPushStack<T> stack, IPushStack<bool> booleanStack) {
    1621      var first = stack[1];
    1722      var second = stack.Top;
     
    1924
    2025      booleanStack.Push(first.Equals(second));
    21 
    22       return true;
    23     }
    24   }
    25 
     26    }
     27  }
     28
     29  [StorableClass]
    2630  [PushExpression(StackTypes.Integer, "INTEGER.=", StackTypes.Boolean)]
    2731  public class IntegerEqualsExpression : EqualsExpression<long> {
    28     public override bool Eval(IInternalPushInterpreter interpreter) {
    29       return Eval(interpreter.IntegerStack, interpreter.BooleanStack);
    30     }
    31   }
    32 
     32    public IntegerEqualsExpression() { }
     33    [StorableConstructor]
     34    protected IntegerEqualsExpression(bool deserializing) : base(deserializing) { }
     35
     36    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     37      return interpreter.IntegerStack.Count < 2;
     38    }
     39
     40    public override void Eval(IInternalPushInterpreter interpreter) {
     41      Eval(interpreter.IntegerStack, interpreter.BooleanStack);
     42    }
     43  }
     44
     45  [StorableClass]
    3346  [PushExpression(StackTypes.Float, "FLOAT.=", StackTypes.Boolean)]
    3447  public class FloatEqualsExpression : EqualsExpression<double> {
    35     public override bool Eval(IInternalPushInterpreter interpreter) {
    36       if (interpreter.FloatStack.Count < 2) return false;
    37 
    38       var first = interpreter.FloatStack[1];
    39       var second = interpreter.FloatStack.Top;
    40       interpreter.FloatStack.Remove(2);
    41 
    42       interpreter.BooleanStack.Push(first.IsAlmost(second));
    43       return true;
    44     }
    45   }
    46 
     48    public FloatEqualsExpression() { }
     49    [StorableConstructor]
     50    protected FloatEqualsExpression(bool deserializing) : base(deserializing) { }
     51
     52    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     53      return interpreter.FloatStack.Count < 2;
     54    }
     55
     56    public override void Eval(IInternalPushInterpreter interpreter) {
     57      Eval(interpreter.FloatStack, interpreter.BooleanStack);
     58    }
     59  }
     60
     61  [StorableClass]
    4762  [PushExpression(StackTypes.Boolean, "BOOLEAN.=", StackTypes.Boolean)]
    4863  public class BooleanEqualsExpression : EqualsExpression<bool> {
    49     public override bool Eval(IInternalPushInterpreter interpreter) {
    50       return Eval(interpreter.BooleanStack, interpreter.BooleanStack);
    51     }
    52   }
    53 
     64    public BooleanEqualsExpression() { }
     65    [StorableConstructor]
     66    protected BooleanEqualsExpression(bool deserializing) : base(deserializing) { }
     67
     68    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     69      return interpreter.BooleanStack.Count < 2;
     70    }
     71
     72    public override void Eval(IInternalPushInterpreter interpreter) {
     73      Eval(interpreter.BooleanStack, interpreter.BooleanStack);
     74    }
     75  }
     76
     77  [StorableClass]
    5478  [PushExpression(StackTypes.Name, "NAME.=", StackTypes.Boolean)]
    5579  public class NameEqualsExpression : EqualsExpression<string> {
    56     public override bool Eval(IInternalPushInterpreter interpreter) {
    57       return Eval(interpreter.NameStack, interpreter.BooleanStack);
    58     }
    59   }
    60 
     80    public NameEqualsExpression() { }
     81    [StorableConstructor]
     82    protected NameEqualsExpression(bool deserializing) : base(deserializing) { }
     83
     84    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     85      return interpreter.NameStack.Count < 2;
     86    }
     87
     88    public override void Eval(IInternalPushInterpreter interpreter) {
     89      Eval(interpreter.NameStack, interpreter.BooleanStack);
     90    }
     91  }
     92
     93  [StorableClass]
    6194  [PushExpression(StackTypes.Exec, "EXEC.=", StackTypes.Boolean)]
    6295  public class ExecEqualsExpression : EqualsExpression<Expression> {
    63     public override bool Eval(IInternalPushInterpreter interpreter) {
    64       return Eval(interpreter.ExecStack, interpreter.BooleanStack);
    65     }
    66   }
    67 
     96    public ExecEqualsExpression() { }
     97    [StorableConstructor]
     98    protected ExecEqualsExpression(bool deserializing) : base(deserializing) { }
     99
     100    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     101      return interpreter.ExecStack.Count < 2;
     102    }
     103
     104    public override void Eval(IInternalPushInterpreter interpreter) {
     105      Eval(interpreter.ExecStack, interpreter.BooleanStack);
     106    }
     107  }
     108
     109  [StorableClass]
    68110  [PushExpression(StackTypes.Code, "CODE.=", StackTypes.Boolean)]
    69111  public class CodeEqualsExpression : EqualsExpression<Expression> {
    70     public override bool Eval(IInternalPushInterpreter interpreter) {
    71       return Eval(interpreter.CodeStack, interpreter.BooleanStack);
    72     }
    73   }
    74 
     112    public CodeEqualsExpression() { }
     113    [StorableConstructor]
     114    protected CodeEqualsExpression(bool deserializing) : base(deserializing) { }
     115
     116    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     117      return interpreter.CodeStack.Count < 2;
     118    }
     119
     120    public override void Eval(IInternalPushInterpreter interpreter) {
     121      Eval(interpreter.CodeStack, interpreter.BooleanStack);
     122    }
     123  }
     124
     125  [StorableClass]
    75126  [PushExpression(StackTypes.Char, "CHAR.=", StackTypes.Boolean)]
    76127  public class CharEqualsExpression : EqualsExpression<char> {
    77     public override bool Eval(IInternalPushInterpreter interpreter) {
    78       return Eval(interpreter.CharStack, interpreter.BooleanStack);
    79     }
    80   }
    81 
     128    public CharEqualsExpression() { }
     129    [StorableConstructor]
     130    protected CharEqualsExpression(bool deserializing) : base(deserializing) { }
     131
     132    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     133      return interpreter.CharStack.Count < 2;
     134    }
     135
     136    public override void Eval(IInternalPushInterpreter interpreter) {
     137      Eval(interpreter.CharStack, interpreter.BooleanStack);
     138    }
     139  }
     140
     141  [StorableClass]
    82142  [PushExpression(StackTypes.String, "STRING.=", StackTypes.Boolean)]
    83143  public class StringEqualsExpression : EqualsExpression<string> {
    84     public override bool Eval(IInternalPushInterpreter interpreter) {
    85       return Eval(interpreter.StringStack, interpreter.BooleanStack);
    86     }
    87   }
    88 
     144    public StringEqualsExpression() { }
     145    [StorableConstructor]
     146    protected StringEqualsExpression(bool deserializing) : base(deserializing) { }
     147
     148    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     149      return interpreter.StringStack.Count < 2;
     150    }
     151
     152    public override void Eval(IInternalPushInterpreter interpreter) {
     153      Eval(interpreter.StringStack, interpreter.BooleanStack);
     154    }
     155  }
     156
     157  [StorableClass]
    89158  [PushExpression(StackTypes.IntegerVector, "INTEGER[].=", StackTypes.Boolean)]
    90159  public class IntegerVectorEqualsExpression : EqualsExpression<List<long>> {
    91     public override bool Eval(IInternalPushInterpreter interpreter) {
    92       return Eval(interpreter.IntegerVectorStack, interpreter.BooleanStack);
    93     }
    94   }
    95 
     160    public IntegerVectorEqualsExpression() { }
     161    [StorableConstructor]
     162    protected IntegerVectorEqualsExpression(bool deserializing) : base(deserializing) { }
     163
     164    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     165      return interpreter.IntegerVectorStack.Count < 2;
     166    }
     167
     168    public override void Eval(IInternalPushInterpreter interpreter) {
     169      Eval(interpreter.IntegerVectorStack, interpreter.BooleanStack);
     170    }
     171  }
     172
     173  [StorableClass]
    96174  [PushExpression(StackTypes.FloatVector, "FLOAT[].=", StackTypes.Boolean)]
    97175  public class FloatVectorEqualsExpression : EqualsExpression<List<double>> {
    98     public override bool Eval(IInternalPushInterpreter interpreter) {
    99       return Eval(interpreter.FloatVectorStack, interpreter.BooleanStack);
    100     }
    101   }
    102 
     176    public FloatVectorEqualsExpression() { }
     177    [StorableConstructor]
     178    protected FloatVectorEqualsExpression(bool deserializing) : base(deserializing) { }
     179
     180    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     181      return interpreter.FloatVectorStack.Count < 2;
     182    }
     183
     184    public override void Eval(IInternalPushInterpreter interpreter) {
     185      Eval(interpreter.FloatVectorStack, interpreter.BooleanStack);
     186    }
     187  }
     188
     189  [StorableClass]
    103190  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].=", StackTypes.Boolean)]
    104191  public class BooleanVectorEqualsExpression : EqualsExpression<List<bool>> {
    105     public override bool Eval(IInternalPushInterpreter interpreter) {
    106       return Eval(interpreter.BooleanVectorStack, interpreter.BooleanStack);
    107     }
    108   }
    109 
     192    public BooleanVectorEqualsExpression() { }
     193    [StorableConstructor]
     194    protected BooleanVectorEqualsExpression(bool deserializing) : base(deserializing) { }
     195
     196    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     197      return interpreter.BooleanVectorStack.Count < 2;
     198    }
     199
     200    public override void Eval(IInternalPushInterpreter interpreter) {
     201      Eval(interpreter.BooleanVectorStack, interpreter.BooleanStack);
     202    }
     203  }
     204
     205  [StorableClass]
    110206  [PushExpression(StackTypes.StringVector, "STRING[].=", StackTypes.Boolean)]
    111207  public class StringVectorEqualsExpression : EqualsExpression<List<string>> {
    112     public override bool Eval(IInternalPushInterpreter interpreter) {
    113       return Eval(interpreter.StringVectorStack, interpreter.BooleanStack);
     208    public StringVectorEqualsExpression() { }
     209    [StorableConstructor]
     210    protected StringVectorEqualsExpression(bool deserializing) : base(deserializing) { }
     211
     212    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     213      return interpreter.StringVectorStack.Count < 2;
     214    }
     215
     216    public override void Eval(IInternalPushInterpreter interpreter) {
     217      Eval(interpreter.StringVectorStack, interpreter.BooleanStack);
    114218    }
    115219  }
Note: See TracChangeset for help on using the changeset viewer.