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

Forwards messages in priority order. More...

#include <flow_graph.h>

Inheritance diagram for tbb::flow::interface11::priority_queue_node< T, Compare, A >:
Collaboration diagram for tbb::flow::interface11::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::interface11::buffer_node< T, cache_aligned_allocator< T > >
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, cache_aligned_allocator< T > > class_type
 
- Public Types inherited from internal::item_buffer< T, cache_aligned_allocator< T > >
enum  buffer_item_state
 
typedef T item_type
 

Public Member Functions

__TBB_NOINLINE_SYM priority_queue_node (graph &g, const Compare &comp=Compare())
 Constructor. More...
 
__TBB_NOINLINE_SYM priority_queue_node (const priority_queue_node &src)
 Copy constructor. More...
 
- Public Member Functions inherited from tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >
__TBB_NOINLINE_SYM buffer_node (graph &g)
 Constructor. More...
 
__TBB_NOINLINE_SYM 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::interface11::graph_node
 graph_node (graph &g)
 
virtual ~graph_node ()
 
- Public Member Functions inherited from internal::reservable_item_buffer< T, cache_aligned_allocator< T > >
 reservable_item_buffer ()
 
void reset ()
 
- Public Member Functions inherited from internal::item_buffer< T, cache_aligned_allocator< T > >
 item_buffer ()
 Constructor. More...
 
 ~item_buffer ()
 
void reset ()
 
- Public Member Functions inherited from tbb::flow::interface11::receiver< T >
virtual ~receiver ()
 Destructor. More...
 
bool try_put (const T &t)
 Put an item to the receiver. More...
 
virtual __TBB_DEPRECATED bool register_predecessor (predecessor_type &)
 Add a predecessor to the node. More...
 
virtual __TBB_DEPRECATED bool remove_predecessor (predecessor_type &)
 Remove a predecessor from the node. More...
 
- Public Member Functions inherited from tbb::flow::interface11::sender< T >
virtual ~sender ()
 
virtual __TBB_DEPRECATED bool register_successor (successor_type &r)=0
 Add a new successor to this node. More...
 
virtual __TBB_DEPRECATED bool remove_successor (successor_type &r)=0
 Removes a successor from this node. More...
 

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::interface11::buffer_node< T, cache_aligned_allocator< T > >
enum  op_type
 
typedef size_t size_type
 
typedef internal::aggregating_functor< class_type, buffer_operation > handler_type
 
- Protected Types inherited from internal::item_buffer< T, cache_aligned_allocator< T > >
typedef size_t size_type
 
typedef aligned_pair< item_type, buffer_item_state >::type buffer_item_type
 
typedef cache_aligned_allocator< T > ::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::interface11::buffer_node< T, cache_aligned_allocator< T > >
virtual void handle_operations (buffer_operation *op_list)
 
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...
 
virtual void internal_forward_task (buffer_operation *op)
 Tries to forward valid items to successors. More...
 
void internal_forward_task_impl (buffer_operation *op, derived_type *derived)
 
virtual bool internal_push (buffer_operation *op)
 
virtual void internal_pop (buffer_operation *op)
 
virtual void internal_reserve (buffer_operation *op)
 
virtual void internal_consume (buffer_operation *op)
 
virtual void internal_release (buffer_operation *op)
 
tasktry_put_task (const T &t) __TBB_override
 receive an item, return a task *if possible More...
 
graphgraph_reference () const __TBB_override
 
void reset_receiver (reset_flags) __TBB_override
 put receiver back in initial state More...
 
void reset_node (reset_flags f) __TBB_override
 
- Protected Member Functions inherited from internal::reservable_item_buffer< T, cache_aligned_allocator< T > >
bool reserve_front (T &v)
 
void consume_front ()
 
void release_front ()
 
- Protected Member Functions inherited from internal::item_buffer< T, cache_aligned_allocator< T > >
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::interface11::receiver< T >
virtual graphgraph_reference () const =0
 
virtual bool is_continue_receiver ()
 

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

- Public Attributes inherited from tbb::flow::interface11::receiver< T >
__TBB_DEPRECATED typedef T input_type
 The input type of this receiver. More...
 
__TBB_DEPRECATED typedef sender< T > predecessor_type
 The predecessor type for this node. More...
 
- Public Attributes inherited from tbb::flow::interface11::sender< T >
__TBB_DEPRECATED typedef T output_type
 The output type of this sender. More...
 
__TBB_DEPRECATED typedef receiver< T > successor_type
 The successor type for this node. More...
 
