Public Types | Public Member Functions | Private Attributes

claw::avl_base< K, Comp >::avl_iterator Class Reference

AVL iterator. More...

#include <avl_base.hpp>

List of all members.

Public Types

typedef K value_type
typedef K & reference
typedef K *const pointer
typedef ptrdiff_t difference_type
typedef
std::bidirectional_iterator_tag 
iterator_category

Public Member Functions

 avl_iterator ()
 Constructor.
 avl_iterator (avl_node_ptr node, bool final)
 Constructor.
avl_iteratoroperator++ ()
 Preincrement.
avl_iterator operator++ (int)
 Postincrement.
avl_iteratoroperator-- ()
 Predecrement.
avl_iterator operator-- (int)
 Postdecrement.
reference operator* () const
 Dereference.
pointer operator-> () const
 Reference.
bool operator== (const avl_iterator &it) const
 Equality.
bool operator!= (const avl_iterator &it) const
 Difference.

Private Attributes

avl_node_ptr m_current
 Current node in the tree.
bool m_is_final
 True if we've gone past the last node.

Detailed Description

template<class K, class Comp = std::less<K>>
class claw::avl_base< K, Comp >::avl_iterator

AVL iterator.

Definition at line 131 of file avl_base.hpp.


Member Typedef Documentation

template<class K, class Comp = std::less<K>>
typedef ptrdiff_t claw::avl_base< K, Comp >::avl_iterator::difference_type

Definition at line 137 of file avl_base.hpp.

template<class K, class Comp = std::less<K>>
typedef std::bidirectional_iterator_tag claw::avl_base< K, Comp >::avl_iterator::iterator_category

Definition at line 139 of file avl_base.hpp.

template<class K, class Comp = std::less<K>>
typedef K* const claw::avl_base< K, Comp >::avl_iterator::pointer

Definition at line 136 of file avl_base.hpp.

template<class K, class Comp = std::less<K>>
typedef K& claw::avl_base< K, Comp >::avl_iterator::reference

Definition at line 135 of file avl_base.hpp.

template<class K, class Comp = std::less<K>>
typedef K claw::avl_base< K, Comp >::avl_iterator::value_type

Definition at line 134 of file avl_base.hpp.


Constructor & Destructor Documentation

template<class K , class Comp >
claw::avl_base< K, Comp >::avl_iterator::avl_iterator (  )

Constructor.

Definition at line 595 of file avl_base.tpp.

  : m_current(NULL), m_is_final(true)
{

} // avl_iterator::avl_iterator() [constructeur]
template<class K , class Comp >
claw::avl_base< K, Comp >::avl_iterator::avl_iterator ( avl_node_ptr  node,
bool  final 
)

Constructor.

Definition at line 607 of file avl_base.tpp.

  : m_current(node), m_is_final(final)
{

} // avl_iterator::avl_iterator() [constructeur with node]

Member Function Documentation

template<class K , class Comp >
bool claw::avl_base< K, Comp >::avl_iterator::operator!= ( const avl_iterator it ) const

Difference.

Parameters:
itIterator to compare to.

Definition at line 723 of file avl_base.tpp.

{
  return !( *this == it ); 
} // avl_iterator::operator!=()
template<class K , class Comp >
claw::avl_base< K, Comp >::avl_iterator::reference claw::avl_base< K, Comp >::avl_iterator::operator* (  ) const

Dereference.

Definition at line 688 of file avl_base.tpp.

{
  return m_current->key; 
} // avl_iterator::operator*() [dereference]
template<class K , class Comp >
claw::avl_base< K, Comp >::avl_iterator & claw::avl_base< K, Comp >::avl_iterator::operator++ (  )

Preincrement.

Precondition:
not final(this).

Definition at line 620 of file avl_base.tpp.

References claw::avl_base< K, Comp >::avl_node::next().

{
  assert(!m_is_final);
  assert(m_current);

  avl_node* p = m_current->next();

  if ( m_current == p )
    m_is_final = true;
  else
    m_current = p;

  return *this;
} // avl_iterator::operator++() [preincrement]
template<class K , class Comp >
claw::avl_base< K, Comp >::avl_iterator claw::avl_base< K, Comp >::avl_iterator::operator++ ( int   )

Postincrement.

Definition at line 641 of file avl_base.tpp.

{
  avl_iterator it = *this;
  ++(*this);
  return it;
} // avl_iterator::operator++ [postincrement]
template<class K , class Comp >
claw::avl_base< K, Comp >::avl_iterator claw::avl_base< K, Comp >::avl_iterator::operator-- ( int   )

Postdecrement.

Definition at line 675 of file avl_base.tpp.

{
  avl_iterator it = *this;
  --(*this);
  return it;
} // avl_iterator::operator-- [postdecrement]
template<class K , class Comp >
claw::avl_base< K, Comp >::avl_iterator & claw::avl_base< K, Comp >::avl_iterator::operator-- (  )

Predecrement.

Precondition:
iterator is not at the begining of the container.

Definition at line 655 of file avl_base.tpp.

{
  assert(m_current);

  if (m_is_final)
    m_is_final = !m_is_final;
  else
    m_current = m_current->prev();

  assert(m_current != NULL);
  
  return *this;
} // avl_iterator::operator--() [predecrement]
template<class K , class Comp >
claw::avl_base< K, Comp >::avl_iterator::pointer claw::avl_base< K, Comp >::avl_iterator::operator-> (  ) const

Reference.

Definition at line 699 of file avl_base.tpp.

{
  return &m_current->key; 
} // avl_iterator::operator->()
template<class K , class Comp >
bool claw::avl_base< K, Comp >::avl_iterator::operator== ( const avl_iterator it ) const

Equality.

Parameters:
itIterator to compare to.

Definition at line 711 of file avl_base.tpp.

References claw::avl_base< K, Comp >::avl_iterator::m_current, and claw::avl_base< K, Comp >::avl_iterator::m_is_final.

{
  return (m_current == it.m_current) && (m_is_final == it.m_is_final); 
} // avl_iterator::operator==()

Member Data Documentation

template<class K, class Comp = std::less<K>>
avl_node_ptr claw::avl_base< K, Comp >::avl_iterator::m_current [private]

Current node in the tree.

Definition at line 156 of file avl_base.hpp.

Referenced by claw::avl_base< K, Comp >::avl_iterator::operator==().

template<class K, class Comp = std::less<K>>
bool claw::avl_base< K, Comp >::avl_iterator::m_is_final [private]

True if we've gone past the last node.

Definition at line 159 of file avl_base.hpp.

Referenced by claw::avl_base< K, Comp >::avl_iterator::operator==().


The documentation for this class was generated from the following files: