Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
internal::queueing_port< T > Class Template Reference

queueing join_port More...

#include <_flow_graph_join_impl.h>

Inheritance diagram for internal::queueing_port< T >:
Collaboration diagram for internal::queueing_port< T >:

Classes

class  queueing_port_operation
 

Public Types

typedef T input_type
 
typedef receiver< input_type >::predecessor_type predecessor_type
 
typedef queueing_port< T > class_type
 
- Public Types inherited from internal::item_buffer< T, A >
enum  buffer_item_state { no_item =0, has_item =1, reserved_item =2 }
 
typedef T item_type
 

Public Member Functions

 queueing_port ()
 Constructor. More...
 
 queueing_port (const queueing_port &)
 copy constructor More...
 
void set_join_node_pointer (forwarding_base *join)
 record parent for tallying available items More...
 
bool get_item (T &v)
 
void reset_port ()
 
void reset_receiver (reset_flags f) __TBB_override
 
- Public Member Functions inherited from internal::item_buffer< T, A >
 item_buffer ()
 Constructor. More...
 
 ~item_buffer ()
 
void reset ()
 

Protected Member Functions

tasktry_put_task (const T &v) __TBB_override
 
graph & graph_reference () __TBB_override
 
- Protected Member Functions inherited from 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)
 

Private Types

enum  op_type { get__item, res_port, try__put_task }
 
enum  op_stat { WAIT =0, SUCCEEDED, FAILED }
 
typedef internal::aggregating_functor< class_type, queueing_port_operationhandler_type
 

Private Member Functions

void handle_operations (queueing_port_operation *op_list)
 

Private Attributes

aggregator< handler_type, queueing_port_operationmy_aggregator
 
forwarding_basemy_join
 

Friends

class internal::aggregating_functor< class_type, queueing_port_operation >
 
template<typename R , typename B >
class run_and_put_task
 
template<typename X , typename Y >
class internal::broadcast_cache
 
template<typename X , typename Y >
class internal::round_robin_cache
 

Additional Inherited Members

- Protected Types inherited from 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 Attributes inherited from 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 internal::item_buffer< T, A >
static const size_type initial_buffer_size = 4
 

Detailed Description

template<typename T>
class internal::queueing_port< T >

queueing join_port

Definition at line 427 of file _flow_graph_join_impl.h.

Member Typedef Documentation

◆ class_type

template<typename T >
typedef queueing_port<T> internal::queueing_port< T >::class_type

Definition at line 431 of file _flow_graph_join_impl.h.

◆ handler_type

template<typename T >
typedef internal::aggregating_functor<class_type, queueing_port_operation> internal::queueing_port< T >::handler_type
private

Definition at line 473 of file _flow_graph_join_impl.h.

◆ input_type

template<typename T >
typedef T internal::queueing_port< T >::input_type

Definition at line 429 of file _flow_graph_join_impl.h.

◆ predecessor_type

template<typename T >
typedef receiver<input_type>::predecessor_type internal::queueing_port< T >::predecessor_type

Definition at line 430 of file _flow_graph_join_impl.h.

Member Enumeration Documentation

◆ op_stat

◆ op_type

template<typename T >
enum internal::queueing_port::op_type
private
Enumerator
get__item 
res_port 
try__put_task 

Definition at line 439 of file _flow_graph_join_impl.h.

440 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
441  , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy
442 #endif
443  };

Constructor & Destructor Documentation

◆ queueing_port() [1/2]

template<typename T >
internal::queueing_port< T >::queueing_port ( )
inline

Constructor.

Definition at line 554 of file _flow_graph_join_impl.h.

554  : item_buffer<T>() {
555  my_join = NULL;
556  my_aggregator.initialize_handler(handler_type(this));
557  }
aggregator< handler_type, queueing_port_operation > my_aggregator
internal::aggregating_functor< class_type, queueing_port_operation > handler_type

References internal::queueing_port< T >::my_aggregator, and internal::queueing_port< T >::my_join.

◆ queueing_port() [2/2]

