25 #include "common/list_intern.h" 43 template<
typename t_T>
62 constexpr
List() : _anchor(&_anchor, &_anchor) {}
77 template<
class... TArgs>
78 iterator
emplace(iterator pos, TArgs &&...args) {
79 emplace(pos._node, Common::forward<TArgs>(args)...);
86 iterator
insert(iterator pos,
const t_T &element) {
87 insert(pos._node, element);
94 iterator
insert(iterator pos, t_T &&element) {
102 template<
typename iterator2>
103 void insert(iterator pos, iterator2 first, iterator2 last) {
104 for (; first != last; ++first)
113 assert(pos !=
end());
122 assert(pos !=
end());
131 iterator
erase(iterator first, iterator last) {
132 NodeBase *f = first._node;
133 NodeBase *l = last._node;
142 void remove(
const t_T &val) {
143 NodeBase *i = _anchor._next;
144 while (i != &_anchor)
145 if (val == static_cast<Node *>(i)->_data)
152 template<
class... TArgs>
154 emplace(_anchor._next, Common::forward<TArgs>(args)...);
159 insert(_anchor._next, element);
168 template<
class... TArgs>
170 emplace(&_anchor, Common::forward<TArgs>(args)...);
175 insert(&_anchor, element);
186 erase(_anchor._next);
192 erase(_anchor._prev);
197 return static_cast<Node *
>(_anchor._next)->_data;
202 return static_cast<Node *
>(_anchor._next)->_data;
207 return static_cast<Node *
>(_anchor._prev)->_data;
212 return static_cast<Node *
>(_anchor._prev)->_data;
219 const iterator e =
end();
221 const_iterator e2 = list.
end();
223 for (i =
begin(), i2 = list.
begin(); (i != e) && (i2 != e2); ++i, ++i2) {
224 static_cast<Node *
>(i._node)->_data = static_cast<const Node *>(i2._node)->_data;
239 for (
const NodeBase *cur = _anchor._next; cur != &_anchor; cur = cur->_next)
246 NodeBase *pos = _anchor._next;
247 while (pos != &_anchor) {
248 Node *node =
static_cast<Node *
>(pos);
259 return (&_anchor == _anchor._next);
300 const_iterator
end()
const {
310 Node *node =
static_cast<Node *
>(pos);
311 n._prev->_next = n._next;
312 n._next->_prev = n._prev;
320 template<
class... TArgs>
321 void emplace(NodeBase *pos, TArgs&&... args) {
325 newNode->_next = pos;
326 newNode->_prev = pos->_prev;
327 newNode->_prev->_next = newNode;
328 newNode->_next->_prev = newNode;
334 void insert(NodeBase *pos,
const t_T &element) {
338 newNode->_next = pos;
339 newNode->_prev = pos->_prev;
340 newNode->_prev->_next = newNode;
341 newNode->_next->_prev = newNode;
347 void insert(NodeBase *pos, t_T &&element) {
351 newNode->_next = pos;
352 newNode->_prev = pos->_prev;
353 newNode->_prev->_next = newNode;
354 newNode->_next->_prev = newNode;
void pop_front()
Definition: list.h:184
constexpr List()
Definition: list.h:62
iterator insert(iterator pos, const t_T &element)
Definition: list.h:86
Definition: list_intern.h:33
uint size_type
Definition: list.h:56
NodeBase erase(NodeBase *pos)
Definition: list.h:308
const_iterator begin() const
Definition: list.h:287
const_iterator reverse_begin() const
Definition: list.h:295
NodeBase _anchor
Definition: list.h:49
t_T value_type
Definition: list.h:55
const_iterator end() const
Definition: list.h:300
size_type size() const
Definition: list.h:237
void push_back(t_T &&element)
Definition: list.h:179
iterator insert(iterator pos, t_T &&element)
Definition: list.h:94
void emplace(NodeBase *pos, TArgs &&... args)
Definition: list.h:321
void push_front(const t_T &element)
Definition: list.h:158
List(const List< t_T > &list)
Definition: list.h:63
void emplace_front(TArgs &&...args)
Definition: list.h:153
t_T & back()
Definition: list.h:206
ListInternal::NodeBase NodeBase
Definition: list.h:46
void push_front(t_T &&element)
Definition: list.h:163
void insert(NodeBase *pos, const t_T &element)
Definition: list.h:334
void insert(iterator pos, iterator2 first, iterator2 last)
Definition: list.h:103
iterator end()
Definition: list.h:279
iterator erase(iterator first, iterator last)
Definition: list.h:131
iterator emplace(iterator pos, TArgs &&...args)
Definition: list.h:78
iterator begin()
Definition: list.h:266
Definition: algorithm.h:29
void insert(NodeBase *pos, t_T &&element)
Definition: list.h:347
ListInternal::Iterator< t_T > iterator
Definition: list.h:52
void clear()
Definition: list.h:245
void emplace_back(TArgs &&...args)
Definition: list.h:169
Out move(In first, In last, Out dst)
Definition: algorithm.h:109
ListInternal::ConstIterator< t_T > const_iterator
Definition: list.h:53
const t_T & front() const
Definition: list.h:201
t_T & front()
Definition: list.h:196
List< t_T > & operator=(const List< t_T > &list)
Definition: list.h:216
Definition: list_intern.h:51
iterator reverse_begin()
Definition: list.h:274
Definition: list_intern.h:54
iterator erase(iterator pos)
Definition: list.h:112
iterator reverse_erase(iterator pos)
Definition: list.h:121
void push_back(const t_T &element)
Definition: list.h:174
void pop_back()
Definition: list.h:190
bool empty() const
Definition: list.h:258
Definition: list_intern.h:42
ListInternal::Node< t_T > Node
Definition: list.h:47
const t_T & back() const
Definition: list.h:211