21 #ifndef _TBB_intrusive_list_H 22 #define _TBB_intrusive_list_H 44 template <
class List,
class T>
56 template<
class Iterator>
58 Iterator&
self () {
return *
static_cast<Iterator*
>(
this); }
75 Iterator& operator = (
const Iterator& it ) {
76 return my_pos = it.my_pos;
79 Iterator& operator = (
const T& val ) {
80 return my_pos = &node(val);
84 return my_pos == it.my_pos;
88 return my_pos != it.my_pos;
91 Iterator& operator++ () {
96 Iterator& operator-- () {
101 Iterator operator++ (
int ) {
102 Iterator result =
self();
107 Iterator operator-- (
int ) {
108 Iterator result =
self();
116 (my_head.
my_next_node != &my_head && my_size >0),
"intrusive_list_base corrupted" );
117 #if TBB_USE_ASSERT >= 2 134 T* operator-> ()
const {
return &this->item(); }
136 T& operator* ()
const {
return this->item(); }
147 const T* operator-> ()
const {
return &this->item(); }
149 const T& operator* ()
const {
return this->item(); }
159 size_t size ()
const {
return my_size; }
163 iterator
end () {
return iterator(&my_head); }
167 const_iterator
end ()
const {
return const_iterator(&my_head); }
171 "Object with intrusive list node can be part of only one intrusive list simultaneously" );
173 node(val).my_prev_node = &my_head;
181 void remove( T& val ) {
185 node(val).my_next_node->my_prev_node = node(val).my_prev_node;
186 node(val).my_prev_node->my_next_node = node(val).my_next_node;
188 node(val).my_prev_node = node(val).my_next_node = &node(val);
212 template <
class T,
class U,
intrusive_list_node U::*NodePtr>
224 return *
reinterpret_cast<T*
>((
char*)node - ((ptrdiff_t)&(
reinterpret_cast<T*
>(0x1000)->*NodePtr) - 0x1000));
List of element of type T, where T is derived from intrusive_list_node.
intrusive_list_node * my_pos
Node the iterator points to at the moment.
static T & item(intrusive_list_node *node)
bool operator==(const vector_iterator< Container, T > &i, const vector_iterator< Container, U > &j)
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
iterator(intrusive_list_node *pos)
Double linked list of items of type T that is derived from intrusive_list_node class.
Data structure to be inherited by the types that can form intrusive lists.
static intrusive_list_node & node(T &item)
intrusive_list_node my_head
Pointer to the head node.
const_iterator(const intrusive_list_node *pos)
size_t my_size
Number of list elements.
bool operator!=(const vector_iterator< Container, T > &i, const vector_iterator< Container, U > &j)
Double linked list of items of type T containing a member of type intrusive_list_node.
static T & item(intrusive_list_node *node)
intrusive_list_node * my_next_node
const_iterator begin() const
static intrusive_list_node & node(T &val)
static T & item(intrusive_list_node *node)
const_iterator end() const
iterator erase(iterator it)
iterator_impl(intrusive_list_node *pos)
intrusive_list_node * my_prev_node
static intrusive_list_node & node(T &val)