template<typename T >
internal::queueing_port< T >::queueing_port ( const queueing_port< T > &  )
inline

copy constructor

Definition at line 560 of file _flow_graph_join_impl.h.

560  : receiver<T>(), item_buffer<T>() {
561  my_join = NULL;
562  my_aggregator.initialize_handler(handler_type(this));
563  }
aggregator< handler_type, queueing_port_operation > my_aggregator
internal::aggregating_functor< class_type, queueing_port_operation > handler_type

References internal::queueing_port< T >::my_aggregator, and internal::queueing_port< T >::my_join.

Member Function Documentation

◆ get_item()

template<typename T >
bool internal::queueing_port< T >::get_item ( T &  v)
inline

Definition at line 570 of file _flow_graph_join_impl.h.

570  {
571  queueing_port_operation op_data(&v, get__item);
572  my_aggregator.execute(&op_data);
573  return op_data.status == SUCCEEDED;
574  }
aggregator< handler_type, queueing_port_operation > my_aggregator

References internal::queueing_port< T >::get__item, internal::queueing_port< T >::my_aggregator, and internal::queueing_port< T >::SUCCEEDED.

◆ graph_reference()

template<typename T >
graph& internal::queueing_port< T >::graph_reference ( )
inlineprotected

◆ handle_operations()

template<typename T >
void internal::queueing_port< T >::handle_operations ( queueing_port_operation op_list)
inlineprivate

Definition at line 477 of file _flow_graph_join_impl.h.

477  {
478  queueing_port_operation *current;
479  bool was_empty;
480  while(op_list) {
481  current = op_list;
482  op_list = op_list->next;
483  switch(current->type) {
484  case try__put_task: {
485  task *rtask = NULL;
486  was_empty = this->buffer_empty();
487  this->push_back(current->my_val);
488  if (was_empty) rtask = my_join->decrement_port_count(false);
489  else
490  rtask = SUCCESSFULLY_ENQUEUED;
491  current->bypass_t = rtask;
492  __TBB_store_with_release(current->status, SUCCEEDED);
493  }
494  break;
495  case get__item:
496  if(!this->buffer_empty()) {
497  *(current->my_arg) = this->front();
498  __TBB_store_with_release(current->status, SUCCEEDED);
499  }
500  else {
501  __TBB_store_with_release(current->status, FAILED);
502  }
503  break;
504  case res_port:
505  __TBB_ASSERT(this->my_item_valid(this->my_head), "No item to reset");
506  this->destroy_front();
507  if(this->my_item_valid(this->my_head)) {
509  }
510  __TBB_store_with_release(current->status, SUCCEEDED);
511  break;
512 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
513  case add_blt_pred:
514  my_built_predecessors.add_edge(*(current->pred));
515  __TBB_store_with_release(current->status, SUCCEEDED);
516  break;
517  case del_blt_pred:
518  my_built_predecessors.delete_edge(*(current->pred));
519  __TBB_store_with_release(current->status, SUCCEEDED);
520  break;
521  case blt_pred_cnt:
522  current->cnt_val = my_built_predecessors.edge_count();
523  __TBB_store_with_release(current->status, SUCCEEDED);
524  break;
525  case blt_pred_cpy:
526  my_built_predecessors.copy_edges(*(current->plist));
527  __TBB_store_with_release(current->status, SUCCEEDED);
528  break;
529 #endif /* TBB_DEPRECATED_FLOW_NODE_EXTRACTION */
530  }
531  }
532  }
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
void __TBB_store_with_release(volatile T &location, V value)
Definition: tbb_machine.h:713
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165
static tbb::task *const SUCCESSFULLY_ENQUEUED
bool my_item_valid(size_type i) const
virtual task * decrement_port_count(bool handle_task)=0
const item_type & front() const

