Home ⌂Doc Index ◂Up ▴
Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type Class Reference

#include <_concurrent_unordered_impl.h>

Inheritance diagram for tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type:
Collaboration diagram for tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type:

Public Types

typedef concurrent_unordered_base::size_type size_type
 Type for size of a range. More...
 
typedef concurrent_unordered_base::value_type value_type
 
typedef concurrent_unordered_base::reference reference
 
typedef concurrent_unordered_base::difference_type difference_type
 
typedef concurrent_unordered_base::const_iterator iterator
 

Public Member Functions

bool empty () const
 True if range is empty. More...
 
bool is_divisible () const
 True if range can be partitioned into two subranges. More...
 
 const_range_type (const_range_type &r, split)
 Split range. More...
 
 const_range_type (const concurrent_unordered_base &a_table)
 Init range with container and grainsize specified. More...
 
iterator begin () const
 
iterator end () const
 
size_type grainsize () const
 The grain size for this range. More...
 
void set_midpoint () const
 Set my_midpoint_node to point approximately half way between my_begin_node and my_end_node. More...
 

Private Attributes

const concurrent_unordered_basemy_table
 
raw_const_iterator my_begin_node
 
raw_const_iterator my_end_node
 
raw_const_iterator my_midpoint_node
 

Additional Inherited Members

- Private Member Functions inherited from tbb::internal::no_assign
void operator= (const no_assign &)=delete
 
 no_assign (const no_assign &)=default
 
 no_assign ()=default
 

Detailed Description

template<typename Traits>
class tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type

Definition at line 977 of file _concurrent_unordered_impl.h.

Member Typedef Documentation

◆ difference_type

◆ iterator

◆ reference

◆ size_type

Type for size of a range.

Definition at line 984 of file _concurrent_unordered_impl.h.

◆ value_type

Constructor & Destructor Documentation

◆ const_range_type() [1/2]

template<typename Traits>
tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::const_range_type ( const_range_type r,
split   
)
inline

Split range.

Definition at line 998 of file _concurrent_unordered_impl.h.

998  :
999  my_table(r.my_table), my_end_node(r.my_end_node)
1000  {
1001  r.my_end_node = my_begin_node = r.my_midpoint_node;
1002  __TBB_ASSERT( !empty(), "Splitting despite the range is not divisible" );
1003  __TBB_ASSERT( !r.empty(), "Splitting despite the range is not divisible" );
1004  set_midpoint();
1005  r.set_midpoint();
1006  }
void set_midpoint() const
Set my_midpoint_node to point approximately half way between my_begin_node and my_end_node.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165

References __TBB_ASSERT, tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::empty(), tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::my_begin_node, tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::my_end_node, tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::my_midpoint_node, and tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::set_midpoint().

Here is the call graph for this function:

◆ const_range_type() [2/2]

template<typename Traits>
tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::const_range_type ( const concurrent_unordered_base a_table)
inline

Init range with container and grainsize specified.

Definition at line 1008 of file _concurrent_unordered_impl.h.

1008  :
1009  my_table(a_table), my_begin_node(a_table.my_solist.begin()),
1010  my_end_node(a_table.my_solist.end())
1011  {
1012  set_midpoint();
1013  }
void set_midpoint() const
Set my_midpoint_node to point approximately half way between my_begin_node and my_end_node.

References tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::set_midpoint().

Here is the call graph for this function:

Member Function Documentation

◆ begin()

template<typename Traits>
iterator tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::begin ( ) const
inline

◆ empty()

template<typename Traits>
bool tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::empty ( ) const
inline

◆ end()

template<typename Traits>
iterator tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::end ( ) const
inline

◆ grainsize()

template<typename Traits>
size_type tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::grainsize ( ) const
inline

The grain size for this range.

Definition at line 1017 of file _concurrent_unordered_impl.h.

1017 { return 1; }

◆ is_divisible()

◆ set_midpoint()

template<typename Traits>
void tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::set_midpoint ( ) const
inline

Set my_midpoint_node to point approximately half way between my_begin_node and my_end_node.

Definition at line 1020 of file _concurrent_unordered_impl.h.

1020  {
1021  if( my_begin_node == my_end_node ) // not divisible
1023  else {
1026  size_t mid_bucket = __TBB_ReverseBits( begin_key + (end_key-begin_key)/2 ) % my_table.my_number_of_buckets;
1027  while ( !my_table.is_initialized(mid_bucket) ) mid_bucket = my_table.get_parent(mid_bucket);
1028  if(__TBB_ReverseBits(mid_bucket) > begin_key) {
1029  // found a dummy_node between begin and end
1031  }
1032  else {
1033  // didn't find a dummy node between begin and end.
1035  }
1036 #if TBB_USE_ASSERT
1037  {
1039  __TBB_ASSERT( begin_key < mid_key, "my_begin_node is after my_midpoint_node" );
1040  __TBB_ASSERT( mid_key <= end_key, "my_midpoint_node is after my_end_node" );
1041  }
1042 #endif // TBB_USE_ASSERT
1043  }
1044  }
T __TBB_ReverseBits(T src)
Definition: tbb_machine.h:967
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165

References __TBB_ASSERT, __TBB_ReverseBits(), tbb::interface5::internal::split_ordered_list< T, Allocator >::first_real_iterator(), tbb::interface5::internal::concurrent_unordered_base< Traits >::get_bucket(), tbb::interface5::internal::concurrent_unordered_base< Traits >::get_parent(), tbb::interface5::internal::split_ordered_list< value_type, typename Traits::allocator_type >::get_safe_order_key(), tbb::interface5::internal::concurrent_unordered_base< Traits >::is_initialized(), tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::my_begin_node, tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::my_end_node, tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::my_midpoint_node, tbb::interface5::internal::concurrent_unordered_base< Traits >::my_number_of_buckets, tbb::interface5::internal::concurrent_unordered_base< Traits >::my_solist, and tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::my_table.

Referenced by tbb::interface5::internal::concurrent_unordered_base< Traits >::const_range_type::const_range_type().

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

Member Data Documentation

◆ my_begin_node

◆ my_end_node

◆ my_midpoint_node

◆ my_table


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.