- Protected Attributes inherited from tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >
internal::round_robin_cache< T, null_rw_mutexmy_successors
 
bool forwarder_busy
 
internal::aggregator< handler_type, buffer_operation > my_aggregator
 
- Protected Attributes inherited from tbb::flow::interface11::graph_node
graphmy_graph
 
graph_nodenext
 
graph_nodeprev
 
- Protected Attributes inherited from internal::reservable_item_buffer< T, cache_aligned_allocator< T > >
bool my_reserved
 
- Protected Attributes inherited from internal::item_buffer< T, cache_aligned_allocator< T > >
buffer_item_typemy_array
 
size_type my_array_size
 
size_type my_head
 
size_type my_tail
 
- Static Protected Attributes inherited from internal::item_buffer< T, cache_aligned_allocator< T > >
static const size_type initial_buffer_size
 

Detailed Description

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

Forwards messages in priority order.

Definition at line 2373 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::interface11::priority_queue_node< T, Compare, A >::base_type

Definition at line 2377 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::interface11::priority_queue_node< T, Compare, A >::class_type

Definition at line 2378 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::interface11::priority_queue_node< T, Compare, A >::input_type

Definition at line 2375 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::interface11::priority_queue_node< T, Compare, A >::item_type
protected

Definition at line 2419 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::interface11::priority_queue_node< T, Compare, A >::output_type

Definition at line 2376 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::interface11::priority_queue_node< T, Compare, A >::predecessor_type

Definition at line 2379 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::interface11::priority_queue_node< T, Compare, A >::prio_operation
protected

Definition at line 2420 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::interface11::priority_queue_node< T, Compare, A >::size_type
protected

Definition at line 2418 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::interface11::priority_queue_node< T, Compare, A >::successor_type

Definition at line 2380 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_NOINLINE_SYM tbb::flow::interface11::priority_queue_node< T, Compare, A >::priority_queue_node ( graph g,
const Compare &  comp = Compare() 
)
inlineexplicit

Constructor.

Definition at line 2383 of file flow_graph.h.

2384  : buffer_node<T, A>(g), compare(comp), mark(0) {
2385  tbb::internal::fgt_node( CODEPTR(), tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),
2386  static_cast<receiver<input_type> *>(this),
2387  static_cast<sender<output_type> *>(this) );
2388  }

References CODEPTR, tbb::internal::fgt_node(), and tbb::flow::interface11::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_NOINLINE_SYM tbb::flow::interface11::priority_queue_node< T, Compare, A >::priority_queue_node ( const priority_queue_node< T, Compare, A > &  src)
inline

Copy constructor.

Definition at line 2399 of file flow_graph.h.

2399  : buffer_node<T, A>(src), mark(0) {
2400  tbb::internal::fgt_node( CODEPTR(), tbb::internal::FLOW_PRIORITY_QUEUE_NODE, &(this->my_graph),
2401  static_cast<receiver<input_type> *>(this),
2402  static_cast<sender<output_type> *>(this) );
2403  }

References CODEPTR, tbb::internal::fgt_node(), and tbb::flow::interface11::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::interface11::priority_queue_node< T, Compare, A >::handle_operations ( prio_operation op_list)
inlineprotected

Definition at line 2427 of file flow_graph.h.

2427  {
2428  this->handle_operations_impl(op_list, this);
2429  }

References tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >::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::interface11::priority_queue_node< T, Compare, A >::heapify ( )
inlineprivate

Definition at line 2549 of file flow_graph.h.

2549  {
2550  if(this->my_tail == 0) {
2551  mark = 0;
2552  return;
2553  }
2554  if (!mark) mark = 1;
2555  for (; mark<this->my_tail; ++mark) { // for each unheaped element
2556  size_type cur_pos = mark;
2557  input_type to_place;
2558  this->fetch_item(mark,to_place);
2559  do { // push to_place up the heap
2560  size_type parent = (cur_pos-1)>>1;
2561  if (!compare(this->get_my_item(parent), to_place))
2562  break;
2563  this->move_item(cur_pos, parent);
2564  cur_pos = parent;
2565  } while( cur_pos );
2566  (void) this->place_item(cur_pos, to_place);
2567  }
2568  }

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

Referenced by tbb::flow::interface11::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::interface11::priority_queue_node< T, Compare, A >::internal_consume ( prio_operation op)
inlineprotected

Definition at line 2463 of file flow_graph.h.

2463  {
2465  this->my_reserved = false;
2467  }

