Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::flow::interface10::priority_queue_node< T, Compare, A > Class Template Reference

Forwards messages in priority order. More...

#include <flow_graph.h>

Inheritance diagram for tbb::flow::interface10::priority_queue_node< T, Compare, A >:
Collaboration diagram for tbb::flow::interface10::priority_queue_node< T, Compare, A >:

Public Types

typedef T input_type
 
typedef T output_type
 
typedef buffer_node< T, A > base_type
 
typedef priority_queue_node class_type
 
typedef receiver< input_type >::predecessor_type predecessor_type
 
typedef sender< output_type >::successor_type successor_type
 
- Public Types inherited from tbb::flow::interface10::buffer_node< T, A >
typedef T input_type
 
typedef T output_type
 
typedef receiver< input_type >::predecessor_type predecessor_type
 
typedef sender< output_type >::successor_type successor_type
 
typedef buffer_node< T, A > class_type
 
- Public Types inherited from tbb::flow::interface10::internal::item_buffer< T, A >
enum  buffer_item_state { no_item =0, has_item =1, reserved_item =2 }
 
typedef T item_type
 
- Public Types inherited from tbb::flow::interface10::receiver< T >
typedef T input_type
 The input type of this receiver. More...
 
typedef internal::async_helpers< T >::filtered_type filtered_type
 
- Public Types inherited from tbb::flow::interface10::internal::untyped_receiver
typedef untyped_sender predecessor_type
 The predecessor type for this node. More...
 
- Public Types inherited from tbb::flow::interface10::sender< T >
typedef T output_type
 The output type of this sender. More...
 
typedef internal::async_helpers< T >::filtered_type filtered_type
 
- Public Types inherited from tbb::flow::interface10::internal::untyped_sender
typedef untyped_receiver successor_type
 The successor type for this node. More...
 

Public Member Functions

 priority_queue_node (graph &g)
 Constructor. More...
 
 priority_queue_node (const priority_queue_node &src)
 Copy constructor. More...
 
- Public Member Functions inherited from tbb::flow::interface10::buffer_node< T, A >
 buffer_node (graph &g)
 Constructor. More...
 
 buffer_node (const buffer_node &src)
 Copy constructor. More...
 
bool register_successor (successor_type &r) __TBB_override
 Adds a new successor. More...
 
bool remove_successor (successor_type &r) __TBB_override
 Removes a successor. More...
 
bool try_get (T &v) __TBB_override
 Request an item from the buffer_node. More...
 
bool try_reserve (T &v) __TBB_override
 Reserves an item. More...
 
bool try_release () __TBB_override
 Release a reserved item. More...
 
bool try_consume () __TBB_override
 Consumes a reserved item. More...
 
- Public Member Functions inherited from tbb::flow::interface10::graph_node
 graph_node (graph &g)
 
virtual ~graph_node ()
 
- Public Member Functions inherited from tbb::flow::interface10::internal::reservable_item_buffer< T, A >
 reservable_item_buffer ()
 
void reset ()
 
- Public Member Functions inherited from tbb::flow::interface10::internal::item_buffer< T, A >
 item_buffer ()
 Constructor. More...
 
 ~item_buffer ()
 
void reset ()
 
- Public Member Functions inherited from tbb::flow::interface10::receiver< T >
bool try_put (const typename internal::async_helpers< T >::filtered_type &t)
 Put an item to the receiver. More...
 
bool try_put (const typename internal::async_helpers< T >::async_type &t)
 
- Public Member Functions inherited from tbb::flow::interface10::internal::untyped_receiver
virtual ~untyped_receiver ()
 Destructor. More...
 
template<typename X >
bool try_put (const X &t)
 Put an item to the receiver. More...
 
virtual bool register_predecessor (predecessor_type &)
 Add a predecessor to the node. More...
 
virtual bool remove_predecessor (predecessor_type &)
 Remove a predecessor from the node. More...
 
