Пример #1
0
        public override XTNumericToken Calculate(string formula, XTFormulaArgs args)
        {
            XTNumericToken baseToken  = this.m_formulas[0].Calculate(args);
            XTNumericToken indexToken = this.m_formulas[1].Calculate(args);

            return(new XTDoubleToken(Math.Pow((double)baseToken, 1.0f / (double)indexToken)));
        }
Пример #2
0
        public override XTNumericToken Calculate(string formula, XTFormulaArgs args)
        {
            XTNumericToken lToken = this.m_formulas[0].Calculate(args);
            XTNumericToken rToken = this.m_formulas[1].Calculate(args);

            return(new Random().Next((int)lToken, (int)rToken));
        }
Пример #3
0
        private readonly HashSet <string> m_argNames;           // 公式中实际包含的所有参数

        internal XTFormula(string formula, HashSet <string> argNames)
        {
            this.m_formula   = formula;
            this.m_root      = null;
            this.m_currIsOpt = null;
            this.m_result    = null;
            this.m_argNames  = argNames;
        }
Пример #4
0
        public override XTNumericToken Calculate(string formula, XTFormulaArgs args)
        {
            XTNumericToken lToken = this.m_formulas[0].Calculate(args);
            XTNumericToken rToken = this.m_formulas[1].Calculate(args);

            if (lToken > rToken)
            {
                return(rToken);
            }
            return(lToken);
        }
Пример #5
0
        public bool TryGetValue(string key, out XTNumericToken value)
        {
            XTFormulaArg arg;

            if (!this.m_args.TryGetValue(key, out arg))
            {
                value = null;
                return(false);
            }
            value = arg.Value;
            return(true);
        }
Пример #6
0
        public XTNumericToken Calculate(XTFormulaArgs args)
        {
            if (this.m_result != null)
            {
                return(this.m_result);
            }

            XTNumericToken token = this.m_root.Calculate(this.m_formula, args);

            if (this.IsConst)
            {
                this.m_result = token;
            }
            return(token);
        }
Пример #7
0
        // ----------------------------------------------------------
        // public
        // ----------------------------------------------------------
        public override XTNumericToken Calculate(string formula, XTFormulaArgs args)
        {
            XTNumericToken rValue = this.m_rToken.Calculate(formula, args);

            if (this.m_lToken == null)
            {                   // 以 +、- 号开头的公式
                return((this.m_opt == Operator.Sub) ? -rValue : rValue);
            }
            XTNumericToken lValue = this.m_lToken.Calculate(formula, args);

            switch (this.m_opt)
            {
            case Operator.Or:
                return(lValue | rValue);

            case Operator.Xor:
                return(lValue ^ rValue);

            case Operator.And:
                return(lValue & rValue);

            case Operator.LMove:
                return(lValue << (int)rValue);

            case Operator.RMove:
                return(lValue >> (int)rValue);

            case Operator.Add:
                return(lValue + rValue);

            case Operator.Sub:
                return(lValue - rValue);

            case Operator.Mul:
                return(lValue * rValue);

            case Operator.Div:
                return(lValue / rValue);

            case Operator.Mod:
                return(lValue % rValue);

            case Operator.Pow:
                return(Math.Pow((double)lValue, (double)rValue));
            }
            return(rValue);                     // 永远也不会走这里来
        }
Пример #8
0
 public XTFormulaArg(XTFormulaArgGetter getter, params object[] extras)
 {
     this.m_value      = null;
     this.m_getter     = getter;
     this.m_getterArgs = extras;
 }
Пример #9
0
 public XTFormulaArg(double v)
 {
     this.m_value      = new XTDoubleToken(v);
     this.m_getter     = null;
     this.m_getterArgs = null;
 }
Пример #10
0
 public XTFormulaArg(long v)
 {
     this.m_value      = new XTLongToken(v);
     this.m_getter     = null;
     this.m_getterArgs = null;
 }
Пример #11
0
        public override XTNumericToken Calculate(string formula, XTFormulaArgs args)
        {
            XTNumericToken token = this.m_formulas[0].Calculate(args);

            return(new XTLongToken(token.Round()));
        }