namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions { using System.Collections.Generic; using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes; using Interpreter; using Stack; public abstract class RotateExpression : StatelessExpression { public bool Eval(IPushStack stack) { if (stack.Count < 3) return false; stack.Swap(3); return true; } } [PushExpression(StackTypes.Integer, "INTEGER.ROT")] public class IntegerRotateExpression : RotateExpression { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.IntegerStack); } } [PushExpression(StackTypes.Float, "FLOAT.ROT")] public class FloatRotateExpression : RotateExpression { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.FloatStack); } } [PushExpression(StackTypes.Boolean, "BOOLEAN.ROT")] public class BooleanRotateExpression : RotateExpression { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.BooleanStack); } } [PushExpression(StackTypes.Name, "NAME.ROT")] public class NameRotateExpression : RotateExpression { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.NameStack); } } [PushExpression(StackTypes.Exec, "EXEC.ROT")] public class ExecRotateExpression : RotateExpression { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.ExecStack); } } [PushExpression(StackTypes.Code, "CODE.ROT")] public class CodeRotateExpression : RotateExpression { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.CodeStack); } } [PushExpression(StackTypes.Char, "CHAR.ROT")] public class CharRotateExpression : RotateExpression { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.CharStack); } } [PushExpression(StackTypes.String, "STRING.ROT")] public class StringRotateExpression : RotateExpression { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.StringStack); } } [PushExpression(StackTypes.IntegerVector, "INTEGER[].ROT")] public class IntegerVectorRotateExpression : RotateExpression> { public override bool Eval(IInternalPushInterpreter interpreter) { return Eval(interpreter.IntegerVectorStack); } } }