- Public Member Functions inherited from tbb::flow::interface10::internal::untyped_sender
virtual ~untyped_sender ()
 

Protected Types

typedef buffer_node< T, A >::size_type size_type
 
typedef buffer_node< T, A >::item_type item_type
 
typedef buffer_node< T, A >::buffer_operation prio_operation
 
- Protected Types inherited from tbb::flow::interface10::buffer_node< T, A >
enum  op_type {
  reg_succ, rem_succ, req_item, res_item,
  rel_res, con_res, put_item, try_fwd_task
}
 
typedef size_t size_type
 
typedef internal::aggregating_functor< class_type, buffer_operationhandler_type
 
- Protected Types inherited from tbb::flow::interface10::internal::item_buffer< T, A >
typedef size_t size_type
 
typedef aligned_pair< item_type, buffer_item_state >::type buffer_item_type
 
typedef A::template rebind< buffer_item_type >::other allocator_type
 

Protected Member Functions

void reset_node (reset_flags f) __TBB_override
 
void internal_forward_task (prio_operation *op) __TBB_override
 Tries to forward valid items to successors. More...
 
void handle_operations (prio_operation *op_list) __TBB_override
 
bool internal_push (prio_operation *op) __TBB_override
 
void internal_pop (prio_operation *op) __TBB_override
 
void internal_reserve (prio_operation *op) __TBB_override
 
void internal_consume (prio_operation *op) __TBB_override
 
void internal_release (prio_operation *op) __TBB_override
 
- Protected Member Functions inherited from tbb::flow::interface10::buffer_node< T, A >
template<typename derived_type >
void handle_operations_impl (buffer_operation *op_list, derived_type *derived)
 
taskgrab_forwarding_task (buffer_operation &op_data)
 
bool enqueue_forwarding_task (buffer_operation &op_data)
 
virtual taskforward_task ()
 This is executed by an enqueued task, the "forwarder". More...
 
virtual void internal_reg_succ (buffer_operation *op)
 Register successor. More...
 
virtual void internal_rem_succ (buffer_operation *op)
 Remove successor. More...
 
template<typename derived_type >
void internal_forward_task_impl (buffer_operation *op, derived_type *derived)
 
tasktry_put_task (const T &t) __TBB_override
 receive an item, return a task *if possible More...
 
graphgraph_reference () __TBB_override
 
void reset_receiver (reset_flags) __TBB_override
 put receiver back in initial state More...
 
- Protected Member Functions inherited from tbb::flow::interface10::internal::reservable_item_buffer< T, A >
bool reserve_front (T &v)
 
void consume_front ()
 
void release_front ()
 
- Protected Member Functions inherited from tbb::flow::interface10::internal::item_buffer< T, A >
bool buffer_empty () const
 
buffer_item_typeitem (size_type i)
 
const buffer_item_typeitem (size_type i) const
 
bool my_item_valid (size_type i) const
 
bool my_item_reserved (size_type i) const
 
const item_typeget_my_item (size_t i) const
 
void set_my_item (size_t i, const item_type &o)
 
void fetch_item (size_t i, item_type &o)
 
void move_item (size_t to, size_t from)
 
bool place_item (size_t here, const item_type &me)
 
void swap_items (size_t i, size_t j)
 
void destroy_item (size_type i)
 
const item_typefront () const
 
const item_typeback () const
 
void reserve_item (size_type i)
 
void release_item (size_type i)
 
void destroy_front ()
 
void destroy_back ()
 
size_type size (size_t new_tail=0)
 
size_type capacity ()
 
bool buffer_full ()
 
void grow_my_array (size_t minimum_size)
 Grows the internal array. More...
 
bool push_back (item_type &v)
 
bool pop_back (item_type &v)
 
bool pop_front (item_type &v)
 
void clean_up_buffer (bool reset_pointers)
 
