Exemple #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);
        }
Exemple #2
0
        public bool Remove(T item)
        {
            RedBlackTreeIterator <T> it = Find(item);

            if (!it.IsValid)
            {
                return(false);
            }
            else
            {
                RemoveAt(it);
                return(true);
            }
        }
Exemple #3
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>));
        }
Exemple #4
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
            CheckProperties();
                        #endif
        }