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 294 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 428 of file concurrent_hash_map.h.

◆ iterator

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

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

◆ reference

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

Definition at line 427 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 425 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 426 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 439 of file concurrent_hash_map.h.

439  :
440  my_end(r.my_end),
441  my_grainsize(r.my_grainsize)
442  {
443  r.my_end = my_begin = r.my_midpoint;
444  __TBB_ASSERT( !empty(), "Splitting despite the range is not divisible" );
445  __TBB_ASSERT( !r.empty(), "Splitting despite the range is not divisible" );
446  set_midpoint();
447  r.set_midpoint();
448  }
bool empty() const
True if range is empty.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void set_midpoint() const
Set my_midpoint to point approximately half way between my_begin and my_end.

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 451 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 458 of file concurrent_hash_map.h.

458  :
459  my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
460  my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
461  my_grainsize( grainsize_ )
462  {
463  __TBB_ASSERT( grainsize_>0, "grainsize must be positive" );
464  set_midpoint();
465  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void set_midpoint() const
Set my_midpoint to point approximately half way between my_begin and my_end.

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 469 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 473 of file concurrent_hash_map.h.

473  {
474  // Split by groups of nodes
475  size_t m = my_end.my_index-my_begin.my_index;
476  if( m > my_grainsize ) {
477  m = my_begin.my_index + m/2u;
478  hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
479  my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
480  } else {
482  }
483  __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
484  "my_begin is after my_midpoint" );
485  __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
486  "my_midpoint is after my_end" );
488  "[my_begin, my_midpoint) range should not be empty" );
489  }
#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 422 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-2018 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.