- Protected Member Functions inherited from tbb::flow::interface10::receiver< T >
virtual tasktry_put_task_wrapper (const void *p, bool is_async) __TBB_override
 
- Protected Member Functions inherited from tbb::flow::interface10::internal::untyped_receiver
template<typename X >
tasktry_put_task (const X &t)
 
virtual bool is_continue_receiver ()
 
- Protected Member Functions inherited from tbb::flow::interface10::sender< T >
virtual bool try_get_wrapper (void *p, bool is_async) __TBB_override
 
virtual bool try_reserve_wrapper (void *p, bool is_async) __TBB_override
 
- Protected Member Functions inherited from tbb::flow::interface10::internal::untyped_sender
template<typename X >
bool try_get (X &t)
 Request an item from the sender. More...
 
template<typename X >
bool try_reserve (X &t)
 Reserves an item in the sender. More...
 

Private Member Functions

void order ()
 
bool is_item_valid ()
 
void try_put_and_add_task (task *&last_task)
 
bool prio_use_tail ()
 
void prio_push (const T &src)
 
void prio_pop ()
 
const T & prio ()
 
void heapify ()
 
void reheap ()
 

Private Attributes

Compare compare
 
size_type mark
 
input_type reserved_item
 

Friends

template<typename , typename >
class buffer_node
 

Additional Inherited Members

- Protected Attributes inherited from tbb::flow::interface10::buffer_node< T, A >
internal::round_robin_cache< T, null_rw_mutexmy_successors
 
bool forwarder_busy
 
internal::aggregator< handler_type, buffer_operationmy_aggregator
 
- Protected Attributes inherited from tbb::flow::interface10::graph_node
graphmy_graph
 
graph_nodenext
 
graph_nodeprev
 
- Protected Attributes inherited from tbb::flow::interface10::internal::reservable_item_buffer< T, A >
bool my_reserved
 
- Protected Attributes inherited from tbb::flow::interface10::internal::item_buffer< T, A >
buffer_item_typemy_array
 
size_type my_array_size
 
size_type my_head
 
size_type my_tail
 
- Static Protected Attributes inherited from tbb::flow::interface10::internal::item_buffer< T, A >
static const size_type initial_buffer_size = 4
 

Detailed Description

template<typename T, typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
class tbb::flow::interface10::priority_queue_node< T, Compare, A >

Forwards messages in priority order.

Definition at line 2190 of file flow_graph.h.

Member Typedef Documentation

◆ base_type

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef buffer_node<T,A> tbb::flow::interface10::priority_queue_node< T, Compare, A >::base_type

Definition at line 2194 of file flow_graph.h.

◆ class_type

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef priority_queue_node tbb::flow::interface10::priority_queue_node< T, Compare, A >::class_type

Definition at line 2195 of file flow_graph.h.

◆ input_type

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef T tbb::flow::interface10::priority_queue_node< T, Compare, A >::input_type

Definition at line 2192 of file flow_graph.h.

◆ item_type

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef buffer_node<T, A>::item_type tbb::flow::interface10::priority_queue_node< T, Compare, A >::item_type
protected

Definition at line 2227 of file flow_graph.h.

◆ output_type

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef T tbb::flow::interface10::priority_queue_node< T, Compare, A >::output_type

Definition at line 2193 of file flow_graph.h.

◆ predecessor_type

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef receiver<input_type>::predecessor_type tbb::flow::interface10::priority_queue_node< T, Compare, A >::predecessor_type

Definition at line 2196 of file flow_graph.h.

◆ prio_operation

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef buffer_node<T, A>::buffer_operation tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_operation
protected

Definition at line 2228 of file flow_graph.h.

◆ size_type

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef buffer_node<T, A>::size_type tbb::flow::interface10::priority_queue_node< T, Compare, A >::size_type
protected

Definition at line 2226 of file flow_graph.h.

◆ successor_type

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
typedef sender<output_type>::successor_type tbb::flow::interface10::priority_queue_node< T, Compare, A >::successor_type

