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

#include <_flow_graph_join_impl.h>

Inheritance diagram for internal::key_matching_port< TraitsType >:
Collaboration diagram for internal::key_matching_port< TraitsType >:

Classes

class  key_matching_port_operation
 

Public Types

typedef TraitsType traits
 
typedef key_matching_port< traitsclass_type
 
typedef TraitsType::T input_type
 
typedef TraitsType::K key_type
 
typedef tbb::internal::strip< key_type >::type noref_key_type
 
typedef receiver< input_type >::predecessor_type predecessor_type
 
typedef TraitsType::TtoK type_to_key_func_type
 
typedef TraitsType::KHash hash_compare_type
 
typedef hash_buffer< key_type, input_type, type_to_key_func_type, hash_compare_typebuffer_type
 
- Public Types inherited from tbb::flow::interface10::receiver< TraitsType::T >
typedef TraitsType::T input_type
 The input type of this receiver. More...
 
typedef internal::async_helpers< TraitsType::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::internal::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >
typedef TraitsType::T value_type
 
typedef buffer_element_type< value_type >::type element_type
 
typedef value_typepointer_type
 
typedef element_typelist_array_type
 
typedef list_array_typepointer_array_type
 
typedef tbb::cache_aligned_allocator< typename aligned_pair< TraitsType::T, void * >::type > ::template rebind< list_array_type >::other pointer_array_allocator_type
 
typedef tbb::cache_aligned_allocator< typename aligned_pair< TraitsType::T, void * >::type > ::template rebind< element_type >::other elements_array_allocator
 
typedef tbb::internal::strip< TraitsType::K >::type Knoref
 

Public Member Functions

 key_matching_port ()
 
 key_matching_port (const key_matching_port &)
 
 ~key_matching_port ()
 
void set_join_node_pointer (forwarding_base *join)
 
void set_my_key_func (type_to_key_func_type *f)
 
type_to_key_func_typeget_my_key_func ()
 
bool get_item (input_type &v)
 
void reset_port ()
 
void reset_receiver (reset_flags f) __TBB_override
 
- Public Member Functions inherited from tbb::flow::interface10::receiver< TraitsType::T >
bool try_put (const typename internal::async_helpers< TraitsType::T >::filtered_type &t)
 Put an item to the receiver. More...
 
