Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::interface5::internal::hash_map_range< Iterator > Class Template Reference

Range class used with concurrent_hash_map. More...

#include <concurrent_hash_map.h>

Collaboration diagram for tbb::interface5::internal::hash_map_range< Iterator >:

Public Types

typedef std::size_t size_type
 Type for size of a range. More...
 
typedef Iterator::value_type value_type
 
typedef Iterator::reference reference
 
typedef Iterator::difference_type difference_type
 
typedef 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...
 
 hash_map_range (hash_map_range &r, split)
 Split range. More...
 
template<typename U >
 hash_map_range (hash_map_range< U > &r)
 type conversion More...
 
 hash_map_range (const map_type &map, size_type grainsize_=1)
 Init range with container and grainsize specified. More...
 
const Iterator & begin () const
 
const Iterator & end () const
 
size_type grainsize () const
 The grain size for this range. More...
 

Private Types

typedef Iterator::map_type map_type
 

Private Member Functions

void set_midpoint () const
 Set my_midpoint to point approximately half way between my_begin and my_end. More...
 

Private Attributes

Iterator my_begin
 
Iterator my_end
 
Iterator my_midpoint
 
size_t my_grainsize
 

Friends

template<typename U >
class hash_map_range
 

Detailed Description

template<typename Iterator>
class tbb::interface5::internal::hash_map_range< Iterator >

Range class used with concurrent_hash_map.

Definition at line 321 of file concurrent_hash_map.h.

Member Typedef Documentation

◆ difference_type

template<typename Iterator >
typedef Iterator::difference_type tbb::interface5::internal::hash_map_range< Iterator >::difference_type

Definition at line 455 of file concurrent_hash_map.h.

◆ iterator

template<typename Iterator >
typedef Iterator tbb::interface5::internal::hash_map_range< Iterator >::iterator

Definition at line 456 of file concurrent_hash_map.h.

◆ map_type

template<typename Iterator >
typedef Iterator::map_type tbb::interface5::internal::hash_map_range< Iterator >::map_type
private

Definition at line 442 of file concurrent_hash_map.h.

◆ reference

template<typename Iterator >
typedef Iterator::reference tbb::interface5::internal::hash_map_range< Iterator >::reference

Definition at line 454 of file concurrent_hash_map.h.

◆ size_type

template<typename Iterator >
typedef std::size_t tbb::interface5::internal::hash_map_range< Iterator >::size_type

Type for size of a range.

Definition at line 452 of file concurrent_hash_map.h.

◆ value_type

template<typename Iterator >
typedef Iterator::value_type tbb::interface5::internal::hash_map_range< Iterator >::value_type

Definition at line 453 of file concurrent_hash_map.h.

Constructor & Destructor Documentation

◆ hash_map_range() [1/3]

template<typename Iterator >
tbb::interface5::internal::hash_map_range< Iterator >::hash_map_range ( hash_map_range< Iterator > &  r,
split   
)
inline

Split range.

Definition at line 466 of file concurrent_hash_map.h.

466  :
467  my_end(r.my_end),
468  my_grainsize(r.my_grainsize)
469  {
470  r.my_end = my_begin = r.my_midpoint;
471  __TBB_ASSERT( !empty(), "Splitting despite the range is not divisible" );
472  __TBB_ASSERT( !r.empty(), "Splitting despite the range is not divisible" );
473  set_midpoint();
474  r.set_midpoint();
475  }
void set_midpoint() const
Set my_midpoint to point approximately half way between my_begin and my_end.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
bool empty() const
True if range is empty.

References __TBB_ASSERT, tbb::interface5::internal::hash_map_range< Iterator >::empty(), tbb::interface5::internal::hash_map_range< Iterator >::my_begin, and tbb::interface5::internal::hash_map_range< Iterator >::set_midpoint().

Here is the call graph for this function:

◆ hash_map_range() [2/3]

template<typename Iterator >
template<typename U >
tbb::interface5::internal::hash_map_range< Iterator >::hash_map_range ( hash_map_range< U > &  r)
inline

type conversion

Definition at line 478 of file concurrent_hash_map.h.

◆ hash_map_range() [3/3]

template<typename Iterator >
tbb::interface5::internal::hash_map_range< Iterator >::hash_map_range ( const map_type map,
size_type  grainsize_ = 1 
)
inline

Init range with container and grainsize specified.

Definition at line 485 of file concurrent_hash_map.h.

485  :
486  my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
487  my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
488  my_grainsize( grainsize_ )
489  {
490  __TBB_ASSERT( grainsize_>0, "grainsize must be positive" );
491  set_midpoint();
492  }
void set_midpoint() const
Set my_midpoint to point approximately half way between my_begin and my_end.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169

References __TBB_ASSERT, and tbb::interface5::internal::hash_map_range< Iterator >::set_midpoint().

Here is the call graph for this function:

Member Function Documentation

◆ begin()

template<typename Iterator >
const Iterator& tbb::interface5::internal::hash_map_range< Iterator >::begin ( ) const
inline

◆ empty()

◆ end()

template<typename Iterator >
const Iterator& tbb::interface5::internal::hash_map_range< Iterator >::end ( ) const
inline

◆ grainsize()

template<typename Iterator >
size_type tbb::interface5::internal::hash_map_range< Iterator >::grainsize ( ) const
inline

The grain size for this range.

Definition at line 496 of file concurrent_hash_map.h.

References tbb::interface5::internal::hash_map_range< Iterator >::my_grainsize.

◆ is_divisible()

template<typename Iterator >
bool tbb::interface5::internal::hash_map_range< Iterator >::is_divisible ( ) const
inline

◆ set_midpoint()

template<typename Iterator >
void tbb::interface5::internal::hash_map_range< Iterator >::set_midpoint ( ) const
private

Set my_midpoint to point approximately half way between my_begin and my_end.

Definition at line 500 of file concurrent_hash_map.h.

500  {
501  // Split by groups of nodes
502  size_t m = my_end.my_index-my_begin.my_index;
503  if( m > my_grainsize ) {
504  m = my_begin.my_index + m/2u;
505  hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
506  my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
507  } else {
509  }
510  __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
511  "my_begin is after my_midpoint" );
512  __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
513  "my_midpoint is after my_end" );
515  "[my_begin, my_midpoint) range should not be empty" );
516  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169

References __TBB_ASSERT, and tbb::interface5::internal::hash_map_base::bucket::node_list.

Referenced by tbb::interface5::internal::hash_map_range< Iterator >::hash_map_range().

Here is the caller graph for this function:

Friends And Related Function Documentation

◆ hash_map_range

template<typename Iterator >
template<typename U >
friend class hash_map_range
friend

Definition at line 449 of file concurrent_hash_map.h.

Member Data Documentation

◆ my_begin

◆ my_end

◆ my_grainsize

template<typename Iterator >
size_t tbb::interface5::internal::hash_map_range< Iterator >::my_grainsize
private

◆ my_midpoint

template<typename Iterator >
Iterator tbb::interface5::internal::hash_map_range< Iterator >::my_midpoint
mutableprivate

The documentation for this class 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.