hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator > Class Template Reference

`#include <_flow_graph_tagged_buffer_impl.h>`

Inheritance diagram for hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >:
Collaboration diagram for hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >:

## Classes

struct | DoCleanup

## Public Types

typedef ValueType | value_type
typedef buffer_element_type< value_type >::type | element_type
typedef value_type * | pointer_type
typedef element_type * | list_array_type
typedef list_array_type * | pointer_array_type
typedef Allocator::template rebind< list_array_type >::other | pointer_array_allocator_type
typedef Allocator::template rebind< element_type >::other | elements_array_allocator
typedef tbb::internal::strip< Key >::type | Knoref

## Public Member Functions

| hash_buffer ()
| ~hash_buffer ()
void | reset ()
void | set_key_func (ValueToKey *vtk)
ValueToKey * | get_key_func ()
bool | insert_with_key (const value_type &v)
bool | find_ref_with_key (const Knoref &k, pointer_type &v)
bool | find_with_key (const Knoref &k, value_type &v)
void | delete_with_key (const Knoref &k)

## Static Public Attributes

static const size_t | INITIAL_SIZE = 8

## Private Member Functions

size_t | mask ()
void | set_up_free_list (element_type **p_free_list, list_array_type la, size_t sz)
void | grow_array ()
void | internal_insert_with_key (element_type **p_pointer_array, size_t p_sz, list_array_type &p_free_list, const value_type &v)
void | internal_initialize_buffer ()

## Static Private Member Functions

static void | internal_free_buffer (pointer_array_type &pa, list_array_type &el, size_t &sz, size_t &ne)

## Private Attributes

ValueToKey * | my_key
size_t | my_size
size_t | nelements
pointer_array_type | pointer_array
list_array_type | elements_array
element_type * | free_list

## Detailed Description

### template<typename Key, typename ValueType, typename ValueToKey, typename HashCompare, typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>
class hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >

Definition at line 48 of file _flow_graph_tagged_buffer_impl.h.

## Member Typedef Documentation

## element_type

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

typedef buffer_element_type< value_type >::type hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::element_type

Definition at line 52 of file _flow_graph_tagged_buffer_impl.h.

## elements_array_allocator

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

typedef Allocator::template rebind<element_type>::other hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::elements_array_allocator

Definition at line 57 of file _flow_graph_tagged_buffer_impl.h.

## Knoref

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

typedef tbb::internal::strip<Key>::type hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::Knoref

Definition at line 58 of file _flow_graph_tagged_buffer_impl.h.

## list_array_type

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

typedef element_type* hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::list_array_type

Definition at line 54 of file _flow_graph_tagged_buffer_impl.h.

## pointer_array_allocator_type

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

typedef Allocator::template rebind<list_array_type>::other hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array_allocator_type

Definition at line 56 of file _flow_graph_tagged_buffer_impl.h.

## pointer_array_type

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

typedef list_array_type* hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array_type

Definition at line 55 of file _flow_graph_tagged_buffer_impl.h.

## pointer_type

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

typedef value_type* hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_type

Definition at line 53 of file _flow_graph_tagged_buffer_impl.h.

## value_type

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

typedef ValueType hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::value_type

Definition at line 51 of file _flow_graph_tagged_buffer_impl.h.

## Constructor & Destructor Documentation

## hash_buffer()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::hash_buffer | ( |  | ) |

inline

Definition at line 172 of file _flow_graph_tagged_buffer_impl.h.

: my_key(NULL), my_size(INITIAL_SIZE), nelements(0) {
internal_initialize_buffer();
}
hash_buffer::my_key
ValueToKey * my_key
Definition: _flow_graph_tagged_buffer_impl.h:61
hash_buffer::INITIAL_SIZE
static const size_t INITIAL_SIZE
Definition: _flow_graph_tagged_buffer_impl.h:50
hash_buffer::nelements
size_t nelements
Definition: _flow_graph_tagged_buffer_impl.h:63
hash_buffer::internal_initialize_buffer
void internal_initialize_buffer()
Definition: _flow_graph_tagged_buffer_impl.h:141
hash_buffer::my_size
size_t my_size
Definition: _flow_graph_tagged_buffer_impl.h:62

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_initialize_buffer().

Here is the call graph for this function:

## ~hash_buffer()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::~hash_buffer | ( |  | ) |

inline

Definition at line 176 of file _flow_graph_tagged_buffer_impl.h.