bool try_put (const typename internal::async_helpers< TraitsType::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::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >
 hash_buffer ()
 
 ~hash_buffer ()
 
void reset ()
 
void set_key_func (TraitsType::TtoK *vtk)
 
TraitsType::TtoK * get_key_func ()
 
bool insert_with_key (const value_type &v)
 
bool find_ref_with_key (const Knoref &k, pointer_type &v)
 
bool find_with_key (const Knoref &k, value_type &v)
 
void delete_with_key (const Knoref &k)
 

Protected Member Functions

tasktry_put_task (const input_type &v) __TBB_override
 Put item to successor; return task to run the successor if possible. More...
 
graph & graph_reference () __TBB_override
 
- Protected Member Functions inherited from tbb::flow::interface10::receiver< TraitsType::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 void reset_receiver (reset_flags f=rf_reset_protocol)=0
 put receiver back in initial state More...
 
virtual bool is_continue_receiver ()
 

Private Types

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

Private Member Functions

void handle_operations (key_matching_port_operation *op_list)
 

Private Attributes

aggregator< handler_type, key_matching_port_operationmy_aggregator
 
matching_forwarding_base< key_type > * my_join
 

Friends

class internal::aggregating_functor< class_type, key_matching_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

- Static Public Attributes inherited from tbb::flow::interface10::internal::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >
static const size_t INITIAL_SIZE
 

Detailed Description

template<class TraitsType>
class internal::key_matching_port< TraitsType >

Definition at line 656 of file _flow_graph_join_impl.h.

Member Typedef Documentation

◆ buffer_type

Definition at line 669 of file _flow_graph_join_impl.h.

◆ class_type

template<class TraitsType >
typedef key_matching_port<traits> internal::key_matching_port< TraitsType >::class_type

Definition at line 662 of file _flow_graph_join_impl.h.

◆ handler_type

template<class TraitsType >
typedef internal::aggregating_functor<class_type, key_matching_port_operation> internal::key_matching_port< TraitsType >::handler_type
private

Definition at line 704 of file _flow_graph_join_impl.h.

◆ hash_compare_type

template<class TraitsType >
typedef TraitsType::KHash internal::key_matching_port< TraitsType >::hash_compare_type

Definition at line 668 of file _flow_graph_join_impl.h.

◆ input_type

template<class TraitsType >
typedef TraitsType::T internal::key_matching_port< TraitsType >::input_type

Definition at line 663 of file _flow_graph_join_impl.h.

◆ key_type

template<class TraitsType >
typedef TraitsType::K internal::key_matching_port< TraitsType >::key_type

Definition at line 664 of file _flow_graph_join_impl.h.

◆ noref_key_type

template<class TraitsType >
typedef tbb::internal::strip<key_type>::type internal::key_matching_port< TraitsType >::noref_key_type

Definition at line 665 of file _flow_graph_join_impl.h.

◆ predecessor_type

template<class TraitsType >
typedef receiver<input_type>::predecessor_type internal::key_matching_port< TraitsType >::predecessor_type

Definition at line 666 of file _flow_graph_join_impl.h.

◆ traits

template<class TraitsType >
typedef TraitsType internal::key_matching_port< TraitsType >::traits

Definition at line 661 of file _flow_graph_join_impl.h.

◆ type_to_key_func_type

template<class TraitsType >
typedef TraitsType::TtoK internal::key_matching_port< TraitsType >::type_to_key_func_type

Definition at line 667 of file _flow_graph_join_impl.h.

Member Enumeration Documentation

◆ op_stat

◆ op_type

template<class TraitsType >
enum internal::key_matching_port::op_type
private
Enumerator
try__put 
get__item 
res_port 

Definition at line 677 of file _flow_graph_join_impl.h.

678 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
679  , add_blt_pred, del_blt_pred, blt_pred_cnt, blt_pred_cpy
680 #endif
681  };

Constructor & Destructor Documentation

◆ key_matching_port() [1/2]

template<class TraitsType >
internal::key_matching_port< TraitsType >::key_matching_port ( )
inline

Definition at line 776 of file _flow_graph_join_impl.h.

776  : receiver<input_type>(), buffer_type() {
777  my_join = NULL;
778  my_aggregator.initialize_handler(handler_type(this));
779  }
hash_buffer< key_type, input_type, type_to_key_func_type, hash_compare_type > buffer_type
matching_forwarding_base< key_type > * my_join
internal::aggregating_functor< class_type, key_matching_port_operation > handler_type
aggregator< handler_type, key_matching_port_operation > my_aggregator

References internal::key_matching_port< TraitsType >::my_aggregator, and internal::key_matching_port< TraitsType >::my_join.

◆ key_matching_port() [2/2]

template<class TraitsType >
internal::key_matching_port< TraitsType >::key_matching_port ( const key_matching_port< TraitsType > &  )
inline

Definition at line 782 of file _flow_graph_join_impl.h.

782  : receiver<input_type>(), buffer_type() {
783  my_join = NULL;
784  my_aggregator.initialize_handler(handler_type(this));
785  }
hash_buffer< key_type, input_type, type_to_key_func_type, hash_compare_type > buffer_type
matching_forwarding_base< key_type > * my_join
internal::aggregating_functor< class_type, key_matching_port_operation > handler_type
aggregator< handler_type, key_matching_port_operation > my_aggregator

References internal::key_matching_port< TraitsType >::my_aggregator, and internal::key_matching_port< TraitsType >::my_join.

◆ ~key_matching_port()

template<class TraitsType >
internal::key_matching_port< TraitsType >::~key_matching_port ( )
inline

Definition at line 787 of file _flow_graph_join_impl.h.

787 { }

Member Function Documentation

◆ get_item()

