package flare.query
{
    /**
     * Aggregate operator for computing the sum of a set of values.
     */
    public class Sum extends AggregateExpression
    {
        private var _sum:Number;
        
        /**
         * Creates a new Sum operator.
         * @param input the sub-expression of which to compute the sum
         */
        public function Sum(input:*) {
            super(input);
        }
        
        /**
         * @inheritDoc
         */
        public override function reset():void
        {
            _sum = 0;
        }
        
        /**
         * @inheritDoc
         */
        public override function eval(o:Object=null):*
        {
            return _sum;
        }
        
        /**
         * @inheritDoc
         */
        public override function aggregate(value:Object):void
        {
            var x:Number = Number(_expr.eval(value));
            if (!isNaN(x)) {
                _sum += x;
            }
        }
        
    } // end of class Sum
}