Home ⌂Doc Index ◂Up ▴
Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::interface10::internal::skip_list_node< Value, Mutex > Class Template Reference

#include <_concurrent_skip_list_impl.h>

Collaboration diagram for tbb::interface10::internal::skip_list_node< Value, Mutex >:

Public Types

using value_type = Value
 
using size_type = std::size_t
 
using reference = value_type &
 
using const_reference = const value_type &
 
using pointer = value_type *
 
using const_pointer = const value_type *
 
using node_pointer = skip_list_node *
 
using atomic_node_pointer = std::atomic< node_pointer >
 
using mutex_type = Mutex
 
using lock_type = std::unique_lock< mutex_type >
 

Public Member Functions

 skip_list_node (size_type levels)
 
 ~skip_list_node ()
 
 skip_list_node (const skip_list_node &)=delete
 
 skip_list_node (skip_list_node &&)=delete
 
skip_list_nodeoperator= (const skip_list_node &)=delete
 
pointer storage ()
 
reference value ()
 
node_pointer next (size_type level) const
 
void set_next (size_type level, node_pointer next)
 
size_type height () const
 
bool fully_linked () const
 
void mark_linked ()
 
lock_type acquire ()
 

Private Types

using aligned_storage_type = typename std::aligned_storage< sizeof(value_type), alignof(value_type)>::type
 

Private Member Functions

atomic_node_pointermy_next (size_type level)
 
const atomic_node_pointermy_next (size_type level) const
 

Private Attributes

mutex_type my_mutex
 
aligned_storage_type my_val
 
size_type my_height
 
std::atomic_bool my_fullyLinked
 

Detailed Description

template<typename Value, typename Mutex>
class tbb::interface10::internal::skip_list_node< Value, Mutex >

Definition at line 56 of file _concurrent_skip_list_impl.h.

Member Typedef Documentation

◆ aligned_storage_type

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::aligned_storage_type = typename std::aligned_storage<sizeof(value_type), alignof(value_type)>::type
private

Definition at line 125 of file _concurrent_skip_list_impl.h.

◆ atomic_node_pointer

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::atomic_node_pointer = std::atomic<node_pointer>

Definition at line 66 of file _concurrent_skip_list_impl.h.

◆ const_pointer

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::const_pointer = const value_type *

Definition at line 64 of file _concurrent_skip_list_impl.h.

◆ const_reference

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::const_reference = const value_type &

Definition at line 62 of file _concurrent_skip_list_impl.h.

◆ lock_type

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::lock_type = std::unique_lock<mutex_type>

Definition at line 69 of file _concurrent_skip_list_impl.h.

◆ mutex_type

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::mutex_type = Mutex

Definition at line 68 of file _concurrent_skip_list_impl.h.

◆ node_pointer

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::node_pointer = skip_list_node *

Definition at line 65 of file _concurrent_skip_list_impl.h.

◆ pointer

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::pointer = value_type *

Definition at line 63 of file _concurrent_skip_list_impl.h.

◆ reference

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::reference = value_type &

Definition at line 61 of file _concurrent_skip_list_impl.h.

◆ size_type

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::size_type = std::size_t

Definition at line 60 of file _concurrent_skip_list_impl.h.

◆ value_type

template<typename Value , typename Mutex >
using tbb::interface10::internal::skip_list_node< Value, Mutex >::value_type = Value

Definition at line 59 of file _concurrent_skip_list_impl.h.

Constructor & Destructor Documentation

◆ skip_list_node() [1/3]

template<typename Value , typename Mutex >
tbb::interface10::internal::skip_list_node< Value, Mutex >::skip_list_node ( size_type  levels)
inline

Definition at line 71 of file _concurrent_skip_list_impl.h.

71  : my_height(levels), my_fullyLinked(false) {
72  for (size_type lev = 0; lev < my_height; ++lev)
73  new(&my_next(lev)) atomic_node_pointer(nullptr);
74  __TBB_ASSERT(height() == levels, "Wrong node height");
75  }
atomic_node_pointer & my_next(size_type level)
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165