template<class TraitsType >
bool internal::key_matching_port< TraitsType >::get_item ( input_type v)
inline

Definition at line 797 of file _flow_graph_join_impl.h.

797  {
798  // aggregator uses current_key from FE for Key
799  key_matching_port_operation op_data(&v, get__item);
800  my_aggregator.execute(&op_data);
801  return op_data.status == SUCCEEDED;
802  }
aggregator< handler_type, key_matching_port_operation > my_aggregator

References internal::key_matching_port< TraitsType >::get__item, internal::key_matching_port< TraitsType >::my_aggregator, and internal::key_matching_port< TraitsType >::SUCCEEDED.

◆ get_my_key_func()

template<class TraitsType >
type_to_key_func_type* internal::key_matching_port< TraitsType >::get_my_key_func ( )
inline

Definition at line 795 of file _flow_graph_join_impl.h.

References tbb::flow::interface10::internal::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >::get_key_func().

Here is the call graph for this function:

◆ graph_reference()

template<class TraitsType >
graph& internal::key_matching_port< TraitsType >::graph_reference ( )
inlineprotectedvirtual

◆ handle_operations()

template<class TraitsType >
void internal::key_matching_port< TraitsType >::handle_operations ( key_matching_port_operation op_list)
inlineprivate

Definition at line 708 of file _flow_graph_join_impl.h.

