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)