BitOrchestra.UnaryExpression.CreateEvaluator C# (CSharp) Method

CreateEvaluator() protected method

protected CreateEvaluator ( Evaluator>.Dictionary Cache, int BufferSize, int Resolution ) : Evaluator
Cache Evaluator>.Dictionary
BufferSize int
Resolution int
return Evaluator
        protected override Evaluator CreateEvaluator(Dictionary<Expression, Evaluator> Cache, int BufferSize, int Resolution)
        {
            Evaluator srceval = this.Source.GetEvaluator(Cache, BufferSize, Resolution);

            bool constsrc = false;
            Value srcval = 0;

            ConstantEvaluator consteval = srceval as ConstantEvaluator;
            if (consteval != null)
            {
                constsrc = true;
                srcval = consteval.Value;
            }

            int resmag = 2 << (Resolution - 1);
            double period = resmag;
            double scale = (resmag - 3) * 0.5;

            switch (this.Operation)
            {
                case UnaryOperation.Negate:
                    if (constsrc)
                        return new ConstantEvaluator(-srcval);
                    return new NegateEvaluator(srceval);
                case UnaryOperation.Complement:
                    if (constsrc)
                        return new ConstantEvaluator(~srcval);
                    return new ComplementEvaluator(srceval);
                case UnaryOperation.Saw:
                    return new SawEvaluator(srceval, period, scale);
                case UnaryOperation.Sine:
                    return new SineEvaluator(srceval, period, scale);
                case UnaryOperation.Square:
                    return new SquareEvaluator(srceval, period, scale);
                case UnaryOperation.Triangle:
                    return new TriangleEvaluator(srceval, period, scale);
                default:
                    throw new NotImplementedException();
            }
        }