708  {
709  key_matching_port_operation *current;
710  while(op_list) {
711  current = op_list;
712  op_list = op_list->next;
713  switch(current->type) {
714  case try__put: {
715  bool was_inserted = this->insert_with_key(current->my_val);
716  // return failure if a duplicate insertion occurs
717  __TBB_store_with_release(current->status, was_inserted ? SUCCEEDED : FAILED);
718  }
719  break;
720  case get__item:
721  // use current_key from FE for item
722  if(!this->find_with_key(my_join->current_key, *(current->my_arg))) {
723  __TBB_ASSERT(false, "Failed to find item corresponding to current_key.");
724  }
725  __TBB_store_with_release(current->status, SUCCEEDED);
726  break;
727  case res_port:
728  // use current_key from FE for item
730  __TBB_store_with_release(current->status, SUCCEEDED);
731  break;
732 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
733  case add_blt_pred:
734  my_built_predecessors.add_edge(*(current->pred));
735  __TBB_store_with_release(current->status, SUCCEEDED);
736  break;
737  case del_blt_pred:
738  my_built_predecessors.delete_edge(*(current->pred));
739  __TBB_store_with_release(current->status, SUCCEEDED);
740  break;
741  case blt_pred_cnt:
742  current->cnt_val = my_built_predecessors.edge_count();
743  __TBB_store_with_release(current->status, SUCCEEDED);
744  break;
745  case blt_pred_cpy:
746  my_built_predecessors.copy_edges(*(current->plist));
747  __TBB_store_with_release(current->status, SUCCEEDED);
748  break;
749 #endif
750  }
751  }
752  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
matching_forwarding_base< key_type > * my_join
void __TBB_store_with_release(volatile T &location, V value)
Definition: tbb_machine.h:717

References __TBB_ASSERT, tbb::internal::__TBB_store_with_release(), internal::matching_forwarding_base< KeyType >::current_key, tbb::flow::interface10::internal::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >::delete_with_key(), internal::key_matching_port< TraitsType >::FAILED, tbb::flow::interface10::internal::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >::find_with_key(), internal::key_matching_port< TraitsType >::get__item, tbb::flow::interface10::internal::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >::insert_with_key(), internal::key_matching_port< TraitsType >::key_matching_port_operation::my_arg, internal::key_matching_port< TraitsType >::my_join, internal::key_matching_port< TraitsType >::key_matching_port_operation::my_val, internal::key_matching_port< TraitsType >::res_port, internal::key_matching_port< TraitsType >::SUCCEEDED, internal::key_matching_port< TraitsType >::try__put, and internal::key_matching_port< TraitsType >::key_matching_port_operation::type.

Here is the call graph for this function:

◆ reset_port()

template<class TraitsType >
void internal::key_matching_port< TraitsType >::reset_port ( )
inline

Definition at line 834 of file _flow_graph_join_impl.h.

834  {
835  key_matching_port_operation op_data(res_port);
836  my_aggregator.execute(&op_data);
837  return;
838  }
aggregator< handler_type, key_matching_port_operation > my_aggregator

References internal::key_matching_port< TraitsType >::my_aggregator, and internal::key_matching_port< TraitsType >::res_port.

◆ reset_receiver()

template<class TraitsType >
void internal::key_matching_port< TraitsType >::reset_receiver ( reset_flags  f)
inline

Definition at line 846 of file _flow_graph_join_impl.h.

846  {
849 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
850  if (f & rf_clear_edges)
851  my_built_predecessors.clear();
852 #endif
853  }
void suppress_unused_warning(const T1 &)
Utility template function to prevent "unused" warnings by various compilers.
Definition: tbb_stddef.h:381

References hash_buffer< Key, ValueType, ValueToKey, HashCompare, Allocator >::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<class TraitsType >
void internal::key_matching_port< TraitsType >::set_join_node_pointer ( forwarding_base join)
inline

Definition at line 789 of file _flow_graph_join_impl.h.

789  {
790  my_join = dynamic_cast<matching_forwarding_base<key_type>*>(join);
791  }
matching_forwarding_base< key_type > * my_join

References internal::key_matching_port< TraitsType >::my_join.

◆ set_my_key_func()

template<class TraitsType >
void internal::key_matching_port< TraitsType >::set_my_key_func ( type_to_key_func_type f)
inline

Definition at line 793 of file _flow_graph_join_impl.h.

References tbb::flow::interface10::internal::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >::set_key_func().

Here is the call graph for this function:

◆ try_put_task()

template<class TraitsType >
task* internal::key_matching_port< TraitsType >::try_put_task ( const input_type t)
inlineprotectedvirtual

Put item to successor; return task to run the successor if possible.

Implements tbb::flow::interface10::receiver< TraitsType::T >.

Definition at line 758 of file _flow_graph_join_impl.h.

758  {
759  key_matching_port_operation op_data(v, try__put);
760  task *rtask = NULL;
761  my_aggregator.execute(&op_data);
762  if(op_data.status == SUCCEEDED) {
763  rtask = my_join->increment_key_count((*(this->get_key_func()))(v), false); // may spawn
764  // rtask has to reflect the return status of the try_put
765  if(!rtask) rtask = SUCCESSFULLY_ENQUEUED;
766  }
767  return rtask;
768  }
static tbb::task *const SUCCESSFULLY_ENQUEUED
matching_forwarding_base< key_type > * my_join
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
virtual task * increment_key_count(current_key_type const &, bool)=0
aggregator< handler_type, key_matching_port_operation > my_aggregator

References tbb::flow::interface10::internal::hash_buffer< TraitsType::K, TraitsType::T, TraitsType::TtoK, TraitsType::KHash >::get_key_func(), internal::matching_forwarding_base< KeyType >::increment_key_count(), internal::key_matching_port< TraitsType >::my_aggregator, internal::key_matching_port< TraitsType >::my_join, internal::key_matching_port< TraitsType >::SUCCEEDED, tbb::flow::internal::SUCCESSFULLY_ENQUEUED, task, and internal::key_matching_port< TraitsType >::try__put.

Here is the call graph for this function:

Friends And Related Function Documentation

◆ internal::aggregating_functor< class_type, key_matching_port_operation >

template<class TraitsType >
friend class internal::aggregating_functor< class_type, key_matching_port_operation >
friend

Definition at line 705 of file _flow_graph_join_impl.h.

◆ internal::broadcast_cache

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

Definition at line 756 of file _flow_graph_join_impl.h.

◆ internal::round_robin_cache

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

Definition at line 757 of file _flow_graph_join_impl.h.

◆ run_and_put_task

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

Definition at line 755 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.