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