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

236  {
237  // Try to change the next pointer on the current element to a new element, only if it still points to the cached next
238  nodeptr_t exchange_node = tbb::internal::as_atomic(my_next).compare_and_swap(new_node, current_node);
239 
240  if (exchange_node == current_node) // TODO: why this branch?
241  {
242  // Operation succeeded, return the new node
243  return new_node;
244  }
245  else
246  {
247  // Operation failed, return the "interfering" node
248  return exchange_node;
249  }
250  }
atomic< T > & as_atomic(T &t)
Definition: atomic.h:547

References tbb::internal::as_atomic(), and tbb::interface5::internal::split_ordered_list< T, Allocator >::node::my_next.

Referenced by tbb::interface5::internal::split_ordered_list< value_type, typename Traits::allocator_type >::try_insert_atomic().

Here is the call graph for this function:
Here is the caller 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

◆ init()

◆ is_dummy()

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

Member Data Documentation

◆ my_element

◆ my_next

◆ my_order_key


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.