14template <
class TKey,
class TValue,
class TKeyComp,
class TAlloc>
33template <
class TTree,
bool is_const>
36 using tree_type = TTree;
41 using alloc_traits =
typename std::allocator_traits<
42 typename std::allocator_traits<typename tree_type::allocator_type>::
43 template rebind_alloc<typename tree_type::item_type>>;
60 std::conditional_t<is_const,
typename alloc_traits::const_pointer,
61 typename alloc_traits::pointer>;
67 std::conditional_t<is_const, const value_type &, value_type &>;
76 template <
class,
class,
class,
class>
77 friend class ::datastructures::map;
79 using node_ptr = tree_type::node_ptr;
85 using tree_ptr =
const tree_type *;
102 : tree(tree), node(node) {}
123 : node(other.node) {}
133 node = tree->successor(node);
144 node = (node ==
nullptr) ? tree->max_from(tree->get_root())
145 : tree->predecessor(node);
156 return tree == other.tree && node == other.node;
160 return !(*
this == other);
The AVL tree iterator type.
Definition _avl_iterator.hpp:34
bool operator==(const avl_iterator &other) const noexcept
Definition _avl_iterator.hpp:155
bool operator!=(const avl_iterator &other) const noexcept
Definition _avl_iterator.hpp:159
avl_iterator(const avl_iterator &other) noexcept
Definition _avl_iterator.hpp:107
avl_iterator & operator++() noexcept
Definition _avl_iterator.hpp:132
avl_iterator & operator--() noexcept
Definition _avl_iterator.hpp:143
std::bidirectional_iterator_tag iterator_concept
Tells the compiler that this iterator is bidirectional, needed by STL.
Definition _avl_iterator.hpp:71
avl_iterator operator--(int) noexcept
Definition _avl_iterator.hpp:149
typename tree_type::item_type value_type
The tree item type, needed by STL.
Definition _avl_iterator.hpp:51
typename alloc_traits::difference_type difference_type
Item pointer difference type, needed by STL.
Definition _avl_iterator.hpp:54
std::conditional_t< is_const, typename alloc_traits::const_pointer, typename alloc_traits::pointer > pointer
Item pointer, needed by STL.
Definition _avl_iterator.hpp:61
avl_iterator(tree_ptr tree, node_ptr node) noexcept
Creates a new iterator to the given tree.
Definition _avl_iterator.hpp:101
reference operator*() const noexcept
Definition _avl_iterator.hpp:125
pointer operator->() const noexcept
Definition _avl_iterator.hpp:128
avl_iterator & operator=(const avl_iterator &other) noexcept
Definition _avl_iterator.hpp:112
avl_iterator() noexcept
Same as avl_iterator(nullptr, nullptr).
Definition _avl_iterator.hpp:105
~avl_iterator() noexcept=default
std::bidirectional_iterator_tag iterator_category
Tells the compiler that this iterator is bidirectional, needed by STL.
Definition _avl_iterator.hpp:48
std::conditional_t< is_const, const value_type &, value_type & > reference
Item pointer, needed by STL.
Definition _avl_iterator.hpp:67
avl_iterator operator++(int) noexcept
Definition _avl_iterator.hpp:137
A map type using an AVL tree as the underlying structure.
Definition map.hpp:47
Declarations of the persistent map.
Definition _avl.hpp:14