package flare.query
{
    /**
     * Aggregate operator for counting the number of items in a set of values.
     */
    public class Count extends AggregateExpression
    {
        private var _count:int;
        
        /**
         * Creates a new Count operator
         * @param input the sub-expression of which to count the value
         */
        public function Count(input:*) {
            super(input);
        }
        
        /**
         * @inheritDoc
         */
        public override function reset():void
        {
            _count = 0;
        }
        
        /**
         * @inheritDoc
         */
        public override function eval(o:Object=null):*
        {
            return _count;
        }
        
        /**
         * @inheritDoc
         */
        public override function aggregate(value:Object):void
        {
            if (_expr.eval(value) != null) {
                _count++;
            }
        }
        
    } // end of class Count
}