References __TBB_ASSERT, tbb::internal::__TBB_store_with_release(), internal::item_buffer< T, A >::buffer_empty(), internal::queueing_port< T >::queueing_port_operation::bypass_t, internal::forwarding_base::decrement_port_count(), internal::item_buffer< T, A >::destroy_front(), internal::queueing_port< T >::FAILED, internal::item_buffer< T, A >::front(), internal::queueing_port< T >::get__item, internal::queueing_port< T >::queueing_port_operation::my_arg, internal::item_buffer< T, A >::my_head, internal::item_buffer< T, A >::my_item_valid(), internal::queueing_port< T >::my_join, internal::queueing_port< T >::queueing_port_operation::my_val, internal::item_buffer< T, A >::push_back(), internal::queueing_port< T >::res_port, internal::queueing_port< T >::SUCCEEDED, tbb::flow::internal::SUCCESSFULLY_ENQUEUED, task, internal::queueing_port< T >::try__put_task, internal::queueing_port< T >::queueing_port_operation::type, and void.

Here is the call graph for this function:

◆ reset_port()

template<typename T >
void internal::queueing_port< T >::reset_port ( )
inline

Definition at line 578 of file _flow_graph_join_impl.h.

578  {
579  queueing_port_operation op_data(res_port);
580  my_aggregator.execute(&op_data);
581  return;
582  }
aggregator< handler_type, queueing_port_operation > my_aggregator

References internal::queueing_port< T >::my_aggregator, and internal::queueing_port< T >::res_port.

◆ reset_receiver()

template<typename T >
void internal::queueing_port< T >::reset_receiver ( reset_flags  f)
inline

Definition at line 617 of file _flow_graph_join_impl.h.

617  {
620 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
621  if (f & rf_clear_edges)
622  my_built_predecessors.clear();
623 #endif
624  }
void suppress_unused_warning(const T1 &)
Utility template function to prevent "unused" warnings by various compilers.
Definition: tbb_stddef.h:377

References internal::item_buffer< T, A >::reset(), tbb::flow::interface10::rf_clear_edges, and tbb::internal::suppress_unused_warning().

Here is the call graph for this function:

◆ set_join_node_pointer()

template<typename T >
void internal::queueing_port< T >::set_join_node_pointer ( forwarding_base join)
inline

record parent for tallying available items

Definition at line 566 of file _flow_graph_join_impl.h.

566  {
567  my_join = join;
568  }

References internal::queueing_port< T >::my_join.

◆ try_put_task()

template<typename T >
task* internal::queueing_port< T >::try_put_task ( const T &  v)
inlineprotected

Definition at line 539 of file _flow_graph_join_impl.h.

539  {
540  queueing_port_operation op_data(v, try__put_task);
541  my_aggregator.execute(&op_data);
542  __TBB_ASSERT(op_data.status == SUCCEEDED || !op_data.bypass_t, "inconsistent return from aggregator");
543  if(!op_data.bypass_t) return SUCCESSFULLY_ENQUEUED;
544  return op_data.bypass_t;
545  }
aggregator< handler_type, queueing_port_operation > my_aggregator
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165
static tbb::task *const SUCCESSFULLY_ENQUEUED

References __TBB_ASSERT, internal::queueing_port< T >::queueing_port_operation::bypass_t, internal::queueing_port< T >::my_aggregator, internal::queueing_port< T >::SUCCEEDED, tbb::flow::internal::SUCCESSFULLY_ENQUEUED, and internal::queueing_port< T >::try__put_task.

Friends And Related Function Documentation

◆ internal::aggregating_functor< class_type, queueing_port_operation >

template<typename T >
friend class internal::aggregating_functor< class_type, queueing_port_operation >
friend

Definition at line 474 of file _flow_graph_join_impl.h.

◆ internal::broadcast_cache

template<typename T >
template<typename X , typename Y >
friend class internal::broadcast_cache
friend

Definition at line 537 of file _flow_graph_join_impl.h.

◆ internal::round_robin_cache

template<typename T >
template<typename X , typename Y >
friend class internal::round_robin_cache
friend

Definition at line 538 of file _flow_graph_join_impl.h.

◆ run_and_put_task

template<typename T >
template<typename R , typename B >
friend class run_and_put_task
friend

Definition at line 536 of file _flow_graph_join_impl.h.

Member Data Documentation

◆ my_aggregator

◆ my_join


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.