17 #ifndef _TBB_intrusive_list_H 18 #define _TBB_intrusive_list_H 40 template <
class List,
class T>
52 template<
class Iterator>
54 Iterator&
self () {
return *static_cast<Iterator*>(
this); }
80 return my_pos == it.my_pos;
84 return my_pos != it.my_pos;
98 Iterator result =
self();
104 Iterator result =
self();
113 #if TBB_USE_ASSERT >= 2 163 const_iterator
end ()
const {
return const_iterator(&
my_head); }
167 "Object with intrusive list node can be part of only one intrusive list simultaneously" );
208 template <
class T,
class U,
intrusive_list_node U::*NodePtr>
220 return *reinterpret_cast<T*>((
char*)
node - ((ptrdiff_t)&(reinterpret_cast<T*>(0x1000)->*NodePtr) - 0x1000));
iterator(intrusive_list_node *pos)
iterator erase(iterator it)
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.
List of element of type T, where T is derived from intrusive_list_node.
const_iterator end() const
const_iterator begin() const
static T & item(intrusive_list_node *node)
static intrusive_list_node & node(T &val)
const T * operator->() const
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_pos
Node the iterator points to at the moment.
iterator_impl(intrusive_list_node *pos)
const T & operator*() const
static intrusive_list_node & node(T &val)
intrusive_list_node * my_next_node
static T & item(intrusive_list_node *node)
Double linked list of items of type T that is derived from intrusive_list_node class.
bool operator==(const Iterator &it) const
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Iterator & operator=(const Iterator &it)
Data structure to be inherited by the types that can form intrusive lists.
bool operator!=(const Iterator &it) const
intrusive_list_node * my_prev_node
static intrusive_list_node & node(T &item)