{
internal_free_buffer(pointer_array, elements_array, my_size, nelements);
if(my_key) delete my_key;
}
hash_buffer::internal_free_buffer
static void internal_free_buffer(pointer_array_type &pa, list_array_type &el, size_t &sz, size_t &ne)
Definition: _flow_graph_tagged_buffer_impl.h:149
hash_buffer::elements_array
list_array_type elements_array
Definition: _flow_graph_tagged_buffer_impl.h:65
hash_buffer::pointer_array
pointer_array_type pointer_array
Definition: _flow_graph_tagged_buffer_impl.h:64

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::elements_array, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_free_buffer(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_key, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_size, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::nelements, and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array.

Here is the call graph for this function:

## Member Function Documentation

## delete_with_key()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

void hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::delete_with_key | ( | const Knoref & | k | ) |

inline

Definition at line 230 of file _flow_graph_tagged_buffer_impl.h.

{
size_t h = this->hash(k) & mask();
element_type* prev = NULL;
for(element_type* p = pointer_array[h]; p; prev = p, p = (element_type *)(p->second)) {
value_type *vp = reinterpret_cast<value_type *>(&(p->first));
__TBB_ASSERT(my_key, "Error: value-to-key functor not provided");
if(this->equal((*my_key)(*vp), k)) {
vp->~value_type();
if(prev) prev->second = p->second;
else pointer_array[h] = (element_type *)(p->second);
p->second = free_list;
free_list = p;
--nelements;
return;
}
}
__TBB_ASSERT(false, "key not found for delete");
}
__TBB_ASSERT
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165
p
void const char const char int ITT_FORMAT __itt_group_sync p
Definition: ittnotify_static.h:91
h
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function h
Definition: ittnotify_static.h:159
hash_buffer::value_type
ValueType value_type
Definition: _flow_graph_tagged_buffer_impl.h:51
hash_buffer::mask
size_t mask()
Definition: _flow_graph_tagged_buffer_impl.h:68
hash_buffer::element_type
buffer_element_type< value_type >::type element_type
Definition: _flow_graph_tagged_buffer_impl.h:52
hash_buffer::free_list
element_type * free_list
Definition: _flow_graph_tagged_buffer_impl.h:66

References __TBB_ASSERT, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::free_list, h, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::mask(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_key, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::nelements, p, and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array.

Here is the call graph for this function:

## find_ref_with_key()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

bool hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::find_ref_with_key | ( | const Knoref & | k,
|  | pointer_type & | v
| ) |  |

inline

Definition at line 207 of file _flow_graph_tagged_buffer_impl.h.

{
size_t i = this->hash(k) & mask();
for(element_type* p = pointer_array[i]; p; p = (element_type *)(p->second)) {
pointer_type pv = reinterpret_cast<pointer_type>(&(p->first));
__TBB_ASSERT(my_key, "Error: value-to-key functor not provided");
if(this->equal((*my_key)(*pv), k)) {
v = pv;
return true;
}
}
return false;
}
hash_buffer::pointer_type
value_type * pointer_type
Definition: _flow_graph_tagged_buffer_impl.h:53

References __TBB_ASSERT, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::mask(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_key, p, and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::find_with_key(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key().

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

## find_with_key()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

bool hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::find_with_key | ( | const Knoref & | k,
|  | value_type & | v
| ) |  |

inline

Definition at line 220 of file _flow_graph_tagged_buffer_impl.h.

{
value_type *p;
if(find_ref_with_key(k, p)) {
v = *p;
return true;
}
else
return false;
}
hash_buffer::find_ref_with_key
bool find_ref_with_key(const Knoref &k, pointer_type &v)
Definition: _flow_graph_tagged_buffer_impl.h:207

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::find_ref_with_key(), and p.

Here is the call graph for this function:

## get_key_func()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

ValueToKey* hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::get_key_func | ( |  | ) |

inline

Definition at line 190 of file _flow_graph_tagged_buffer_impl.h.

{ return my_key; }

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_key.

## grow_array()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

void hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array | ( |  | ) |

inline private

Definition at line 95 of file _flow_graph_tagged_buffer_impl.h.

{
size_t new_size = my_size*2;
size_t new_nelements = nelements; // internal_free_buffer zeroes this
list_array_type new_elements_array = NULL;
pointer_array_type new_pointer_array = NULL;
list_array_type new_free_list = NULL;
{
DoCleanup my_cleanup(new_pointer_array, new_elements_array, new_size);
new_elements_array = elements_array_allocator().allocate(my_size);
new_pointer_array = pointer_array_allocator_type().allocate(new_size);
for(size_t i=0; i < new_size; ++i) new_pointer_array[i] = NULL;
set_up_free_list(&new_free_list, new_elements_array, my_size );
for(size_t i=0; i < my_size; ++i) {
for( element_type* op = pointer_array[i]; op; op = (element_type *)(op->second)) {
value_type *ov = reinterpret_cast<value_type *>(&(op->first));
// could have std::move semantics
internal_insert_with_key(new_pointer_array, new_size, new_free_list, *ov);
}
}
my_cleanup.my_pa = NULL;
my_cleanup.my_elements = NULL;
}
internal_free_buffer(pointer_array, elements_array, my_size, nelements);
free_list = new_free_list;
pointer_array = new_pointer_array;
elements_array = new_elements_array;
my_size = new_size;
nelements = new_nelements;
}
new_size
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t new_size
Definition: ittnotify_static.h:163
hash_buffer::pointer_array_allocator_type
Allocator::template rebind< list_array_type >::other pointer_array_allocator_type
Definition: _flow_graph_tagged_buffer_impl.h:56
hash_buffer::internal_insert_with_key
void internal_insert_with_key(element_type **p_pointer_array, size_t p_sz, list_array_type &p_free_list, const value_type &v)
Definition: _flow_graph_tagged_buffer_impl.h:129
hash_buffer::pointer_array_type
list_array_type * pointer_array_type
Definition: _flow_graph_tagged_buffer_impl.h:55
hash_buffer::set_up_free_list
void set_up_free_list(element_type **p_free_list, list_array_type la, size_t sz)
Definition: _flow_graph_tagged_buffer_impl.h:70
hash_buffer::list_array_type
element_type * list_array_type
Definition: _flow_graph_tagged_buffer_impl.h:54
hash_buffer::elements_array_allocator
Allocator::template rebind< element_type >::other elements_array_allocator
Definition: _flow_graph_tagged_buffer_impl.h:57

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::elements_array, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::free_list, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_free_buffer(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_insert_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::DoCleanup::my_elements, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::DoCleanup::my_pa, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_size, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::nelements, new_size, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array, and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::set_up_free_list().

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key().

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

## insert_with_key()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

bool hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key | ( | const value_type & | v | ) |

inline

Definition at line 192 of file _flow_graph_tagged_buffer_impl.h.

{
pointer_type p = NULL;
__TBB_ASSERT(my_key, "Error: value-to-key functor not provided");
if(find_ref_with_key((*my_key)(v), p)) {
p->~value_type();
(void) new(p) value_type(v); // copy-construct into the space
return false;
}
++nelements;
if(nelements*2 > my_size) grow_array();
internal_insert_with_key(pointer_array, my_size, free_list, v);
return true;
}
void
void
Definition: ittnotify_static.h:91
hash_buffer::grow_array
void grow_array()
Definition: _flow_graph_tagged_buffer_impl.h:95

References __TBB_ASSERT, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::find_ref_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::free_list, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_insert_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_key, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_size, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::nelements, p, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array, and void.

Here is the call graph for this function:

## internal_free_buffer()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

static void hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_free_buffer | ( | pointer_array_type & | pa,
|  | list_array_type & | el,
|  | size_t & | sz,
|  | size_t & | ne
| ) |  |

inline static private

Definition at line 149 of file _flow_graph_tagged_buffer_impl.h.

{
if(pa) {
for(size_t i = 0; i < sz; ++i ) {
element_type *p_next;
for( element_type *p = pa[i]; p; p = p_next) {
p_next = (element_type *)p->second;
internal::punned_cast<value_type *>(&(p->first))->~value_type();
}
}
pointer_array_allocator_type().deallocate(pa, sz);
pa = NULL;
}
// Separate test (if allocation of pa throws, el may be allocated.
// but no elements will be constructed.)
if(el) {
elements_array_allocator().deallocate(el, sz / 2);
el = NULL;
}
sz = INITIAL_SIZE;
ne = 0;
}

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::INITIAL_SIZE, and p.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::reset(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::DoCleanup::~DoCleanup(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::~hash_buffer().

Here is the caller graph for this function:

## internal_initialize_buffer()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

void hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_initialize_buffer | ( |  | ) |

inline private

Definition at line 141 of file _flow_graph_tagged_buffer_impl.h.

{
pointer_array = pointer_array_allocator_type().allocate(my_size);
for(size_t i = 0; i < my_size; ++i) pointer_array[i] = NULL;
elements_array = elements_array_allocator().allocate(my_size / 2);
set_up_free_list(&free_list, elements_array, my_size / 2);
}

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::elements_array, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::free_list, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_size, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array, and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::set_up_free_list().

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::hash_buffer(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::reset().

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

## internal_insert_with_key()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

void hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_insert_with_key | ( | element_type ** | p_pointer_array,
|  | size_t | p_sz,
|  | list_array_type & | p_free_list,
|  | const value_type & | v
| ) |  |

inline private

Definition at line 129 of file _flow_graph_tagged_buffer_impl.h.

{
size_t l_mask = p_sz-1;
__TBB_ASSERT(my_key, "Error: value-to-key functor not provided");
size_t h = this->hash((*my_key)(v)) & l_mask;
__TBB_ASSERT(p_free_list, "Error: free list not set up.");
element_type* my_elem = p_free_list; p_free_list = (element_type *)(p_free_list->second);
(void) new(&(my_elem->first)) value_type(v);
my_elem->second = p_pointer_array[h];
p_pointer_array[h] = my_elem;
}

References __TBB_ASSERT, h, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_key, and void.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key().

Here is the caller graph for this function:

## mask()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

size_t hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::mask | ( |  | ) |

inline private

Definition at line 68 of file _flow_graph_tagged_buffer_impl.h.

{ return my_size - 1; }

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_size.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::delete_with_key(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::find_ref_with_key().

Here is the caller graph for this function:

## reset()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

void hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::reset | ( |  | ) |

inline

Definition at line 181 of file _flow_graph_tagged_buffer_impl.h.

{
internal_free_buffer(pointer_array, elements_array, my_size, nelements);
internal_initialize_buffer();
}

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::elements_array, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_free_buffer(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_initialize_buffer(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_size, hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::nelements, and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array.

Referenced by internal::key_matching_port< TraitsType >::reset_receiver().

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

## set_key_func()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

void hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::set_key_func | ( | ValueToKey * | vtk | ) |

inline

Definition at line 188 of file _flow_graph_tagged_buffer_impl.h.

{ my_key = vtk; }

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_key.

## set_up_free_list()

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

void hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::set_up_free_list | ( | element_type ** | p_free_list,
|  | list_array_type | la,
|  | size_t | sz
| ) |  |

inline private

Definition at line 70 of file _flow_graph_tagged_buffer_impl.h.

{
for(size_t i=0; i < sz - 1; ++i ) { // construct free list
la[i].second = &(la[i+1]);
}
la[sz-1].second = NULL;
*p_free_list = (element_type *)&(la[0]);
}

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_initialize_buffer().

Here is the caller graph for this function:

## Member Data Documentation

## elements_array

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

list_array_type hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::elements_array

private

Definition at line 65 of file _flow_graph_tagged_buffer_impl.h.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_initialize_buffer(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::reset(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::~hash_buffer().

## free_list

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

element_type* hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::free_list

private

Definition at line 66 of file _flow_graph_tagged_buffer_impl.h.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::delete_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_initialize_buffer().

## INITIAL_SIZE

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

const size_t hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::INITIAL_SIZE = 8

static

Definition at line 50 of file _flow_graph_tagged_buffer_impl.h.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_free_buffer().

## my_key

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

ValueToKey* hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_key

private

Definition at line 61 of file _flow_graph_tagged_buffer_impl.h.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::delete_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::find_ref_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::get_key_func(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_insert_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::set_key_func(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::~hash_buffer().

## my_size

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

size_t hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::my_size

private

Definition at line 62 of file _flow_graph_tagged_buffer_impl.h.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_initialize_buffer(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::mask(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::reset(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::~hash_buffer().

## nelements

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

size_t hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::nelements

private

Definition at line 63 of file _flow_graph_tagged_buffer_impl.h.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::delete_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::reset(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::~hash_buffer().

## pointer_array

template<typename Key , typename ValueType , typename ValueToKey , typename HashCompare , typename Allocator = tbb::cache_aligned_allocator< typename aligned_pair<ValueType, void *>::type >>

pointer_array_type hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::pointer_array

private

Definition at line 64 of file _flow_graph_tagged_buffer_impl.h.

Referenced by hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::delete_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::find_ref_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::grow_array(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::insert_with_key(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::internal_initialize_buffer(), hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::reset(), and hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::~hash_buffer().

The documentation for this class was generated from the following file:

- _flow_graph_tagged_buffer_impl.h

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.