示例#1
0
        static Message()
        {
            globalMethods["+"]  = new AddMethod();
            globalMethods["-"]  = new SubtractMethod();
            globalMethods["*"]  = new MultiplyMethod();
            globalMethods["/"]  = new DivideMethod();
            globalMethods["=="] = new EqualsNativeMethod();
            globalMethods["!="] = new NotEqualsNativeMethod();

            // TODO put not in global, but associated with types
            globalMethods["new"] = new NewMethod();
        }
示例#2
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="elements">线段树锁维护的元素数组</param>
 /// <param name="left">维护的区间的左端点</param>
 /// <param name="right">维护的区间的右端点</param>
 /// <param name="mergeMethod">区间合并方法</param>
 /// <param name="addMethod">区间修改方法</param>
 /// <param name="mulMethod">区间修改累和方法</param>
 /// <param name="initVal">初始值(默认为T的初始值)</param>
 public SegmentTree(T[] elements, int left, int right,
                    MergeMethod mergeMethod, AddMethod addMethod, MultiplyMethod mulMethod, T initVal = default(T))
 {
     if (right < left)
     {
         throw new ArgumentOutOfRangeException("right", "区间right<left");
     }
     if (left < 0)
     {
         throw new ArgumentOutOfRangeException("left", "left越界");
     }
     if (right > elements.GetUpperBound(0))
     {
         throw new ArgumentOutOfRangeException("right", "right越界");
     }
     lazied   = false;
     _left    = left;
     _right   = right;
     merge    = mergeMethod;
     add      = addMethod;
     multiply = mulMethod;
     lazy     = initValue = initVal;
     build(elements);
 }