// (C) Copyright 2008-2009 SDML (www.sdml.info) // // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef PREFIX_TREE_ITERATOR_HPP #define PREFIX_TREE_ITERATOR_HPP #include #include namespace gpld { /** * This class is used to iterate over prefix_trees, and to remember positions * within one. * * It will eventually be a bidirectional_iterator. * * @todo At the moment, prefix_tree iterators mainly provide the ability * to remove data. They do not actually iterate. */ template class prefix_tree_iterator { public: /** @name Constructors and Destructors */ //@{ prefix_tree_iterator(); prefix_tree_iterator(prefix_tree_iterator const& other); prefix_tree_iterator(prefix_tree_iterator && other); prefix_tree_iterator(prefix_tree_node *first, prefix_tree_node *last); ~prefix_tree_iterator(); //@} prefix_tree_iterator& swap(prefix_tree_iterator && other); prefix_tree_iterator& operator=(prefix_tree_iterator const& other); prefix_tree_iterator& operator=(prefix_tree_iterator && other); bool operator==(prefix_tree_iterator const& rhs) const; private: /** First node in the key. */ prefix_tree_node *_first; /** Last node in the key. */ prefix_tree_node *_last; }; /** * Default constructor. * @remarks Does not leave the iterator in a usable state. */ template prefix_tree_iterator::prefix_tree_iterator() : _first(0), _last(0) { } /** Copy constructor. */ template prefix_tree_iterator::prefix_tree_iterator(prefix_tree_iterator const& other) : _first(other._first), _last(other._last) { } /** Move constructor. */ template prefix_tree_iterator::prefix_tree_iterator(prefix_tree_iterator && other) : _first(std::move(other._first)), _last(std::move(other._last)) { } /** Initialization constructor. */ template prefix_tree_iterator::prefix_tree_iterator(prefix_tree_node *first, prefix_tree_node *last) : _first(first), _last(last) { } /** Default destructor. */ template prefix_tree_iterator::~prefix_tree_iterator() { } /** Swap operation. */ template prefix_tree_iterator& prefix_tree_iterator::swap(prefix_tree_iterator && other) { using std::swap; swap(_first, other._first); swap(_last, other._last); return *this; } /** Copy assignment operator. */ template prefix_tree_iterator& prefix_tree_iterator::operator=(prefix_tree_iterator const& other) { _first = other._first; _last = other._last; return *this; } /** Move assignment operator. */ template prefix_tree_iterator& prefix_tree_iterator::operator=(prefix_tree_iterator && other) { return swap(other); } /** Equality comparison operator. */ template bool prefix_tree_iterator::operator==(prefix_tree_iterator const& rhs) const { return (_first == rhs._first) && (_last == rhs._last); } } // end of gpld namespace #endif