10 #include <type_traits> 12 #include "options.hpp" 13 #include "size_holder.hpp" 30 template <
class Node,
class Tag =
int>
49 template <
class Node,
class Options = DefaultOptions,
class Tag =
int>
55 "Node class not properly derived from ListNodeBase");
58 template <
class ConcreteIterator,
class BaseType>
61 typedef ptrdiff_t difference_type;
62 typedef BaseType value_type;
63 typedef BaseType & reference;
64 typedef BaseType * pointer;
65 typedef std::input_iterator_tag iterator_category;
69 IteratorBase(
const ConcreteIterator & other);
71 ConcreteIterator & operator=(
const ConcreteIterator & other);
72 ConcreteIterator & operator=(ConcreteIterator && other);
74 bool operator==(
const ConcreteIterator & other)
const;
75 bool operator!=(
const ConcreteIterator & other)
const;
77 ConcreteIterator & operator++();
78 ConcreteIterator operator++(
int);
79 ConcreteIterator & operator+=(
size_t steps);
80 ConcreteIterator operator+(
size_t steps)
const;
82 ConcreteIterator & operator--();
83 ConcreteIterator operator--(
int);
84 ConcreteIterator & operator-=(
size_t steps);
85 ConcreteIterator operator-(
size_t steps)
const;
87 reference operator*()
const;
88 pointer operator->()
const;
101 class iterator :
public IteratorBase<iterator, Node> {
103 using IteratorBase<iterator, Node>::IteratorBase;
112 using IteratorBase<const_iterator, const Node>::IteratorBase;
114 : IteratorBase<const_iterator, const Node>::IteratorBase(other.l,
133 void insert(Node * next, Node * n);
140 void remove(Node * n);
173 iterator iterator_to(
const Node & n);
206 SizeHolder<Options::constant_time_size> s;
213 #endif // YGG_LIST_HPP An intrusive doubly-linked list class.
Definition: list.hpp:50
Base class (template) to supply your node class with metainformation.
Definition: list.hpp:31
Const iterator over all elements in the list.
Definition: list.hpp:110
Iterator over all elements in the list.
Definition: list.hpp:101
Definition: rbtree.hpp:18