25 #include "common/list_intern.h" 43 template<
typename t_T>
62 constexpr
List() : _anchor(&_anchor, &_anchor) {}
77 void insert(iterator pos,
const t_T &element) {
78 insert(pos._node, element);
84 template<
typename iterator2>
85 void insert(iterator pos, iterator2 first, iterator2 last) {
86 for (; first != last; ++first)
104 assert(pos !=
end());
113 iterator
erase(iterator first, iterator last) {
114 NodeBase *f = first._node;
115 NodeBase *l = last._node;
124 void remove(
const t_T &val) {
125 NodeBase *i = _anchor._next;
126 while (i != &_anchor)
127 if (val == static_cast<Node *>(i)->_data)
135 insert(_anchor._next, element);
140 insert(&_anchor, element);
146 erase(_anchor._next);
152 erase(_anchor._prev);
157 return static_cast<Node *
>(_anchor._next)->_data;
162 return static_cast<Node *
>(_anchor._next)->_data;
167 return static_cast<Node *
>(_anchor._prev)->_data;
172 return static_cast<Node *
>(_anchor._prev)->_data;
179 const iterator e =
end();
181 const_iterator e2 = list.
end();
183 for (i =
begin(), i2 = list.
begin(); (i != e) && (i2 != e2); ++i, ++i2) {
184 static_cast<Node *
>(i._node)->_data = static_cast<const Node *>(i2._node)->_data;
199 for (
const NodeBase *cur = _anchor._next; cur != &_anchor; cur = cur->_next)
206 NodeBase *pos = _anchor._next;
207 while (pos != &_anchor) {
208 Node *node =
static_cast<Node *
>(pos);
219 return (&_anchor == _anchor._next);
260 const_iterator
end()
const {
270 Node *node =
static_cast<Node *
>(pos);
271 n._prev->_next = n._next;
272 n._next->_prev = n._prev;
280 void insert(NodeBase *pos,
const t_T &element) {
284 newNode->_next = pos;
285 newNode->_prev = pos->_prev;
286 newNode->_prev->_next = newNode;
287 newNode->_next->_prev = newNode;
void pop_front()
Definition: list.h:144
constexpr List()
Definition: list.h:62
Definition: list_intern.h:33
uint size_type
Definition: list.h:56
NodeBase erase(NodeBase *pos)
Definition: list.h:268
const_iterator begin() const
Definition: list.h:247
const_iterator reverse_begin() const
Definition: list.h:255
NodeBase _anchor
Definition: list.h:49
t_T value_type
Definition: list.h:55
const_iterator end() const
Definition: list.h:260
size_type size() const
Definition: list.h:197
void insert(iterator pos, const t_T &element)
Definition: list.h:77
void push_front(const t_T &element)
Definition: list.h:134
List(const List< t_T > &list)
Definition: list.h:63
t_T & back()
Definition: list.h:166
ListInternal::NodeBase NodeBase
Definition: list.h:46
void insert(NodeBase *pos, const t_T &element)
Definition: list.h:280
void insert(iterator pos, iterator2 first, iterator2 last)
Definition: list.h:85
iterator end()
Definition: list.h:239
iterator erase(iterator first, iterator last)
Definition: list.h:113
iterator begin()
Definition: list.h:226
Definition: algorithm.h:29
ListInternal::Iterator< t_T > iterator
Definition: list.h:52
void clear()
Definition: list.h:205
ListInternal::ConstIterator< t_T > const_iterator
Definition: list.h:53
const t_T & front() const
Definition: list.h:161
t_T & front()
Definition: list.h:156
List< t_T > & operator=(const List< t_T > &list)
Definition: list.h:176
Definition: list_intern.h:48
iterator reverse_begin()
Definition: list.h:234
Definition: list_intern.h:51
iterator erase(iterator pos)
Definition: list.h:94
iterator reverse_erase(iterator pos)
Definition: list.h:103
void push_back(const t_T &element)
Definition: list.h:139
void pop_back()
Definition: list.h:150
bool empty() const
Definition: list.h:218
Definition: list_intern.h:42
ListInternal::Node< t_T > Node
Definition: list.h:47
const t_T & back() const
Definition: list.h:171