17 #ifndef _TBB_intrusive_list_H 18 #define _TBB_intrusive_list_H 41 template <
class List,
class T>
55 template <
typename DereferenceType>
59 "Incorrect DereferenceType in iterator_impl");
81 my_pos = my_pos->my_next_node;
92 my_pos = my_pos->my_prev_node;
103 return my_pos == rhs.
my_pos;
107 return my_pos != rhs.
my_pos;
125 (my_head.
my_next_node != &my_head && my_size >0),
"intrusive_list_base corrupted" );
126 #if TBB_USE_ASSERT >= 2 145 size_t size ()
const {
return my_size; }
149 iterator
end () {
return iterator(&my_head); }
153 const_iterator
end ()
const {
return const_iterator(&my_head); }
157 "Object with intrusive list node can be part of only one intrusive list simultaneously" );
159 node(val).my_prev_node = &my_head;
167 void remove( T& val ) {
171 node(val).my_next_node->my_prev_node = node(val).my_prev_node;
172 node(val).my_prev_node->my_next_node = node(val).my_next_node;
174 node(val).my_prev_node = node(val).my_next_node = &node(val);
198 template <
class T,
class U,
intrusive_list_node U::*NodePtr>
210 return *
reinterpret_cast<T*
>((
char*)node - ((ptrdiff_t)&(
reinterpret_cast<T*
>(0x1000)->*NodePtr) - 0x1000));
214 return item(const_cast<intrusive_list_node*>(node));
static const T & item(const intrusive_list_node *node)
static intrusive_list_node & node(T &val)
iterator_impl & operator=(const iterator_impl &other)
static const T & item(const intrusive_list_node *node)
static intrusive_list_node & node(T &val)
DereferenceType & operator*() const
intrusive_list_node * my_prev_node
static T & item(intrusive_list_node *node)
Double linked list of items of type T that is derived from intrusive_list_node class.
iterator_impl< const T > const_iterator
iterator erase(iterator it)
iterator_impl & operator=(const T &val)
bool operator==(const iterator_impl &rhs) const
Detects whether two given types are the same.
iterator_impl & operator--()
iterator_impl operator--(int)
#define __TBB_STATIC_ASSERT(condition, msg)
List of element of type T, where T is derived from intrusive_list_node.
tbb::internal::conditional< tbb::internal::is_same_type< DereferenceType, T >::value, intrusive_list_node *, const intrusive_list_node * >::type pointer_type
size_t my_size
Number of list elements.
static T & item(intrusive_list_node *node)
iterator_impl & operator++()
Double linked list of items of type T containing a member of type intrusive_list_node.
Data structure to be inherited by the types that can form intrusive lists.
static intrusive_list_node & node(T &item)
intrusive_list_node * my_next_node
DereferenceType * operator->() const
bool operator!=(const iterator_impl &rhs) const
iterator_impl< T > iterator
static T & item(intrusive_list_node *node)
iterator_impl(pointer_type pos)
const_iterator end() const
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
iterator_impl operator++(int)
static const T & item(const intrusive_list_node *node)
const_iterator begin() const
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type type
intrusive_list_node my_head
Pointer to the head node.