package flare.query
{    
    /**
     * Expression operator for a literal value.
     */
    public class Literal extends Expression
    {
        /** The boolean true literal. */
        public static const TRUE:Literal = new Literal(true);
        /** The boolean false literal. */
        public static const FALSE:Literal = new Literal(false);
        
        private var _value:Object = null;
        
        /** The literal value of this expression. */
        public function get value():Object { return _value; }
        public function set value(val:Object):void { _value = val; }
        
        /**
         * Creates a new Literal instance.
         * @param val the literal value
         */
        public function Literal(val:Object=null) {
            _value = val;
        }
        
        /**
         * @inheritDoc
         */
        public override function clone():Expression
        {
            return new Literal(_value);
        }
        
        /**
         * @inheritDoc
         */
        public override function predicate(o:Object):Boolean
        {
            return Boolean(_value);
        }
        
        /**
         * @inheritDoc
         */
        public override function eval(o:Object=null):*
        {
            return _value;
        }
        
        /**
         * @inheritDoc
         */
        public override function toString():String
        {
            return String(_value);
        }
        
    } // end of class Literal
}