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 296 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 430 of file concurrent_hash_map.h.

◆ iterator

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

Definition at line 431 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 417 of file concurrent_hash_map.h.

◆ reference

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

Definition at line 429 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 427 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 428 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 441 of file concurrent_hash_map.h.

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

441  :
442  my_end(r.my_end),
443  my_grainsize(r.my_grainsize)
444  {
445  r.my_end = my_begin = r.my_midpoint;
446  __TBB_ASSERT( !empty(), "Splitting despite the range is not divisible" );
447  __TBB_ASSERT( !r.empty(), "Splitting despite the range is not divisible" );
448  set_midpoint();
449  r.set_midpoint();
450  }
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.
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 453 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 460 of file concurrent_hash_map.h.

References __TBB_ASSERT.

460  :
461  my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
462  my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
463  my_grainsize( grainsize_ )
464  {
465  __TBB_ASSERT( grainsize_>0, "grainsize must be positive" );
466  set_midpoint();
467  }
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

Member Function Documentation

◆ begin()

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

Definition at line 468 of file concurrent_hash_map.h.

◆ empty()

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

True if range is empty.

Definition at line 434 of file concurrent_hash_map.h.

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

Here is the caller graph for this function:

◆ end()

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

Definition at line 469 of file concurrent_hash_map.h.

◆ 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 471 of file concurrent_hash_map.h.

◆ is_divisible()

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

True if range can be partitioned into two subranges.

Definition at line 437 of file concurrent_hash_map.h.

◆ 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 475 of file concurrent_hash_map.h.

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().

475  {
476  // Split by groups of nodes
477  size_t m = my_end.my_index-my_begin.my_index;
478  if( m > my_grainsize ) {
479  m = my_begin.my_index + m/2u;
480  hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
481  my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
482  } else {
484  }
485  __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
486  "my_begin is after my_midpoint" );
487  __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
488  "my_midpoint is after my_end" );
490  "[my_begin, my_midpoint) range should not be empty" );
491  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
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 424 of file concurrent_hash_map.h.

Member Data Documentation

◆ my_begin

template<typename Iterator>
Iterator tbb::interface5::internal::hash_map_range< Iterator >::my_begin
private

Definition at line 418 of file concurrent_hash_map.h.

◆ my_end

template<typename Iterator>
Iterator tbb::interface5::internal::hash_map_range< Iterator >::my_end
private

◆ my_grainsize

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

Definition at line 421 of file concurrent_hash_map.h.

◆ 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.