References tbb::internal::__TBB_store_with_release(), internal::reservable_item_buffer< T, cache_aligned_allocator< T > >::my_reserved, tbb::flow::interface11::priority_queue_node< T, Compare, A >::reserved_item, and 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::interface11::priority_queue_node< T, Compare, A >::internal_forward_task ( prio_operation op)
inlineprotected

Tries to forward valid items to successors.

Definition at line 2423 of file flow_graph.h.

2423  {
2424  this->internal_forward_task_impl(op, this);
2425  }

References tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >::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::interface11::priority_queue_node< T, Compare, A >::internal_pop ( prio_operation op)
inlineprotected

Definition at line 2437 of file flow_graph.h.

2437  {
2438  // if empty or already reserved, don't pop
2439  if ( this->my_reserved == true || this->my_tail == 0 ) {
2441  return;
2442  }
2443 
2444  *(op->elem) = prio();
2446  prio_pop();
2447 
2448  }

References tbb::internal::__TBB_store_with_release(), internal::FAILED, internal::reservable_item_buffer< T, cache_aligned_allocator< T > >::my_reserved, internal::item_buffer< T, cache_aligned_allocator< T > >::my_tail, tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio_pop(), and 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::interface11::priority_queue_node< T, Compare, A >::internal_push ( prio_operation op)
inlineprotected

Definition at line 2431 of file flow_graph.h.

2431  {
2432  prio_push(*(op->elem));
2434  return true;
2435  }

