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
 
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 210 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 228 of file _concurrent_unordered_impl.h.

References tbb::internal::as_atomic().

229  {
230  // Try to change the next pointer on the current element to a new element, only if it still points to the cached next
231  nodeptr_t exchange_node = tbb::internal::as_atomic(my_next).compare_and_swap(new_node, current_node);
232 
233  if (exchange_node == current_node) // TODO: why this branch?
234  {
235  // Operation succeeded, return the new node
236  return new_node;
237  }
238  else
239  {
240  // Operation failed, return the "interfering" node
241  return exchange_node;
242  }
243  }
atomic< T > & as_atomic(T &t)
Definition: atomic.h:547
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 223 of file _concurrent_unordered_impl.h.

223  { // TODO: remove
224  return my_order_key;
225  }

◆ 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 247 of file _concurrent_unordered_impl.h.

247  {
248  return (my_order_key & 0x1) == 0;
249  }

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 253 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 252 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 254 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.