17 #ifndef __TBB_concurrent_queue_H 18 #define __TBB_concurrent_queue_H 20 #define __TBB_concurrent_queue_H_include_area 28 namespace strict_ppl {
34 template<
typename T,
typename A = cache_aligned_allocator<T> >
44 void *b = reinterpret_cast<void*>(
my_allocator.allocate( n ));
52 my_allocator.deallocate( reinterpret_cast<char*>(b), n );
56 new (location) T(*static_cast<const T*>(src));
59 #if __TBB_CPP11_RVALUE_REF_PRESENT 61 new (location) T(
std::move(*static_cast<T*>(const_cast<void*>(src))) );
90 template<
typename InputIterator>
105 #if __TBB_CPP11_RVALUE_REF_PRESENT 136 #if __TBB_CPP11_RVALUE_REF_PRESENT 141 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 142 template<
typename... Arguments>
144 push( T(std::forward<Arguments>( args )...) );
146 #endif //__TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 180 #if __TBB_CPP17_DEDUCTION_GUIDES_PRESENT 182 template<
typename InputIterator,
183 typename T =
typename std::iterator_traits<InputIterator>::value_type,
189 template<
typename T,
class A>
192 this->internal_finish_clear();
195 template<
typename T,
class A>
198 while( !empty() ) try_pop(
value);
209 template<
typename T,
class A = cache_aligned_allocator<T> >
230 return (&static_cast<padded_page*>(static_cast<void*>(&
p))->
last)[index];
234 new( &
get_ref(dst,index) ) T(*static_cast<const T*>(src));
237 #if __TBB_CPP11_RVALUE_REF_PRESENT 239 new( &
get_ref(dst,index) ) T(
std::move(*static_cast<T*>(const_cast<void*>(src))) );
248 new( &
get_ref(dst,dindex) ) T(
get_ref( const_cast<page&>(src), sindex ) );
251 #if __TBB_CPP11_RVALUE_REF_PRESENT 314 #if __TBB_CPP11_RVALUE_REF_PRESENT 338 template<
typename InputIterator>
355 #if __TBB_CPP11_RVALUE_REF_PRESENT 356 void push( T&& source ) {
361 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 362 template<
typename... Arguments>
364 push( T(std::forward<Arguments>( args )...) );
371 void pop( T& destination ) {
375 #if TBB_USE_EXCEPTIONS 389 #if __TBB_CPP11_RVALUE_REF_PRESENT 396 #if __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 397 template<
typename... Arguments>
399 return try_push( T(std::forward<Arguments>( args )...) );
451 #if __TBB_CPP17_DEDUCTION_GUIDES_PRESENT 453 template<
typename InputIterator,
454 typename T =
typename std::iterator_traits<InputIterator>::value_type,
455 typename A = cache_aligned_allocator<T>
456 > concurrent_bounded_queue(InputIterator, InputIterator,
const A& = A())
457 -> concurrent_bounded_queue<T, A>;
460 template<
typename T,
class A>
463 internal_finish_clear();
466 template<
typename T,
class A>
469 while( try_pop(
value) ) ;
477 #undef __TBB_concurrent_queue_H_include_area base class of concurrent_queue
size_type capacity() const
Maximum number of allowed elements.
concurrent_bounded_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
[begin,end) constructor
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 int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp end
bool __TBB_EXPORTED_METHOD internal_empty() const
Check if the queue is empty.
const_iterator unsafe_end() const
static void move_construct_item(T *location, const void *src)
void __TBB_EXPORTED_METHOD internal_set_capacity(ptrdiff_t capacity, size_t element_size)
Set the queue capacity.
internal::concurrent_queue_iterator< concurrent_queue, T > iterator
static void copy_construct_item(T *location, const void *src)
T value_type
Element type in the queue.
internal::concurrent_queue_iterator< concurrent_bounded_queue, T > iterator
virtual void copy_item(page &dst, size_t index, const void *src) __TBB_override
~concurrent_bounded_queue()
Destroy queue.
void emplace(Arguments &&... args)
bool try_emplace(Arguments &&... args)
bool __TBB_EXPORTED_METHOD internal_push_if_not_full(const void *src)
Attempt to enqueue item onto queue using copy operation.
tbb::internal::allocator_rebind< A, char >::type page_allocator_type
A allocator_type
Allocator type.
T & reference
Reference type.
bool try_push(T &&source)
Move an item at tail of queue if queue is not already full.
void set_capacity(size_type new_capacity)
Set the capacity.
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 int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp begin
void internal_swap(concurrent_queue_base_v3 &src)
swap internal representation
const T & const_reference
Const reference type.
void push(const T &source)
Enqueue an item at tail of queue.
std::ptrdiff_t size_type
Integral type for representing size of the queue.
const T & const_reference
Const reference type.
ptrdiff_t __TBB_EXPORTED_METHOD internal_size() const
Get size of queue.
bool internal_try_pop(void *dst)
Attempt to dequeue item from queue.
Meets requirements of a forward iterator for STL.
void internal_swap(concurrent_queue_base_v3 &src)
swap queues
auto last(Container &c) -> decltype(begin(c))
const_iterator unsafe_end() const
size_t internal_size() const
Get size of queue; result may be invalid if queue is modified concurrently.
concurrent_queue(const concurrent_queue &src, const allocator_type &a=allocator_type())
Copy constructor.
bool try_push(const T &source)
Enqueue an item at tail of queue if queue is not already full.
virtual void deallocate_block(void *b, size_t n) __TBB_override
Deallocates block created by allocate_block.
void internal_push(const void *src, item_constructor_t construct_item)
Enqueue item at tail of queue.
allocator_traits< Alloc >::template rebind_alloc< T >::other type
bool empty() const
Equivalent to size()==0.
concurrent_queue_base_v3::padded_page< T > padded_page
T value_type
Element type in the queue.
bool try_pop(T &destination)
Attempt to dequeue an item from head of queue.
ptrdiff_t my_capacity
Capacity of the queue.
Meets requirements of a forward iterator for STL.
virtual void assign_and_destroy_item(void *dst, page &src, size_t index) __TBB_override
page_allocator_type my_allocator
Allocator type.
void push(const T &source)
Enqueue an item at tail of queue.
void __TBB_EXPORTED_METHOD assign(const concurrent_queue_base_v3 &src)
copy internal representation
void __TBB_EXPORTED_METHOD move_content(concurrent_queue_base_v8 &src)
move items
T & reference
Reference type.
void assign(const concurrent_queue_base_v3 &src, item_constructor_t construct_item)
copy or move internal representation
std::ptrdiff_t difference_type
Difference type for iterator.
bool empty() const
Equivalent to size()<=0.
size_t size_type
Integral type for representing size of the queue.
bool try_pop(T &result)
Attempt to dequeue an item from head of queue.
void emplace(Arguments &&... args)
const_iterator unsafe_begin() const
virtual void * allocate_block(size_t n) __TBB_override
Allocates a block of size n (bytes)
concurrent_bounded_queue(concurrent_bounded_queue &&src, const allocator_type &a)
concurrent_queue(InputIterator begin, InputIterator end, const allocator_type &a=allocator_type())
[begin,end) constructor
allocator_type get_allocator() const
return allocator object
T & get_ref(page &p, size_t index)
void const char const char int ITT_FORMAT __itt_group_sync p
void clear()
Clear the queue. not thread-safe.
A high-performance thread-safe blocking concurrent bounded queue.
void __TBB_EXPORTED_METHOD internal_pop(void *dst)
Dequeue item from head of queue.
page_allocator_type my_allocator
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
concurrent_bounded_queue(const allocator_type &a=allocator_type())
Construct empty queue.
size_type unsafe_size() const
Return the number of items in the queue; thread unsafe.
concurrent_queue(concurrent_queue &&src, const allocator_type &a)
virtual void move_item(page &dst, size_t index, const void *src) __TBB_override
allocator_type get_allocator() const
Return allocator object.
virtual void copy_page_item(page &dst, size_t dindex, const page &src, size_t sindex) __TBB_override
const_iterator unsafe_begin() const
internal::concurrent_queue_iterator< concurrent_queue, const T > const_iterator
void pop(T &destination)
Dequeue item from head of queue.
bool __TBB_EXPORTED_METHOD internal_pop_if_present(void *dst)
Attempt to dequeue item from queue.
Base class for types that should not be copied or assigned.
internal::concurrent_queue_iterator< concurrent_bounded_queue, const T > const_iterator
concurrent_bounded_queue(const concurrent_bounded_queue &src, const allocator_type &a=allocator_type())
Copy constructor.
bool internal_empty() const
check if the queue is empty; thread safe
virtual page * allocate_page() __TBB_override
custom allocator
void __TBB_EXPORTED_METHOD internal_abort()
Abort all pending queue operations.
Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
~concurrent_queue()
Destroy queue.
ptrdiff_t difference_type
Difference type for iterator.
size_type size() const
Return number of pushes minus number of pops.
virtual void deallocate_page(page *p) __TBB_override
custom de-allocator
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
tbb::internal::allocator_rebind< A, char >::type page_allocator_type
Allocator type.
size_t items_per_page
Always a power of 2.
A high-performance thread-safe non-blocking concurrent queue.
concurrent_queue_base_v3::copy_specifics copy_specifics
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
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 int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
bool __TBB_EXPORTED_METHOD internal_push_move_if_not_full(const void *src)
Attempt to enqueue item onto queue using move operation.
void clear()
clear the queue. not thread-safe.
A allocator_type
Allocator type.
void __TBB_EXPORTED_METHOD internal_push_move(const void *src)
Enqueue item at tail of queue using move operation.
concurrent_queue(const allocator_type &a=allocator_type())
Construct empty queue.
void __TBB_EXPORTED_METHOD internal_push(const void *src)
Enqueue item at tail of queue using copy operation.
Class used to ensure exception-safety of method "pop".
virtual void move_page_item(page &dst, size_t dindex, const page &src, size_t sindex) __TBB_override
void move(tbb_thread &t1, tbb_thread &t2)