22 #include "bits/list_basics.h" 29 S_list_item() : _n(0) {}
30 explicit S_list_item(
bool) {}
33 template<
typename T,
typename P>
friend class S_list;
34 template<
typename T,
typename P>
friend class S_list_tail;
35 template<
typename T,
typename X>
friend struct Bits::Basic_list_policy;
37 S_list_item(S_list_item
const &);
38 void operator = (S_list_item
const &);
49 template<
typename T,
typename POLICY = Bits::Basic_list_policy< T, S_list_item > >
54 void operator = (
S_list const &);
59 typedef typename Base::Iterator Iterator;
62 explicit S_list(
bool x) : Base(x) {}
73 template<
typename CAS >
74 void add(T *e, CAS
const &c)
80 while (!c(&this->_f, e->_n, e));
95 this->_f = this->_f->_n;
99 void insert(T *e, Iterator
const &pred)
101 S_list_item *p = *pred;
106 static void insert_before(T *e, Iterator
const &succ)
108 S_list_item **x = Base::__get_internal(succ);
114 static void replace(Iterator
const &p, T*e)
116 S_list_item **x = Base::__get_internal(p);
121 static Iterator erase(Iterator
const &e)
123 S_list_item **x = Base::__get_internal(e);
131 template<
typename T >
132 class S_list_bss :
public S_list<T>
138 template<
typename T,
typename POLICY = Bits::Basic_list_policy< T, S_list_item > >
139 class S_list_tail :
public S_list<T, POLICY>
145 S_list_tail() : Base(), _tail(&this->_f) {}
160 void append(S_list_tail &o)
169 void move_to(S_list_tail &t)
170 { t._f = this->_f; t._tail = _tail; clear(); }
Internal: Common functions for all head-based list implementations.
Simple single-linked list.
void add(T *e)
Add an element to the front of the list.
void push_front(T *e)
Add an element to the front of the list.
T * pop_front()
Remove and return the head element of the list.