Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/VectorReverseExpressions.cs @ 15017

Last change on this file since 15017 was 15017, checked in by pkimmesw, 7 years ago

#2665 Fixed Benchmark Problem Definition, Converted LoopExpressions to stateless expressions, Added several unit test to ensure funcionality, Fixed UI bugs

File size: 3.4 KB
Line 
1using System.Collections.Generic;
2
3namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
4  using System.Linq;
5
6  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
7  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
8  using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
9  using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
10
11  /// <summary>
12  /// Takes the reverse of the top item on the type stack.
13  /// </summary>
14  /// <param name="vectorStack"></param>
15  /// <returns></returns>
16  [StorableClass]
17  public abstract class VectorReverseExpression<T> : StatelessExpression {
18    protected VectorReverseExpression() { }
19    [StorableConstructor]
20    protected VectorReverseExpression(bool deserializing) : base(deserializing) { }
21
22    protected bool IsNoop(IPushStack<IReadOnlyList<T>> vectorStack) {
23      return vectorStack.IsEmpty || vectorStack.Top.Count < 2;
24    }
25
26    protected void Eval(IPushStack<IReadOnlyList<T>> vectorStack) {
27      vectorStack.Top = vectorStack.Top.Reverse().ToArray();
28    }
29  }
30
31  [StorableClass]
32  [PushExpression(StackTypes.IntegerVector, "INTEGER[].REVERSE")]
33  public class IntegerVectorReverseExpression : VectorReverseExpression<long> {
34    public IntegerVectorReverseExpression() { }
35    [StorableConstructor]
36    protected IntegerVectorReverseExpression(bool deserializing) : base(deserializing) { }
37
38    public override bool IsNoop(IInternalPushInterpreter interpreter) {
39      return IsNoop(interpreter.IntegerVectorStack);
40    }
41
42    public override void Eval(IInternalPushInterpreter interpreter) {
43      Eval(interpreter.IntegerVectorStack);
44    }
45  }
46
47  [StorableClass]
48  [PushExpression(StackTypes.FloatVector, "FLOAT[].REVERSE")]
49  public class FloatVectorReverseExpression : VectorReverseExpression<double> {
50    public FloatVectorReverseExpression() { }
51    [StorableConstructor]
52    protected FloatVectorReverseExpression(bool deserializing) : base(deserializing) { }
53
54    public override bool IsNoop(IInternalPushInterpreter interpreter) {
55      return IsNoop(interpreter.FloatVectorStack);
56    }
57
58    public override void Eval(IInternalPushInterpreter interpreter) {
59      Eval(interpreter.FloatVectorStack);
60    }
61  }
62
63  [StorableClass]
64  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].REVERSE")]
65  public class BooleanVectorReverseExpression : VectorReverseExpression<bool> {
66    public BooleanVectorReverseExpression() { }
67    [StorableConstructor]
68    protected BooleanVectorReverseExpression(bool deserializing) : base(deserializing) { }
69
70    public override bool IsNoop(IInternalPushInterpreter interpreter) {
71      return IsNoop(interpreter.BooleanVectorStack);
72    }
73
74    public override void Eval(IInternalPushInterpreter interpreter) {
75      Eval(interpreter.BooleanVectorStack);
76    }
77  }
78
79  [StorableClass]
80  [PushExpression(StackTypes.StringVector, "STRING[].REVERSE")]
81  public class StringVectorReverseExpression : VectorReverseExpression<string> {
82    public StringVectorReverseExpression() { }
83    [StorableConstructor]
84    protected StringVectorReverseExpression(bool deserializing) : base(deserializing) { }
85
86    public override bool IsNoop(IInternalPushInterpreter interpreter) {
87      return IsNoop(interpreter.StringVectorStack);
88    }
89
90    public override void Eval(IInternalPushInterpreter interpreter) {
91      Eval(interpreter.StringVectorStack);
92    }
93  }
94}
Note: See TracBrowser for help on using the repository browser.