Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::interface5::internal::split_ordered_list< T, Allocator >::node Struct Reference

#include <_concurrent_unordered_impl.h>

Inheritance diagram for tbb::interface5::internal::split_ordered_list< T, Allocator >::node:
Collaboration diagram for tbb::interface5::internal::split_ordered_list< T, Allocator >::node:

Public Member Functions

void init (sokey_t order_key)
 
sokey_t get_order_key () const
 
value_typestorage ()
 
value_typevalue ()
 
nodeptr_t atomic_set_next (nodeptr_t new_node, nodeptr_t current_node)
 
bool is_dummy () const
 

Public Attributes

nodeptr_t my_next
 
value_type my_element
 
sokey_t my_order_key
 

Private Member Functions

 node ()
 

Detailed Description

template<typename T, typename Allocator>
struct tbb::interface5::internal::split_ordered_list< T, Allocator >::node

Definition at line 217 of file _concurrent_unordered_impl.h.

Constructor & Destructor Documentation

◆ node()

template<typename T, typename Allocator>
tbb::interface5::internal::split_ordered_list< T, Allocator >::node::node ( )
private

Member Function Documentation

◆ atomic_set_next()

template<typename T, typename Allocator>
nodeptr_t tbb::interface5::internal::split_ordered_list< T, Allocator >::node::atomic_set_next ( nodeptr_t  new_node,
nodeptr_t  current_node 
)
inline

Definition at line 244 of file _concurrent_unordered_impl.h.

References tbb::internal::as_atomic().

245  {
246  // Try to change the next pointer on the current element to a new element, only if it still points to the cached next
247  nodeptr_t exchange_node = tbb::internal::as_atomic(my_next).compare_and_swap(new_node, current_node);
248 
249  if (exchange_node == current_node) // TODO: why this branch?
250  {
251  // Operation succeeded, return the new node
252  return new_node;
253  }
254  else
255  {
256  // Operation failed, return the "interfering" node
257  return exchange_node;
258  }
259  }
atomic< T > & as_atomic(T &t)
Definition: atomic.h:543
Here is the call graph for this function:

◆ get_order_key()

template<typename T, typename Allocator>
sokey_t tbb::interface5::internal::split_ordered_list< T, Allocator >::node::get_order_key ( ) const
inline

Definition at line 230 of file _concurrent_unordered_impl.h.

230  { // TODO: remove
231  return my_order_key;
232  }

◆ init()

template<typename T, typename Allocator>
void tbb::interface5::internal::split_ordered_list< T, Allocator >::node::init ( sokey_t  order_key)
inline

◆ is_dummy()

template<typename T, typename Allocator>
bool tbb::interface5::internal::split_ordered_list< T, Allocator >::node::is_dummy ( ) const
inline

Definition at line 263 of file _concurrent_unordered_impl.h.

263  {
264  return (my_order_key & 0x1) == 0;
265  }

◆ storage()

template<typename T, typename Allocator>
value_type* tbb::interface5::internal::split_ordered_list< T, Allocator >::node::storage ( )
inline

Definition at line 235 of file _concurrent_unordered_impl.h.

235  {
236  return reinterpret_cast<value_type*>(&my_element);
237  }
tbb::internal::allocator_traits< allocator_type >::value_type value_type

◆ value()

template<typename T, typename Allocator>
value_type& tbb::interface5::internal::split_ordered_list< T, Allocator >::node::value ( )
inline

Definition at line 239 of file _concurrent_unordered_impl.h.

239  {
240  return *storage();
241  }

Member Data Documentation

◆ my_element

template<typename T, typename Allocator>
value_type tbb::interface5::internal::split_ordered_list< T, Allocator >::node::my_element

Definition at line 269 of file _concurrent_unordered_impl.h.

◆ my_next

template<typename T, typename Allocator>
nodeptr_t tbb::interface5::internal::split_ordered_list< T, Allocator >::node::my_next

Definition at line 268 of file _concurrent_unordered_impl.h.

◆ my_order_key

template<typename T, typename Allocator>
sokey_t tbb::interface5::internal::split_ordered_list< T, Allocator >::node::my_order_key

Definition at line 270 of file _concurrent_unordered_impl.h.


The documentation for this struct was generated from the following file:

Copyright © 2005-2019 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.