Threaded Iterator Class
template < class C >
class ThreadedBTIterator // a ConstIterator pattern
{
private:
friend C;
typename C::Node* node_;
void Init (Node*); // left slide, skips dead nodes
void rInit (Node*); // right slide, skips dead nodes
void Increment (); // moves to next inorder node, dead or alive
void Decrement (); // moves to previous inorder node, dead or alive
public:
// terminology support
typedef typename C::ValueType ValueType;
typedef typename C::Node Node;
typedef ThreadedBTIterator<C> ConstIterator;
typedef ThreadedBTIterator<C> Iterator;
// operators
bool operator == (const ThreadedBTIterator& i2) const;
bool operator != (const ThreadedBTIterator& i2) const;
const ValueType& operator * () const; // const version
ThreadedBTIterator<C>& operator = (const ThreadedBTIterator& i);
ThreadedBTIterator<C>& operator ++ (); // prefix
ThreadedBTIterator<C> operator ++ (int); // postfix
ThreadedBTIterator<C>& operator -- (); // prefix
ThreadedBTIterator<C> operator -- (int); // postfix
// constructors
ThreadedBTIterator ();
virtual ~ThreadedBTIterator ();
ThreadedBTIterator (Node* n); // type converter
ThreadedBTIterator (const ThreadedBTIterator& i); // copy ctor
// information/access
bool Valid () const; // cursor is valid element
};