Definition at line 2197 of file flow_graph.h.

Constructor & Destructor Documentation

◆ priority_queue_node() [1/2]

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
tbb::flow::interface10::priority_queue_node< T, Compare, A >::priority_queue_node ( graph g)
inlineexplicit

Constructor.

Definition at line 2200 of file flow_graph.h.

2200  : buffer_node<T, A>(g), mark(0) {
2201  tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),
2202  static_cast<receiver<input_type> *>(this),
2203  static_cast<sender<output_type> *>(this) );
2204  }
static void fgt_node(string_index, void *, void *)

References tbb::internal::fgt_node(), and tbb::flow::interface10::graph_node::my_graph.

Here is the call graph for this function:

◆ priority_queue_node() [2/2]

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
tbb::flow::interface10::priority_queue_node< T, Compare, A >::priority_queue_node ( const priority_queue_node< T, Compare, A > &  src)
inline

Copy constructor.

Definition at line 2207 of file flow_graph.h.

2207  : buffer_node<T, A>(src), mark(0) {
2208  tbb::internal::fgt_node( tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),
2209  static_cast<receiver<input_type> *>(this),
2210  static_cast<sender<output_type> *>(this) );
2211  }
static void fgt_node(string_index, void *, void *)

References tbb::internal::fgt_node(), and tbb::flow::interface10::graph_node::my_graph.

Here is the call graph for this function:

Member Function Documentation

◆ handle_operations()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::handle_operations ( prio_operation op_list)
inlineprotectedvirtual

Reimplemented from tbb::flow::interface10::buffer_node< T, A >.

Definition at line 2235 of file flow_graph.h.

2235  {
2236  this->handle_operations_impl(op_list, this);
2237  }
void handle_operations_impl(buffer_operation *op_list, derived_type *derived)
Definition: flow_graph.h:1613

References tbb::flow::interface10::buffer_node< T, A >::handle_operations_impl().

Here is the call graph for this function:

◆ heapify()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::heapify ( )
inlineprivate

Definition at line 2357 of file flow_graph.h.

2357  {
2358  if(this->my_tail == 0) {
2359  mark = 0;
2360  return;
2361  }
2362  if (!mark) mark = 1;
2363  for (; mark<this->my_tail; ++mark) { // for each unheaped element
2364  size_type cur_pos = mark;
2365  input_type to_place;
2366  this->fetch_item(mark,to_place);
2367  do { // push to_place up the heap
2368  size_type parent = (cur_pos-1)>>1;
2369  if (!compare(this->get_my_item(parent), to_place))
2370  break;
2371  this->move_item(cur_pos, parent);
2372  cur_pos = parent;
2373  } while( cur_pos );
2374  (void) this->place_item(cur_pos, to_place);
2375  }
2376  }
bool place_item(size_t here, const item_type &me)
Definition: flow_graph.h:112
void fetch_item(size_t i, item_type &o)
Definition: flow_graph.h:94
buffer_node< T, A >::size_type size_type
Definition: flow_graph.h:2226
void move_item(size_t to, size_t from)
Definition: flow_graph.h:103
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 parent
const item_type & get_my_item(size_t i) const
Definition: flow_graph.h:78

