Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/DuplicateExpressions.cs @ 14952

Last change on this file since 14952 was 14952, checked in by pkimmesw, 8 years ago

#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 size: 6.5 KB
Line 
1namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
2  using System.Collections.Generic;
3
4  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
5  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
6  using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
7  using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
8
9  /// <summary>
10  ///     Duplicates the top item on the INTEGER stack. Does not pop its argument
11  ///     (which, if it did, would negate the effect of the duplication!).
12  /// </summary>
13  /// <typeparam name="T">Stacktype</typeparam>
14  [StorableClass]
15  public abstract class DuplicateExpression<T> : StatelessExpression {
16    protected DuplicateExpression() { }
17    [StorableConstructor]
18    protected DuplicateExpression(bool deserializing) : base(deserializing) { }
19
20    protected void Eval(IPushStack<T> stack) {
21      stack.Push(stack.Top);
22    }
23  }
24
25  [StorableClass]
26  [PushExpression(StackTypes.Integer, "INTEGER.DUP")]
27  public class IntegerDuplicateExpression : DuplicateExpression<long> {
28    public IntegerDuplicateExpression() { }
29    [StorableConstructor]
30    protected IntegerDuplicateExpression(bool deserializing) : base(deserializing) { }
31
32    public override bool IsNoop(IInternalPushInterpreter interpreter) {
33      return interpreter.IntegerStack.IsEmpty;
34    }
35
36    public override void Eval(IInternalPushInterpreter interpreter) {
37      Eval(interpreter.IntegerStack);
38    }
39  }
40
41  [StorableClass]
42  [PushExpression(StackTypes.Float, "FLOAT.DUP")]
43  public class FloatDuplicateExpression : DuplicateExpression<double> {
44    public FloatDuplicateExpression() { }
45    [StorableConstructor]
46    protected FloatDuplicateExpression(bool deserializing) : base(deserializing) { }
47
48    public override bool IsNoop(IInternalPushInterpreter interpreter) {
49      return interpreter.FloatStack.IsEmpty;
50    }
51
52    public override void Eval(IInternalPushInterpreter interpreter) {
53      Eval(interpreter.FloatStack);
54    }
55  }
56
57  [StorableClass]
58  [PushExpression(StackTypes.Boolean, "BOOLEAN.DUP")]
59  public class BooleanDuplicateExpression : DuplicateExpression<bool> {
60    public BooleanDuplicateExpression() { }
61    [StorableConstructor]
62    protected BooleanDuplicateExpression(bool deserializing) : base(deserializing) { }
63
64    public override bool IsNoop(IInternalPushInterpreter interpreter) {
65      return interpreter.BooleanStack.IsEmpty;
66    }
67
68    public override void Eval(IInternalPushInterpreter interpreter) {
69      Eval(interpreter.BooleanStack);
70    }
71  }
72
73  [StorableClass]
74  [PushExpression(StackTypes.Name, "NAME.DUP")]
75  public class NameDuplicateExpression : DuplicateExpression<string> {
76    public NameDuplicateExpression() { }
77    [StorableConstructor]
78    protected NameDuplicateExpression(bool deserializing) : base(deserializing) { }
79
80    public override bool IsNoop(IInternalPushInterpreter interpreter) {
81      return interpreter.NameStack.IsEmpty;
82    }
83
84    public override void Eval(IInternalPushInterpreter interpreter) {
85      Eval(interpreter.NameStack);
86    }
87  }
88
89  [StorableClass]
90  [PushExpression(StackTypes.Exec, "EXEC.DUP")]
91  public class ExecDuplicateExpression : DuplicateExpression<Expression> {
92    public ExecDuplicateExpression() { }
93    [StorableConstructor]
94    protected ExecDuplicateExpression(bool deserializing) : base(deserializing) { }
95
96    public override bool IsNoop(IInternalPushInterpreter interpreter) {
97      return interpreter.ExecStack.IsEmpty;
98    }
99
100    public override void Eval(IInternalPushInterpreter interpreter) {
101      Eval(interpreter.ExecStack);
102    }
103  }
104
105  [StorableClass]
106  [PushExpression(StackTypes.Code, "CODE.DUP")]
107  public class CodeDuplicateExpression : DuplicateExpression<Expression> {
108    public CodeDuplicateExpression() { }
109    [StorableConstructor]
110    protected CodeDuplicateExpression(bool deserializing) : base(deserializing) { }
111
112    public override bool IsNoop(IInternalPushInterpreter interpreter) {
113      return interpreter.CodeStack.IsEmpty;
114    }
115
116    public override void Eval(IInternalPushInterpreter interpreter) {
117      Eval(interpreter.CodeStack);
118    }
119  }
120
121  [StorableClass]
122  [PushExpression(StackTypes.IntegerVector, "INTEGER[].DUP")]
123  public class IntegerVectorDuplicateExpression : DuplicateExpression<List<long>> {
124    public IntegerVectorDuplicateExpression() { }
125    [StorableConstructor]
126    protected IntegerVectorDuplicateExpression(bool deserializing) : base(deserializing) { }
127
128    public override bool IsNoop(IInternalPushInterpreter interpreter) {
129      return interpreter.IntegerVectorStack.IsEmpty;
130    }
131
132    public override void Eval(IInternalPushInterpreter interpreter) {
133      Eval(interpreter.IntegerVectorStack);
134    }
135  }
136
137  [StorableClass]
138  [PushExpression(StackTypes.FloatVector, "FLOAT[].DUP")]
139  public class FloatVectorDuplicateExpression : DuplicateExpression<List<double>> {
140    public FloatVectorDuplicateExpression() { }
141    [StorableConstructor]
142    protected FloatVectorDuplicateExpression(bool deserializing) : base(deserializing) { }
143
144    public override bool IsNoop(IInternalPushInterpreter interpreter) {
145      return interpreter.FloatVectorStack.IsEmpty;
146    }
147
148    public override void Eval(IInternalPushInterpreter interpreter) {
149      Eval(interpreter.FloatVectorStack);
150    }
151  }
152
153  [StorableClass]
154  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].DUP")]
155  public class BooleanVectorDuplicateExpression : DuplicateExpression<List<bool>> {
156    public BooleanVectorDuplicateExpression() { }
157    [StorableConstructor]
158    protected BooleanVectorDuplicateExpression(bool deserializing) : base(deserializing) { }
159
160    public override bool IsNoop(IInternalPushInterpreter interpreter) {
161      return interpreter.BooleanVectorStack.IsEmpty;
162    }
163
164    public override void Eval(IInternalPushInterpreter interpreter) {
165      Eval(interpreter.BooleanVectorStack);
166    }
167  }
168
169  [StorableClass]
170  [PushExpression(StackTypes.StringVector, "STRING[].DUP")]
171  public class StringVectorDuplicateExpression : DuplicateExpression<List<string>> {
172    public StringVectorDuplicateExpression() { }
173    [StorableConstructor]
174    protected StringVectorDuplicateExpression(bool deserializing) : base(deserializing) { }
175
176    public override bool IsNoop(IInternalPushInterpreter interpreter) {
177      return interpreter.StringVectorStack.IsEmpty;
178    }
179
180    public override void Eval(IInternalPushInterpreter interpreter) {
181      Eval(interpreter.StringVectorStack);
182    }
183  }
184}
Note: See TracBrowser for help on using the repository browser.