17 #ifndef __TBB__flow_graph_item_buffer_impl_H 18 #define __TBB__flow_graph_item_buffer_impl_H 20 #ifndef __TBB_flow_graph_H 21 #error Do not #include this internal file directly; use public TBB headers instead. 39 template <
typename T,
typename A=cache_aligned_allocator<T> >
57 buffer_item_type &
item(size_type i) {
60 return my_array[i & (my_array_size - 1) ];
63 const buffer_item_type &
item(size_type i)
const {
66 return my_array[i & (my_array_size-1)];
76 return *(
const item_type *)itm;
108 #if !TBB_DEPRECATED_SEQUENCER_DUPLICATES 152 size_type
size(
size_t new_tail = 0) {
return (new_tail ? new_tail : my_tail) -
my_head; }
163 while( new_size<minimum_size )
166 buffer_item_type* new_array =
allocator_type().allocate(new_size);
171 for( size_type i=my_head; i<
my_tail; ++i) {
174 char *new_space = (
char *)&(new_array[i&(new_size-1)].
first);
176 new_array[i&(new_size-1)].second =
item(i).
second;
182 my_array = new_array;
217 for( size_type i=my_head; i<
my_tail; ++i ) {
225 my_head = my_tail = my_array_size = 0;
232 my_head(0), my_tail(0) {
247 template<
typename T,
typename A=cache_aligned_allocator<T> >
268 __TBB_ASSERT(my_reserved,
"Attempt to consume a non-reserved item");
274 __TBB_ASSERT(my_reserved,
"Attempt to release a non-reserved item");
284 #endif // __TBB__flow_graph_item_buffer_impl_H type mimicking std::pair but with trailing fill to ensure each element of an array ...
item_buffer with reservable front-end. NOTE: if reserving, do not
static const size_type initial_buffer_size
void fetch_item(size_t i, item_type &o)
void clean_up_buffer(bool reset_pointers)
bool pop_back(item_type &v)
A::template rebind< buffer_item_type >::other allocator_type
const item_type & front() const
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
const buffer_item_type & item(size_type i) const
void destroy_item(size_type i)
auto first(Container &c) -> decltype(begin(c))
size_type size(size_t new_tail=0)
bool my_item_reserved(size_type i) const
const item_type & get_my_item(size_t i) const
void set_my_item(size_t i, const item_type &o)
void move_item(size_t to, size_t from)
item_buffer()
Constructor.
void reserve_item(size_type i)
T punned_cast(U *ptr)
Cast between unrelated pointer types.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
bool push_back(item_type &v)
bool my_item_valid(size_type i) const
buffer_item_type * my_array
bool pop_front(item_type &v)
buffer_item_type & item(size_type i)
bool place_item(size_t here, const item_type &me)
const item_type & back() const
void swap_items(size_t i, size_t j)
bool buffer_empty() const
void grow_my_array(size_t minimum_size)
Grows the internal array.
aligned_pair< item_type, buffer_item_state >::type buffer_item_type
void release_item(size_type i)