References tbb::flow::interface10::priority_queue_node< T, Compare, A >::compare, tbb::flow::interface10::internal::item_buffer< T, A >::fetch_item(), tbb::flow::interface10::internal::item_buffer< T, A >::get_my_item(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::mark, tbb::flow::interface10::internal::item_buffer< T, A >::move_item(), tbb::flow::interface10::internal::item_buffer< T, A >::my_tail, parent, tbb::flow::interface10::internal::item_buffer< T, A >::place_item(), and void.

Referenced by tbb::flow::interface10::priority_queue_node< T, Compare, A >::order().

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

◆ internal_consume()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_consume ( prio_operation op)
inlineprotectedvirtual

Reimplemented from tbb::flow::interface10::buffer_node< T, A >.

Definition at line 2271 of file flow_graph.h.

References tbb::internal::__TBB_store_with_release(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::reserved_item, and tbb::flow::interface10::internal::SUCCEEDED.

Here is the call graph for this function:

◆ internal_forward_task()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_forward_task ( prio_operation op)
inlineprotectedvirtual

Tries to forward valid items to successors.

Reimplemented from tbb::flow::interface10::buffer_node< T, A >.

Definition at line 2231 of file flow_graph.h.

2231  {
2232  this->internal_forward_task_impl(op, this);
2233  }
void internal_forward_task_impl(buffer_operation *op, derived_type *derived)
Definition: flow_graph.h:1779

References tbb::flow::interface10::buffer_node< T, A >::internal_forward_task_impl().

Here is the call graph for this function:

◆ internal_pop()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_pop ( prio_operation op)
inlineprotectedvirtual

Reimplemented from tbb::flow::interface10::buffer_node< T, A >.

Definition at line 2245 of file flow_graph.h.

2245  {
2246  // if empty or already reserved, don't pop
2247  if ( this->my_reserved == true || this->my_tail == 0 ) {
2249  return;
2250  }
2251 
2252  *(op->elem) = prio();
2254  prio_pop();
2255 
2256  }
void __TBB_store_with_release(volatile T &location, V value)
Definition: tbb_machine.h:717

References tbb::internal::__TBB_store_with_release(), tbb::flow::interface10::internal::FAILED, tbb::flow::interface10::internal::item_buffer< T, A >::my_tail, tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_pop(), and tbb::flow::interface10::internal::SUCCEEDED.

Here is the call graph for this function:

◆ internal_push()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
bool tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_push ( prio_operation op)
inlineprotectedvirtual

Reimplemented from tbb::flow::interface10::buffer_node< T, A >.

Definition at line 2239 of file flow_graph.h.

2239  {
2240  prio_push(*(op->elem));
2242  return true;
2243  }
void __TBB_store_with_release(volatile T &location, V value)
Definition: tbb_machine.h:717

References tbb::internal::__TBB_store_with_release(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_push(), and tbb::flow::interface10::internal::SUCCEEDED.

Here is the call graph for this function:

◆ internal_release()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_release ( prio_operation op)
inlineprotectedvirtual

◆ internal_reserve()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_reserve ( prio_operation op)
inlineprotectedvirtual

Reimplemented from tbb::flow::interface10::buffer_node< T, A >.

Definition at line 2259 of file flow_graph.h.

2259  {
2260  if (this->my_reserved == true || this->my_tail == 0) {
2262  return;
2263  }
2264  this->my_reserved = true;
2265  *(op->elem) = prio();
2266  reserved_item = *(op->elem);
2268  prio_pop();
2269  }
void __TBB_store_with_release(volatile T &location, V value)
Definition: tbb_machine.h:717

References tbb::internal::__TBB_store_with_release(), tbb::flow::interface10::internal::FAILED, tbb::flow::interface10::internal::item_buffer< T, A >::my_tail, tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_pop(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::reserved_item, and tbb::flow::interface10::internal::SUCCEEDED.

Here is the call graph for this function:

◆ is_item_valid()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
bool tbb::flow::interface10::priority_queue_node< T, Compare, A >::is_item_valid ( )
inlineprivate

Definition at line 2292 of file flow_graph.h.

2292  {
2293  return this->my_tail > 0;
2294  }

References tbb::flow::interface10::internal::item_buffer< T, A >::my_tail.

◆ order()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::order ( )
inlineprivate

Definition at line 2287 of file flow_graph.h.

2287  {
2288  if (mark < this->my_tail) heapify();
2289  __TBB_ASSERT(mark == this->my_tail, "mark unequal after heapify");
2290  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169

References __TBB_ASSERT, tbb::flow::interface10::priority_queue_node< T, Compare, A >::heapify(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::mark, and tbb::flow::interface10::internal::item_buffer< T, A >::my_tail.

Here is the call graph for this function:

◆ prio()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
const T& tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio ( )
inlineprivate

Definition at line 2352 of file flow_graph.h.

2352  {
2353  return this->get_my_item(prio_use_tail() ? this->my_tail-1 : 0);
2354  }
const item_type & get_my_item(size_t i) const
Definition: flow_graph.h:78

References tbb::flow::interface10::internal::item_buffer< T, A >::get_my_item(), tbb::flow::interface10::internal::item_buffer< T, A >::my_tail, and tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_use_tail().

Referenced by tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_pop(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_reserve(), and tbb::flow::interface10::priority_queue_node< T, Compare, A >::try_put_and_add_task().

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

◆ prio_pop()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_pop ( )
inlineprivate

Definition at line 2330 of file flow_graph.h.

2330  {
2331  if (prio_use_tail()) {
2332  // there are newly pushed elements; last one higher than top
2333  // copy the data
2334  this->destroy_item(this->my_tail-1);
2335  --(this->my_tail);
2336  __TBB_ASSERT(mark <= this->my_tail, "mark outside bounds after pop");
2337  return;
2338  }
2339  this->destroy_item(0);
2340  if(this->my_tail > 1) {
2341  // push the last element down heap
2342  __TBB_ASSERT(this->my_item_valid(this->my_tail - 1), NULL);
2343  this->move_item(0,this->my_tail - 1);
2344  }
2345  --(this->my_tail);
2346  if(mark > this->my_tail) --mark;
2347  if (this->my_tail > 1) // don't reheap for heap of size 1
2348  reheap();
2349  __TBB_ASSERT(mark <= this->my_tail, "mark outside bounds after pop");
2350  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void move_item(size_t to, size_t from)
Definition: flow_graph.h:103

References __TBB_ASSERT, tbb::flow::interface10::internal::item_buffer< T, A >::destroy_item(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::mark, tbb::flow::interface10::internal::item_buffer< T, A >::move_item(), tbb::flow::interface10::internal::item_buffer< T, A >::my_item_valid(), tbb::flow::interface10::internal::item_buffer< T, A >::my_tail, tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_use_tail(), and tbb::flow::interface10::priority_queue_node< T, Compare, A >::reheap().

Referenced by tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_pop(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_reserve(), and tbb::flow::interface10::priority_queue_node< T, Compare, A >::try_put_and_add_task().

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

◆ prio_push()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_push ( const T &  src)
inlineprivate

Definition at line 2319 of file flow_graph.h.

2319  {
2320  if ( this->my_tail >= this->my_array_size )
2321  this->grow_my_array( this->my_tail + 1 );
2322  (void) this->place_item(this->my_tail, src);
2323  ++(this->my_tail);
2324  __TBB_ASSERT(mark < this->my_tail, "mark outside bounds after push");
2325  }
bool place_item(size_t here, const item_type &me)
Definition: flow_graph.h:112
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void grow_my_array(size_t minimum_size)
Grows the internal array.
Definition: flow_graph.h:164

References __TBB_ASSERT, tbb::flow::interface10::internal::item_buffer< T, A >::grow_my_array(), tbb::flow::interface10::internal::item_buffer< T, A >::my_array_size, tbb::flow::interface10::internal::item_buffer< T, A >::my_tail, tbb::flow::interface10::internal::item_buffer< T, A >::place_item(), and void.

Referenced by tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_push(), and tbb::flow::interface10::priority_queue_node< T, Compare, A >::internal_release().

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

◆ prio_use_tail()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
bool tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_use_tail ( )
inlineprivate

Definition at line 2313 of file flow_graph.h.

2313  {
2314  __TBB_ASSERT(mark <= this->my_tail, "mark outside bounds before test");
2315  return mark < this->my_tail && compare(this->get_my_item(0), this->get_my_item(this->my_tail - 1));
2316  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
const item_type & get_my_item(size_t i) const
Definition: flow_graph.h:78

References __TBB_ASSERT, tbb::flow::interface10::priority_queue_node< T, Compare, A >::compare, tbb::flow::interface10::internal::item_buffer< T, A >::get_my_item(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::mark, and tbb::flow::interface10::internal::item_buffer< T, A >::my_tail.

Referenced by tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio(), and tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_pop().

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

◆ reheap()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::reheap ( )
inlineprivate

Definition at line 2379 of file flow_graph.h.

2379  {
2380  size_type cur_pos=0, child=1;
2381  while (child < mark) {
2382  size_type target = child;
2383  if (child+1<mark &&
2384  compare(this->get_my_item(child),
2385  this->get_my_item(child+1)))
2386  ++target;
2387  // target now has the higher priority child
2388  if (compare(this->get_my_item(target),
2389  this->get_my_item(cur_pos)))
2390  break;
2391  // swap
2392  this->swap_items(cur_pos, target);
2393  cur_pos = target;
2394  child = (cur_pos<<1)+1;
2395  }
2396  }
buffer_node< T, A >::size_type size_type
Definition: flow_graph.h:2226
const item_type & get_my_item(size_t i) const
Definition: flow_graph.h:78

References tbb::flow::interface10::priority_queue_node< T, Compare, A >::compare, tbb::flow::interface10::internal::item_buffer< T, A >::get_my_item(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::mark, and tbb::flow::interface10::internal::item_buffer< T, A >::swap_items().

Referenced by tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_pop().

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

◆ reset_node()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::reset_node ( reset_flags  f)
inlineprotectedvirtual

Reimplemented from tbb::flow::interface10::buffer_node< T, A >.

Definition at line 2221 of file flow_graph.h.

2221  {
2222  mark = 0;
2224  }
void reset_node(reset_flags f) __TBB_override
Definition: flow_graph.h:2023

References tbb::flow::interface10::priority_queue_node< T, Compare, A >::mark, and tbb::flow::interface10::buffer_node< T, A >::reset_node().

Here is the call graph for this function:

◆ try_put_and_add_task()

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
void tbb::flow::interface10::priority_queue_node< T, Compare, A >::try_put_and_add_task ( task *&  last_task)
inlineprivate

Definition at line 2296 of file flow_graph.h.

2296  {
2297  task * new_task = this->my_successors.try_put_task(this->prio());
2298  if (new_task) {
2299  // workaround for icc bug
2300  graph& graph_ref = this->graph_reference();
2301  last_task = combine_tasks(graph_ref, last_task, new_task);
2302  prio_pop();
2303  }
2304  }
internal::round_robin_cache< T, null_rw_mutex > my_successors
Definition: flow_graph.h:1556
static tbb::task * combine_tasks(graph &g, tbb::task *left, tbb::task *right)
Definition: flow_graph.h:171
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 * task
graph & graph_reference() __TBB_override
Definition: flow_graph.h:2008

References tbb::flow::interface10::combine_tasks(), tbb::flow::interface10::buffer_node< T, A >::graph_reference(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio(), tbb::flow::interface10::priority_queue_node< T, Compare, A >::prio_pop(), and tbb::flow::interface10::internal::round_robin_cache< T, M >::try_put_task().

Here is the call graph for this function:

Friends And Related Function Documentation

◆ buffer_node

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
template<typename , typename >
friend class buffer_node
friend

Definition at line 2285 of file flow_graph.h.

Member Data Documentation

◆ compare

template<typename T , typename Compare = std::less<T>, typename A = cache_aligned_allocator<T>>
Compare tbb::flow::interface10::priority_queue_node< T, Compare, A >::compare
private

◆ mark

◆ reserved_item


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

Copyright © 2005-2019 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.