Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/ShoveExpressions.cs @ 14733

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

#2665 Storable problem data, Renamings due to typos, Removed GP from class names

File size: 2.1 KB
Line 
1namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
2  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
3
4  using Interpreter;
5  using Stack;
6
7  public abstract class ShoveExpression<T> : StatelessExpression {
8    protected void Eval(IStack<T> stack, IStack<long> integerStack, int count = 1) {
9      if (integerStack.Count == 0 ||
10          integerStack.Top > stack.Count - count ||
11          integerStack.Top < 0 ||
12          stack.Count < 2)
13        return;
14
15      var index = (int)integerStack.Pop();
16      var item = stack.Pop();
17
18      stack.Insert(index, item);
19    }
20  }
21
22  [PushExpression(StackType.Integer, "INTEGER.SHOVE")]
23  public class IntegerShoveExpression : ShoveExpression<long> {
24    public override void Eval(IPushInterpreter interpreter) {
25      Eval(interpreter.IntegerStack, interpreter.IntegerStack, 2);
26    }
27  }
28
29  [PushExpression(StackType.Float, "FLOAT.SHOVE")]
30  public class FloatShoveExpression : ShoveExpression<double> {
31    public override void Eval(IPushInterpreter interpreter) {
32      Eval(interpreter.FloatStack, interpreter.IntegerStack);
33    }
34  }
35
36  [PushExpression(StackType.Boolean, "BOOLEAN.SHOVE")]
37  public class BooleanShoveExpression : ShoveExpression<bool> {
38    public override void Eval(IPushInterpreter interpreter) {
39      Eval(interpreter.BooleanStack, interpreter.IntegerStack);
40    }
41  }
42
43  [PushExpression(StackType.Name, "NAME.SHOVE")]
44  public class NameShoveExpression : ShoveExpression<string> {
45    public override void Eval(IPushInterpreter interpreter) {
46      Eval(interpreter.NameStack, interpreter.IntegerStack);
47    }
48  }
49
50  [PushExpression(StackType.Exec, "EXEC.SHOVE")]
51  public class ExecShoveExpression : ShoveExpression<Expression> {
52    public override void Eval(IPushInterpreter interpreter) {
53      Eval(interpreter.ExecStack, interpreter.IntegerStack);
54    }
55  }
56
57  [PushExpression(StackType.Code, "CODE.SHOVE")]
58  public class CodeShoveExpression : ShoveExpression<Expression> {
59    public override void Eval(IPushInterpreter interpreter) {
60      Eval(interpreter.CodeStack, interpreter.IntegerStack);
61    }
62  }
63}
Note: See TracBrowser for help on using the repository browser.