Home ⌂Doc Index ◂Up ▴
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 340 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 482 of file concurrent_hash_map.h.

◆ iterator

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

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

◆ reference

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

Definition at line 481 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 479 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 480 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 493 of file concurrent_hash_map.h.

493  :
494  my_end(r.my_end),
495  my_grainsize(r.my_grainsize)
496  {
497  r.my_end = my_begin = r.my_midpoint;
498  __TBB_ASSERT( !empty(), "Splitting despite the range is not divisible" );
499  __TBB_ASSERT( !r.empty(), "Splitting despite the range is not divisible" );
500  set_midpoint();
501  r.set_midpoint();
502  }
bool empty() const
True if range is empty.
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:165

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 505 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 512 of file concurrent_hash_map.h.

512  :
513  my_begin( Iterator( map, 0, map.my_embedded_segment, map.my_embedded_segment->node_list ) ),
514  my_end( Iterator( map, map.my_mask + 1, 0, 0 ) ),
515  my_grainsize( grainsize_ )
516  {
517  __TBB_ASSERT( grainsize_>0, "grainsize must be positive" );
518  set_midpoint();
519  }
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:165

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

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

True if range is empty.

Definition at line 486 of file concurrent_hash_map.h.

References tbb::interface5::internal::hash_map_range< Iterator >::my_begin, and tbb::interface5::internal::hash_map_range< Iterator >::my_end.

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

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

527  {
528  // Split by groups of nodes
529  size_t m = my_end.my_index-my_begin.my_index;
530  if( m > my_grainsize ) {
531  m = my_begin.my_index + m/2u;
532  hash_map_base::bucket *b = my_begin.my_map->get_bucket(m);
533  my_midpoint = Iterator(*my_begin.my_map,m,b,b->node_list);
534  } else {
536  }
537  __TBB_ASSERT( my_begin.my_index <= my_midpoint.my_index,
538  "my_begin is after my_midpoint" );
539  __TBB_ASSERT( my_midpoint.my_index <= my_end.my_index,
540  "my_midpoint is after my_end" );
542  "[my_begin, my_midpoint) range should not be empty" );
543  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165

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