References __TBB_ASSERT, tbb::interface10::internal::skip_list_node< Value, Mutex >::height(), tbb::interface10::internal::skip_list_node< Value, Mutex >::my_height, and tbb::interface10::internal::skip_list_node< Value, Mutex >::my_next().

Here is the call graph for this function:

◆ ~skip_list_node()

template<typename Value , typename Mutex >
tbb::interface10::internal::skip_list_node< Value, Mutex >::~skip_list_node ( )
inline

Definition at line 77 of file _concurrent_skip_list_impl.h.

77  {
78  for(size_type lev = 0; lev < my_height; ++lev)
79  my_next(lev).~atomic();
80  }
atomic_node_pointer & my_next(size_type level)

References tbb::interface10::internal::skip_list_node< Value, Mutex >::my_height, and tbb::interface10::internal::skip_list_node< Value, Mutex >::my_next().

Here is the call graph for this function:

◆ skip_list_node() [2/3]

template<typename Value , typename Mutex >
tbb::interface10::internal::skip_list_node< Value, Mutex >::skip_list_node ( const skip_list_node< Value, Mutex > &  )
delete

◆ skip_list_node() [3/3]

template<typename Value , typename Mutex >
tbb::interface10::internal::skip_list_node< Value, Mutex >::skip_list_node ( skip_list_node< Value, Mutex > &&  )
delete

Member Function Documentation

◆ acquire()

template<typename Value , typename Mutex >
lock_type tbb::interface10::internal::skip_list_node< Value, Mutex >::acquire ( )
inline

◆ fully_linked()

template<typename Value , typename Mutex >
bool tbb::interface10::internal::skip_list_node< Value, Mutex >::fully_linked ( ) const
inline

Definition at line 112 of file _concurrent_skip_list_impl.h.

References tbb::internal::memory_order_acquire, and tbb::interface10::internal::skip_list_node< Value, Mutex >::my_fullyLinked.

Referenced by tbb::interface10::internal::concurrent_skip_list< Traits >::internal_insert_node().

Here is the caller graph for this function:

◆ height()

◆ mark_linked()

template<typename Value , typename Mutex >
void tbb::interface10::internal::skip_list_node< Value, Mutex >::mark_linked ( )
inline

Definition at line 116 of file _concurrent_skip_list_impl.h.

References tbb::internal::memory_order_release, and tbb::interface10::internal::skip_list_node< Value, Mutex >::my_fullyLinked.

Referenced by tbb::interface10::internal::concurrent_skip_list< Traits >::try_insert_node().

Here is the caller graph for this function:

◆ my_next() [1/2]

template<typename Value , typename Mutex >
atomic_node_pointer& tbb::interface10::internal::skip_list_node< Value, Mutex >::my_next ( size_type  level)
inlineprivate

Definition at line 127 of file _concurrent_skip_list_impl.h.

127  {
128  atomic_node_pointer* arr = reinterpret_cast<atomic_node_pointer*>(this + 1);
129  return arr[level];
130  }

Referenced by tbb::interface10::internal::skip_list_node< Value, Mutex >::next(), tbb::interface10::internal::skip_list_node< Value, Mutex >::set_next(), tbb::interface10::internal::skip_list_node< Value, Mutex >::skip_list_node(), and tbb::interface10::internal::skip_list_node< Value, Mutex >::~skip_list_node().

Here is the caller graph for this function:

◆ my_next() [2/2]

template<typename Value , typename Mutex >
const atomic_node_pointer& tbb::interface10::internal::skip_list_node< Value, Mutex >::my_next ( size_type  level) const
inlineprivate

Definition at line 132 of file _concurrent_skip_list_impl.h.

132  {
133  const atomic_node_pointer* arr = reinterpret_cast<const atomic_node_pointer*>(this + 1);
134  return arr[level];
135  }

◆ next()

template<typename Value , typename Mutex >
node_pointer tbb::interface10::internal::skip_list_node< Value, Mutex >::next ( size_type  level) const
inline

