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(); }
/// <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); }