/// <summary> /// Returns the iterator pointing to the first item greater than <paramref name="item"/>. /// </summary> public RedBlackTreeIterator<T> UpperBound(T item) { RedBlackTreeIterator<T> it = LowerBound(item); while (it.IsValid && host.Compare(it.Current, item) == 0) { it.MoveNext(); } return it; }
public RedBlackTreeIterator <T> UpperBound(T item) { RedBlackTreeIterator <T> redBlackTreeIterator = this.LowerBound(item); while (redBlackTreeIterator.IsValid && this.host.Compare(redBlackTreeIterator.Current, item) == 0) { redBlackTreeIterator.MoveNext(); } return(redBlackTreeIterator); }
public bool Remove(T item) { RedBlackTreeIterator <T> redBlackTreeIterator = this.Find(item); if (!redBlackTreeIterator.IsValid) { return(false); } this.RemoveAt(redBlackTreeIterator); return(true); }
/// <summary> /// Returns the iterator pointing to the specified item, or an iterator in End state if the item is not found. /// </summary> public RedBlackTreeIterator<T> Find(T item) { RedBlackTreeIterator<T> it = LowerBound(item); while (it.IsValid && host.Compare(it.Current, item) == 0) { if (host.Equals(it.Current, item)) return it; it.MoveNext(); } return default(RedBlackTreeIterator<T>); }
public bool Remove(T item) { RedBlackTreeIterator<T> it = Find(item); if (!it.IsValid) { return false; } else { RemoveAt(it); return true; } }
public RedBlackTreeIterator <T> Find(T item) { RedBlackTreeIterator <T> redBlackTreeIterator = this.LowerBound(item); while (redBlackTreeIterator.IsValid && this.host.Compare(redBlackTreeIterator.Current, item) == 0) { if (this.host.Equals(redBlackTreeIterator.Current, item)) { return(redBlackTreeIterator); } redBlackTreeIterator.MoveNext(); } return(new RedBlackTreeIterator <T>()); }
public void RemoveAt(RedBlackTreeIterator<T> iterator) { RedBlackTreeNode<T> node = iterator.node; if (node == null) throw new ArgumentException("Invalid iterator"); while (node.parent != null) node = node.parent; if (node != root) throw new ArgumentException("Iterator does not belong to this tree"); RemoveNode(iterator.node); #if DEBUG_EX CheckProperties(); #endif }
public void RemoveAt(RedBlackTreeIterator <T> iterator) { RedBlackTreeNode <T> redBlackTreeNode = iterator.node; if (redBlackTreeNode == null) { throw new ArgumentException("Invalid iterator"); } while (redBlackTreeNode.parent != null) { redBlackTreeNode = redBlackTreeNode.parent; } if (redBlackTreeNode != this.root) { throw new ArgumentException("Iterator does not belong to this tree"); } this.RemoveNode(iterator.node); }