Definition at line 96 of file _concurrent_skip_list_impl.h.

96  {
97  __TBB_ASSERT(level < height(), "Cannot get next on the level greater than height");
98  return my_next(level).load(std::memory_order_acquire);
99  }
atomic_node_pointer & my_next(size_type level)
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165

References __TBB_ASSERT, tbb::interface10::internal::skip_list_node< Value, Mutex >::height(), tbb::internal::memory_order_acquire, and tbb::interface10::internal::skip_list_node< Value, Mutex >::my_next().

Referenced by tbb::interface10::internal::concurrent_skip_list< Traits >::begin(), tbb::interface10::internal::concurrent_skip_list< Traits >::cbegin(), tbb::interface10::internal::concurrent_skip_list< Traits >::clear(), tbb::interface10::internal::concurrent_skip_list< Traits >::fill_prev_next_by_ptr(), tbb::interface10::internal::concurrent_skip_list< Traits >::internal_extract(), tbb::interface10::internal::skip_list_node< Value, Mutex >::set_next(), and tbb::interface10::internal::concurrent_skip_list< Traits >::try_lock_nodes().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

template<typename Value , typename Mutex >
skip_list_node& tbb::interface10::internal::skip_list_node< Value, Mutex >::operator= ( const skip_list_node< Value, Mutex > &  )
delete

◆ set_next()

template<typename Value , typename Mutex >
void tbb::interface10::internal::skip_list_node< Value, Mutex >::set_next ( size_type  level,
node_pointer  next 
)
inline

Definition at line 101 of file _concurrent_skip_list_impl.h.

101  {
102  __TBB_ASSERT(level < height(), "Cannot set next on the level greater than height");
103 
104  my_next(level).store(next, std::memory_order_release);
105  }
atomic_node_pointer & my_next(size_type level)
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165

References __TBB_ASSERT, tbb::interface10::internal::skip_list_node< Value, Mutex >::height(), tbb::internal::memory_order_release, tbb::interface10::internal::skip_list_node< Value, Mutex >::my_next(), and tbb::interface10::internal::skip_list_node< Value, Mutex >::next().

Referenced by tbb::interface10::internal::concurrent_skip_list< Traits >::clear(), and tbb::interface10::internal::concurrent_skip_list< Traits >::try_insert_node().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ storage()

template<typename Value , typename Mutex >
pointer tbb::interface10::internal::skip_list_node< Value, Mutex >::storage ( )
inline

Definition at line 88 of file _concurrent_skip_list_impl.h.

88  {
89  return reinterpret_cast<pointer>(&my_val);
90  }

References tbb::interface10::internal::skip_list_node< Value, Mutex >::my_val.

Referenced by tbb::interface10::internal::concurrent_skip_list< Traits >::create_node(), tbb::interface10::internal::concurrent_skip_list< Traits >::delete_node(), and tbb::interface10::internal::skip_list_node< Value, Mutex >::value().

Here is the caller graph for this function:

◆ value()

template<typename Value , typename Mutex >
reference tbb::interface10::internal::skip_list_node< Value, Mutex >::value ( )
inline

Definition at line 92 of file _concurrent_skip_list_impl.h.

92  {
93  return *storage();
94  }

References tbb::interface10::internal::skip_list_node< Value, Mutex >::storage().

Referenced by tbb::interface10::internal::concurrent_skip_list< Traits >::get_key().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ my_fullyLinked

template<typename Value , typename Mutex >
std::atomic_bool tbb::interface10::internal::skip_list_node< Value, Mutex >::my_fullyLinked
private

◆ my_height

◆ my_mutex

template<typename Value , typename Mutex >
mutex_type tbb::interface10::internal::skip_list_node< Value, Mutex >::my_mutex
private

◆ my_val

template<typename Value , typename Mutex >
aligned_storage_type tbb::interface10::internal::skip_list_node< Value, Mutex >::my_val
private

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

Copyright © 2005-2020 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.