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); } } }