Пример #1
0
 /// <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;
 }
Пример #2
0
        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);
        }
Пример #3
0
        public bool Remove(T item)
        {
            RedBlackTreeIterator <T> redBlackTreeIterator = this.Find(item);

            if (!redBlackTreeIterator.IsValid)
            {
                return(false);
            }
            this.RemoveAt(redBlackTreeIterator);
            return(true);
        }
Пример #4
0
 /// <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>);
 }
Пример #5
0
 public bool Remove(T item)
 {
     RedBlackTreeIterator<T> it = Find(item);
     if (!it.IsValid)
     {
         return false;
     }
     else
     {
         RemoveAt(it);
         return true;
     }
 }
Пример #6
0
        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>());
        }
Пример #7
0
        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
        }
Пример #8
0
        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);
        }