module orelang.operator.LogicOperator;
import orelang.operator.IOperator,
       orelang.Engine,
       orelang.Value;
import std.algorithm;

class NotOperator : IOperator {
  /**
   * call
   */
  public Value call(Engine engine, Value[] args) {
    return new Value(!engine.eval(args[0]).getBool);
  }
}

class AndOperator : IOperator {
  /**
   * call
   */
  public Value call(Engine engine, Value[] args) {
    return new Value(args.all!(arg => engine.eval(arg).getBool));
  }
}

class OrOperator : IOperator {
  /**
   * call
   */
  public Value call(Engine engine, Value[] args) {
    return new Value(args.any!(arg => engine.eval(arg).getBool));
  }
}