namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions {
using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
using Interpreter;
using Stack;
///
/// Swaps the top two values.
///
/// Stacktype
public abstract class SwapExpression : StatelessExpression {
public void Eval(IStack stack) {
if (stack.Count < 2)
return;
stack.Swap(2);
}
}
[PushExpression(StackType.Integer, "INTEGER.SWAP")]
public class IntegerSwapExpression : SwapExpression {
public override void Eval(IPushGpInterpreter interpreter) {
Eval(interpreter.IntegerStack);
}
}
[PushExpression(StackType.Float, "FLOAT.SWAP")]
public class FloatSwapExpression : SwapExpression {
public override void Eval(IPushGpInterpreter interpreter) {
Eval(interpreter.FloatStack);
}
}
[PushExpression(StackType.Boolean, "BOOLEAN.SWAP")]
public class BooleanSwapExpression : SwapExpression {
public override void Eval(IPushGpInterpreter interpreter) {
Eval(interpreter.BooleanStack);
}
}
[PushExpression(StackType.Name, "NAME.SWAP")]
public class NameSwapExpression : SwapExpression {
public override void Eval(IPushGpInterpreter interpreter) {
Eval(interpreter.NameStack);
}
}
[PushExpression(StackType.Exec, "EXEC.SWAP")]
public class ExecSwapExpression : SwapExpression {
public override void Eval(IPushGpInterpreter interpreter) {
Eval(interpreter.ExecStack);
}
}
[PushExpression(StackType.Code, "CODE.SWAP")]
public class CodeSwapExpression : SwapExpression {
public override void Eval(IPushGpInterpreter interpreter) {
Eval(interpreter.CodeStack);
}
}
}