References tbb::internal::__TBB_store_with_release(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio_push(), and 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::interface11::priority_queue_node< T, Compare, A >::internal_release ( prio_operation op)
inlineprotected

Definition at line 2469 of file flow_graph.h.

2469  {
2472  this->my_reserved = false;
2474  }

References tbb::internal::__TBB_store_with_release(), internal::reservable_item_buffer< T, cache_aligned_allocator< T > >::my_reserved, tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio_push(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::reserved_item, and internal::SUCCEEDED.

Here is the call graph for this function:

◆ internal_reserve()

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

Definition at line 2451 of file flow_graph.h.

2451  {
2452  if (this->my_reserved == true || this->my_tail == 0) {
2454  return;
2455  }
2456  this->my_reserved = true;
2457  *(op->elem) = prio();
2458  reserved_item = *(op->elem);
2460  prio_pop();
2461  }

References tbb::internal::__TBB_store_with_release(), internal::FAILED, internal::reservable_item_buffer< T, cache_aligned_allocator< T > >::my_reserved, internal::item_buffer< T, cache_aligned_allocator< T > >::my_tail, tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio_pop(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::reserved_item, and 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::interface11::priority_queue_node< T, Compare, A >::is_item_valid ( )
inlineprivate

Definition at line 2484 of file flow_graph.h.

2484  {
2485  return this->my_tail > 0;
2486  }

References internal::item_buffer< T, cache_aligned_allocator< T > >::my_tail.

◆ order()

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

Definition at line 2479 of file flow_graph.h.

2479  {
2480  if (mark < this->my_tail) heapify();
2481  __TBB_ASSERT(mark == this->my_tail, "mark unequal after heapify");
2482  }

References __TBB_ASSERT, tbb::flow::interface11::priority_queue_node< T, Compare, A >::heapify(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::mark, and internal::item_buffer< T, cache_aligned_allocator< T > >::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::interface11::priority_queue_node< T, Compare, A >::prio ( )
inlineprivate

Definition at line 2544 of file flow_graph.h.

2544  {
2545  return this->get_my_item(prio_use_tail() ? this->my_tail-1 : 0);
2546  }

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

Referenced by tbb::flow::interface11::priority_queue_node< T, Compare, A >::internal_pop(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::internal_reserve(), and tbb::flow::interface11::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::interface11::priority_queue_node< T, Compare, A >::prio_pop ( )
inlineprivate

Definition at line 2522 of file flow_graph.h.

2522  {
2523  if (prio_use_tail()) {
2524  // there are newly pushed elements; last one higher than top
2525  // copy the data
2526  this->destroy_item(this->my_tail-1);
2527  --(this->my_tail);
2528  __TBB_ASSERT(mark <= this->my_tail, "mark outside bounds after pop");
2529  return;
2530  }
2531  this->destroy_item(0);
2532  if(this->my_tail > 1) {
2533  // push the last element down heap
2534  __TBB_ASSERT(this->my_item_valid(this->my_tail - 1), NULL);
2535  this->move_item(0,this->my_tail - 1);
2536  }
2537  --(this->my_tail);
2538  if(mark > this->my_tail) --mark;
2539  if (this->my_tail > 1) // don't reheap for heap of size 1
2540  reheap();
2541  __TBB_ASSERT(mark <= this->my_tail, "mark outside bounds after pop");
2542  }

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

Referenced by tbb::flow::interface11::priority_queue_node< T, Compare, A >::internal_pop(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::internal_reserve(), and tbb::flow::interface11::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::interface11::priority_queue_node< T, Compare, A >::prio_push ( const T &  src)
inlineprivate

Definition at line 2511 of file flow_graph.h.

2511  {
2512  if ( this->my_tail >= this->my_array_size )
2513  this->grow_my_array( this->my_tail + 1 );
2514  (void) this->place_item(this->my_tail, src);
2515  ++(this->my_tail);
2516  __TBB_ASSERT(mark < this->my_tail, "mark outside bounds after push");
2517  }

References __TBB_ASSERT, internal::item_buffer< T, cache_aligned_allocator< T > >::grow_my_array(), internal::item_buffer< T, cache_aligned_allocator< T > >::my_array_size, internal::item_buffer< T, cache_aligned_allocator< T > >::my_tail, internal::item_buffer< T, cache_aligned_allocator< T > >::place_item(), and void.

Referenced by tbb::flow::interface11::priority_queue_node< T, Compare, A >::internal_push(), and tbb::flow::interface11::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::interface11::priority_queue_node< T, Compare, A >::prio_use_tail ( )
inlineprivate

Definition at line 2505 of file flow_graph.h.

2505  {
2506  __TBB_ASSERT(mark <= this->my_tail, "mark outside bounds before test");
2507  return mark < this->my_tail && compare(this->get_my_item(0), this->get_my_item(this->my_tail - 1));
2508  }

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

Referenced by tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio(), and tbb::flow::interface11::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::interface11::priority_queue_node< T, Compare, A >::reheap ( )
inlineprivate

Definition at line 2571 of file flow_graph.h.

2571  {
2572  size_type cur_pos=0, child=1;
2573  while (child < mark) {
2574  size_type target = child;
2575  if (child+1<mark &&
2576  compare(this->get_my_item(child),
2577  this->get_my_item(child+1)))
2578  ++target;
2579  // target now has the higher priority child
2580  if (compare(this->get_my_item(target),
2581  this->get_my_item(cur_pos)))
2582  break;
2583  // swap
2584  this->swap_items(cur_pos, target);
2585  cur_pos = target;
2586  child = (cur_pos<<1)+1;
2587  }
2588  }

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

Referenced by tbb::flow::interface11::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::interface11::priority_queue_node< T, Compare, A >::reset_node ( reset_flags  f)
inlineprotectedvirtual

Implements tbb::flow::interface11::graph_node.

Definition at line 2413 of file flow_graph.h.

2413  {
2414  mark = 0;
2416  }

References tbb::flow::interface11::priority_queue_node< T, Compare, A >::mark, and tbb::flow::interface11::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::interface11::priority_queue_node< T, Compare, A >::try_put_and_add_task ( task *&  last_task)
inlineprivate

Definition at line 2488 of file flow_graph.h.

2488  {
2489  task * new_task = this->my_successors.try_put_task(this->prio());
2490  if (new_task) {
2491  // workaround for icc bug
2492  graph& graph_ref = this->graph_reference();
2493  last_task = combine_tasks(graph_ref, last_task, new_task);
2494  prio_pop();
2495  }
2496  }

References tbb::flow::interface11::combine_tasks(), tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >::graph_reference(), tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio(), and tbb::flow::interface11::priority_queue_node< T, Compare, A >::prio_pop().

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 2477 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::interface11::priority_queue_node< T, Compare, A >::compare
private

◆ mark

◆ reserved_item


The documentation for this class was generated from the following file:
internal::item_buffer< T, cache_aligned_allocator< T > >::move_item
void move_item(size_t to, size_t from)
Definition: _flow_graph_item_buffer_impl.h:98
internal::item_buffer< T, cache_aligned_allocator< T > >::my_item_valid
bool my_item_valid(size_type i) const
Definition: _flow_graph_item_buffer_impl.h:69
internal::SUCCEEDED
@ SUCCEEDED
Definition: _flow_graph_types_impl.h:719
tbb::flow::interface11::priority_queue_node::mark
size_type mark
Definition: flow_graph.h:2500
void
void
Definition: ittnotify_static.h:91
tbb::flow::interface11::priority_queue_node::prio
const T & prio()
Definition: flow_graph.h:2544
tbb::flow::interface11::priority_queue_node::prio_use_tail
bool prio_use_tail()
Definition: flow_graph.h:2505
CODEPTR
#define CODEPTR()
Definition: _flow_graph_trace_impl.h:297
__TBB_ASSERT
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165
tbb::flow::interface11::graph_node::my_graph
graph & my_graph
Definition: _flow_graph_impl.h:464
internal::item_buffer< T, cache_aligned_allocator< T > >::grow_my_array
void grow_my_array(size_t minimum_size)
Grows the internal array.
Definition: _flow_graph_item_buffer_impl.h:159
internal::item_buffer< T, cache_aligned_allocator< T > >::swap_items
void swap_items(size_t i, size_t j)
Definition: _flow_graph_item_buffer_impl.h:116
tbb::flow::interface11::priority_queue_node::input_type
T input_type
Definition: flow_graph.h:2375
tbb::flow::interface11::combine_tasks
static tbb::task * combine_tasks(graph &g, tbb::task *left, tbb::task *right)
Definition: flow_graph.h:191
internal::item_buffer< T, cache_aligned_allocator< T > >::get_my_item
const item_type & get_my_item(size_t i) const
Definition: _flow_graph_item_buffer_impl.h:73
internal::item_buffer< T, cache_aligned_allocator< T > >::my_array_size
size_type my_array_size
Definition: _flow_graph_item_buffer_impl.h:50
internal::item_buffer< T, cache_aligned_allocator< T > >::my_tail
size_type my_tail
Definition: _flow_graph_item_buffer_impl.h:53
internal::item_buffer< T, cache_aligned_allocator< T > >::destroy_item
void destroy_item(size_type i)
Definition: _flow_graph_item_buffer_impl.h:123
tbb::flow::interface11::priority_queue_node::reserved_item
input_type reserved_item
Definition: flow_graph.h:2502
tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >::handle_operations_impl
void handle_operations_impl(buffer_operation *op_list, derived_type *derived)
Definition: flow_graph.h:1774
tbb::internal::__TBB_store_with_release
void __TBB_store_with_release(volatile T &location, V value)
Definition: tbb_machine.h:716
tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >::my_successors
internal::round_robin_cache< T, null_rw_mutex > my_successors
Definition: flow_graph.h:1717
parent
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
Definition: ittnotify_static.h:176
tbb::flow::interface11::priority_queue_node::prio_pop
void prio_pop()
Definition: flow_graph.h:2522
tbb::flow::interface11::buffer_node::reset_node
void reset_node(reset_flags f) __TBB_override
Definition: flow_graph.h:2191
task
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
Definition: ittnotify_static.h:119
tbb::flow::interface11::priority_queue_node::prio_push
void prio_push(const T &src)
Definition: flow_graph.h:2511
tbb::flow::interface11::priority_queue_node::reheap
void reheap()
Definition: flow_graph.h:2571
tbb::flow::interface11::priority_queue_node::size_type
buffer_node< T, A >::size_type size_type
Definition: flow_graph.h:2418
internal::FAILED
@ FAILED
Definition: _flow_graph_types_impl.h:719
tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >::graph_reference
graph & graph_reference() const __TBB_override
Definition: flow_graph.h:2176
tbb::internal::fgt_node
static void fgt_node(void *, string_index, void *, void *)
Definition: _flow_graph_trace_impl.h:326
tbb::flow::interface11::buffer_node< T, cache_aligned_allocator< T > >::internal_forward_task_impl
void internal_forward_task_impl(buffer_operation *op, derived_type *derived)
Definition: flow_graph.h:1940
tbb::flow::interface11::priority_queue_node::compare
Compare compare
Definition: flow_graph.h:2499
tbb::flow::interface11::priority_queue_node::heapify
void heapify()
Definition: flow_graph.h:2549
internal::item_buffer< T, cache_aligned_allocator< T > >::place_item
bool place_item(size_t here, const item_type &me)
Definition: _flow_graph_item_buffer_impl.h:107
internal::item_buffer< T, cache_aligned_allocator< T > >::fetch_item
void fetch_item(size_t i, item_type &o)
Definition: _flow_graph_item_buffer_impl.h:89
internal::reservable_item_buffer< T, cache_aligned_allocator< T > >::my_reserved
bool my_reserved
Definition: _flow_graph_item_buffer_impl.h:279
tbb::flow::interface11::graph_node::graph
friend class graph
Definition: _flow_graph_impl.h:455

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.