| | | | | |

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
  };

| | Top of Page | 14. BST Iterators - 38 of 41