// <file> // <copyright see="prj:///doc/copyright.txt"/> // <license see="prj:///doc/license.txt"/> // <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/> // <version>$Revision: 2497 $</version> // </file> using System; using System.Diagnostics; using System.Collections.Generic; namespace ICSharpCode.TextEditor.Util { internal struct RedBlackTreeIterator<T> : IEnumerator<T> { internal RedBlackTreeNode<T> node; internal RedBlackTreeIterator(RedBlackTreeNode<T> node) { this.node = node; } public bool IsValid { get { return node != null; } } public T Current { get { if (node != null) return node.val; else throw new InvalidOperationException(); } } object System.Collections.IEnumerator.Current { get { return this.Current; } } void IDisposable.Dispose() { } void System.Collections.IEnumerator.Reset() { throw new NotSupportedException(); } public bool MoveNext() { if (node == null) return false; if (node.right != null) { node = node.right.LeftMost; } else { RedBlackTreeNode<T> oldNode; do { oldNode = node; node = node.parent; // we are on the way up from the right part, don't output node again } while (node != null && node.right == oldNode); } return node != null; } public bool MoveBack() { if (node == null) return false; if (node.left != null) { node = node.left.RightMost; } else { RedBlackTreeNode<T> oldNode; do { oldNode = node; node = node.parent; // we are on the way up from the left part, don't output node again } while (node != null && node.left == oldNode); } return node != null; } } }
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.
This article, along with any associated source code and files, is licensed under The MIT License