示例#1
0
 protected rangeValueBase(T min, T max, T start, numberRangeModifyRule __rule)
 {
     rule = __rule;
     setCriteria(min, max, false);
     //range = getRange(min, max);
     val = start;
 }
        public rangeValueEnum(numberRangeModifyRule __rule, T start) : base()
        {
            Type t = typeof(T);

            if (!t.isEnum())
            {
                throw new ArgumentException("start", "Type must be an Enum");
            }

            var vls = Enum.GetValues(t);

            foreach (Object v in vls)
            {
                values.Add(v);
            }

            var ens = t.GetEnumNames().ToList();

            min = 0;
            max = Enumerable.Count <string>(ens);

            range = Enumerable.Count <string>(ens);
            rule  = __rule;

            val = Convert.ToInt32(start);
        }
        /// <summary>
        /// Održava vrednost u zadatom rasponu
        /// </summary>
        /// <param name="old">Postojeća vrednost</param>
        /// <param name="delta">Razlika kojom pravimo korekciju</param>
        /// <param name="max">Maksimalna vrednost</param>
        /// <param name="rule">Pravilo kojim menjamo vrednost</param>
        /// <param name="op">Operator koji se primenjuje</param>
        /// <returns>
        /// Broj koji je sigurno u rasponu
        /// </returns>
        /// <seealso cref="aceCommonTypes.extensions.imbValueChangers.checkRange(int,int,int,bool)"/>
        public static float rangeChange(this float old, float delta, float max, numberRangeModifyRule rule, String op = "+")
        {
            Double tmpOut   = Convert.ToDouble(old);
            Double tmpMax   = Convert.ToDouble(max);
            Double tmpDelta = Convert.ToDouble(delta);

            return((float)rangeChange(tmpOut, tmpDelta, tmpMax, rule, op));
        }
 /// <summary>
 /// Defines range
 /// </summary>
 /// <param name="_min">The minimum.</param>
 /// <param name="_max">The maximum.</param>
 /// <param name="_rule">The rule.</param>
 public aceRangeConfig(IComparable _min, IComparable _max, numberRangeModifyRule _rule)
 {
     min  = _min;
     max  = _max;
     rule = _rule;
 }
 public static Int32 rangeChange(this Int32 old, Int32 delta, Int32 max, numberRangeModifyRule rule,
                                 String op = "+")
 {
     return((Int32)rangeChange((float)old, (float)delta, (float)max, rule, op));
 }
        public static Double rangeChange(this Double old, Double delta, Double max, numberRangeModifyRule rule, String op = "+", Double min = 0)
        {
            Double tmpOut   = old;
            Double tmpMax   = max;
            Double tmpDelta = delta;

            Boolean doCalc = false;

            switch (rule)
            {
            case numberRangeModifyRule.clipToMax:
            case numberRangeModifyRule.loop:
            case numberRangeModifyRule.bounce:
                doCalc = true;
                break;

            default:
                break;
            }

            if (doCalc)
            {
                switch (op)
                {
                case "+":
                    tmpOut = old + delta;
                    break;

                case "-":
                    tmpOut = old - delta;
                    break;

                case "/":
                    tmpOut = old / delta;
                    break;

                case "*":
                    tmpOut = old * delta;
                    break;

                case "%":
                    tmpOut = old % delta;
                    break;

                default:
                    throw new NotImplementedException();
                    //Expression exp = new Expression(old.ToString() + op + delta.ToString());
                    //tmpOut = Double.Parse(exp.Evaluate().ToString());
                    break;
                }
            }

            switch (rule)
            {
            case numberRangeModifyRule.clipToMax:

                if (tmpOut > tmpMax)
                {
                    tmpOut = tmpMax;
                }
                break;

            case numberRangeModifyRule.loop:
                //  tmpOut = Double.Parse(exp.Evaluate().ToString());
                if (tmpOut > tmpMax)
                {
                    tmpOut = tmpOut % tmpMax;
                }
                break;

            case numberRangeModifyRule.set:
                tmpOut = tmpDelta;
                break;

            case numberRangeModifyRule.bounce:
                if (tmpOut > tmpMax)
                {
                    Double t = tmpMax - tmpOut;

                    tmpOut = tmpMax + t;
                    if (tmpOut < min)
                    {
                        tmpOut = min;
                    }
                    //   tmpOut = tmpOut  tmpMax;
                }
                break;

            case numberRangeModifyRule.bypass:
            default:
                tmpOut = old;
                break;
            }

            //if (tmpOut < min) tmpOut = min;

            return(tmpOut);
        }
        public static Decimal rangeChange(this Decimal old, Decimal delta, Decimal max, numberRangeModifyRule rule, String op = "+")
        {
            Double tmpOut   = Convert.ToDouble(old);
            Double tmpMax   = Convert.ToDouble(max);
            Double tmpDelta = Convert.ToDouble(delta);

            return((Decimal)rangeChange(tmpOut, tmpDelta, tmpMax, rule, op));
        }
示例#8
0
 public imbAttribute(imbAttributeName _name, Double _min, Double _max, numberRangeModifyRule _mode)
 {
     name     = _name.ToString();
     nameEnum = _name;
     objMsg   = new aceRangeConfig(_min, _max, _mode);
 }
 public rangeValueDecimal(decimal min, decimal max, decimal start, numberRangeModifyRule __rule) : base(min, max, start, __rule)
 {
     range = max - min;
 }
示例#10
0
 public rangeValueDouble(double min, double max, double start, numberRangeModifyRule __rule) : base(min, max, start, __rule)
 {
     range = max - min;
 }
示例#11
0
 public rangeValueInt32(int min, int max, int start, numberRangeModifyRule __rule) : base(min, max, start, __rule)
 {
     range = max - min;
 }