public void Add(TreeSegment node) { if (node == null) { throw new ArgumentNullException("node"); } if (node.segmentTree != null) { throw new InvalidOperationException("Node already attached."); } node.segmentTree = this; int insertionOffset = node.Offset; node.DistanceToMaxEnd = node.Length; if (tree.Root == null) { tree.Count = 1; tree.Root = (T)node; node.TotalLength = node.DistanceToPrevNode; return; } if (insertionOffset < tree.Root.TotalLength) { var n = SearchNode(ref insertionOffset); node.TotalLength = node.DistanceToPrevNode = insertionOffset; n.DistanceToPrevNode -= insertionOffset; tree.InsertBefore(n, node); return; } node.DistanceToPrevNode = node.TotalLength = insertionOffset - tree.Root.TotalLength; tree.InsertRight(tree.Root.GetOuterRight(), node); }
public Interval(TreeSegment node, int start, int end) { this.node = node; this.start = start; this.end = end; }