using HeuristicLab.Algorithms.PushGP.Interpreter; using HeuristicLab.Algorithms.PushGP.Stack; namespace HeuristicLab.Algorithms.PushGP.Expressions { /// /// Pushes TRUE onto the BOOLEAN stack if the top two items are equal, or FALSE otherwise /// /// Stacktype public abstract class EqualsExpression : Expression { public EqualsExpression(string stringRepresentation) : base(stringRepresentation) { } public void Eval(IStack stack, IStack booleanStack) { if (stack.Count < 2) return; var items = stack.Pop(2); booleanStack.Push(items[0].Equals(items[1])); } } public class IntegerEqualsExpression : EqualsExpression { public IntegerEqualsExpression() : base("INTEGER.=") { } public override void Eval(IInterpreter interpreter) { this.Eval(interpreter.IntegerStack, interpreter.BooleanStack); } } public class FloatEqualsExpression : EqualsExpression { public FloatEqualsExpression() : base("FLOAT.=") { } public override void Eval(IInterpreter interpreter) { this.Eval(interpreter.FloatStack, interpreter.BooleanStack); } } public class BooleanEqualsExpression : EqualsExpression { public BooleanEqualsExpression() : base("BOOLEAN.=") { } public override void Eval(IInterpreter interpreter) { this.Eval(interpreter.BooleanStack, interpreter.BooleanStack); } } public class NameEqualsExpression : EqualsExpression { public NameEqualsExpression() : base("NAME.=") { } public override void Eval(IInterpreter interpreter) { this.Eval(interpreter.NameStack, interpreter.BooleanStack); } } public class ExecEqualsExpression : EqualsExpression { public ExecEqualsExpression() : base("EXEC.=") { } public override void Eval(IInterpreter interpreter) { this.Eval(interpreter.ExecStack, interpreter.BooleanStack); } } public class CodeEqualsExpression : EqualsExpression { public CodeEqualsExpression() : base("CODE.=") { } public override void Eval(IInterpreter interpreter) { this.Eval(interpreter.CodeStack, interpreter.BooleanStack); } } }