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