package flare.query
{
    /**
     * Expression operator that computes the logical "or" of sub-expression
     * clauses.
     */
    public class Or extends CompositeExpression
    {
        /**
         * Creates a new Or operator.
         * @param clauses the sub-expression clauses
         */
        public function Or(...clauses) {
            super(clauses);
        }
        
        /**
         * @inheritDoc
         */
        public override function clone():Expression
        {
            return cloneHelper(new Or());
        }
        
        /**
         * @inheritDoc
         */
        public override function eval(o:Object=null):*
        {
            return predicate(o);
        }
        
        /**
         * @inheritDoc
         */
        public override function predicate(o:Object):Boolean
        {
            for each (var e:Expression in _children) {
                if (e.eval(o)) return true;
            }
            return false;
        }
        
        /**
         * @inheritDoc
         */
        public override function toString():String
        {
            return _children.length==0 ? "FALSE" : super.getString("OR");
        }
        
    } // end of class Or
}