namespace HeuristicLab.Problems.ProgramSynthesis.Push.Expressions { using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes; using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter; using Stack; /// /// Tells whether that stack is empty. /// public abstract class EmptyExpresssions : StatelessExpression { public bool Eval(IStack stack, IStack booleanStack) { booleanStack.Push(stack.IsEmpty); return true; } } [PushExpression(StackTypes.Exec, "EXEC.EMPTY", StackTypes.Boolean)] public class ExecEmptyExpression : EmptyExpresssions { public override bool Eval(IPushInterpreter interpreter) { return Eval(interpreter.ExecStack, interpreter.BooleanStack); } } [PushExpression(StackTypes.Code, "CODE.EMPTY", StackTypes.Boolean)] public class CodeEmptyExpression : EmptyExpresssions { public override bool Eval(IPushInterpreter interpreter) { return Eval(interpreter.CodeStack, interpreter.BooleanStack); } } [PushExpression(StackTypes.Integer, "INTEGER.EMPTY", StackTypes.Boolean)] public class IntegerEmptyExpression : EmptyExpresssions { public override bool Eval(IPushInterpreter interpreter) { return Eval(interpreter.IntegerStack, interpreter.BooleanStack); } } [PushExpression(StackTypes.Float, "FLOAT.EMPTY", StackTypes.Boolean)] public class FloatEmptyExpression : EmptyExpresssions { public override bool Eval(IPushInterpreter interpreter) { return Eval(interpreter.FloatStack, interpreter.BooleanStack); } } [PushExpression(StackTypes.Boolean, "BOOLEAN.EMPTY", StackTypes.Boolean)] public class BooleanEmptyExpression : EmptyExpresssions { public override bool Eval(IPushInterpreter interpreter) { return Eval(interpreter.BooleanStack, interpreter.BooleanStack); } } [PushExpression(StackTypes.Char, "CHAR.EMPTY", StackTypes.Boolean)] public class CharEmptyExpression : EmptyExpresssions { public override bool Eval(IPushInterpreter interpreter) { return Eval(interpreter.CharStack, interpreter.BooleanStack); } } [PushExpression(StackTypes.String, "STRING.EMPTY", StackTypes.Boolean)] public class StringEmptyExpression : EmptyExpresssions { public override bool Eval(IPushInterpreter interpreter) { return Eval(interpreter.StringStack, interpreter.BooleanStack); } } }