internal::predecessor_cache< T, M > Class Template Reference

A cache of predecessors that only supports try_get. More...

`#include <_flow_graph_cache_impl.h>`

Inheritance diagram for internal::predecessor_cache< T, M >:
Collaboration diagram for internal::predecessor_cache< T, M >:

## Public Types

typedef M | mutex_type
typedef T | output_type
typedef sender< output_type > | predecessor_type
typedef receiver< output_type > | successor_type
Public Types inherited from internal::node_cache< sender< T >, M >
typedef size_t | size_type

## Public Member Functions

| predecessor_cache ()
void | set_owner (successor_type *owner)
bool | get_item (output_type &v)
void | reset ()
Public Member Functions inherited from internal::node_cache< sender< T >, M >
bool | empty ()
void | add (sender< T > &n)
void | remove (sender< T > &n)
void | clear ()

## Protected Attributes

successor_type * | my_owner
Protected Attributes inherited from internal::node_cache< sender< T >, M >
mutex_type | my_mutex
std::queue< sender< T > * > | my_q

## Additional Inherited Members

Protected Types inherited from internal::node_cache< sender< T >, M >
typedef M | mutex_type
Protected Member Functions inherited from internal::node_cache< sender< T >, M >
bool | internal_empty ()
size_type | internal_size ()
void | internal_push (sender< T > &n)
sender< T > & | internal_pop ()

## Detailed Description

### template<typename T, typename M = spin_mutex>
class internal::predecessor_cache< T, M >

A cache of predecessors that only supports try_get.

Definition at line 126 of file _flow_graph_cache_impl.h.

## Member Typedef Documentation

## mutex_type

template<typename T, typename M = spin_mutex>

typedef M internal::predecessor_cache< T, M >::mutex_type

Definition at line 129 of file _flow_graph_cache_impl.h.

## output_type

template<typename T, typename M = spin_mutex>

typedef T internal::predecessor_cache< T, M >::output_type

Definition at line 130 of file _flow_graph_cache_impl.h.

## predecessor_type

template<typename T, typename M = spin_mutex>

typedef sender<output_type> internal::predecessor_cache< T, M >::predecessor_type

Definition at line 135 of file _flow_graph_cache_impl.h.

## successor_type

template<typename T, typename M = spin_mutex>

typedef receiver<output_type> internal::predecessor_cache< T, M >::successor_type

Definition at line 136 of file _flow_graph_cache_impl.h.

## Constructor & Destructor Documentation

## predecessor_cache()

template<typename T, typename M = spin_mutex>

internal::predecessor_cache< T, M >::predecessor_cache | ( |  | ) |

inline

Definition at line 139 of file _flow_graph_cache_impl.h.

: my_owner( NULL ) { }

## Member Function Documentation

## get_item()

template<typename T, typename M = spin_mutex>

bool internal::predecessor_cache< T, M >::get_item | ( | output_type & | v | ) |

inline

Definition at line 143 of file _flow_graph_cache_impl.h.

{
bool msg = false;
do {
predecessor_type *src;
{
typename mutex_type::scoped_lock lock(this->my_mutex);
if ( this->internal_empty() ) {
break;
}
src = &this->internal_pop();
}
// Try to get from this sender
msg = src->try_get( v );
if (msg == false) {
// Relinquish ownership of the edge
if (my_owner)
src->register_successor( *my_owner );
} else {
// Retain ownership of the edge
this->add(*src);
}
} while ( msg == false );
return msg;
}

Referenced by internal::function_input_base< Input, Policy, Allocator, multifunction_input< Input, internal::wrap_tuple_elements< tbb::flow::tuple_size< Output >::value, internal::multifunction_output, Output >::type, Policy, Allocator > >::perform_queued_requests().

Here is the caller graph for this function:

## reset()

template<typename T, typename M = spin_mutex>

void internal::predecessor_cache< T, M >::reset | ( |  | ) |

inline

Definition at line 173 of file _flow_graph_cache_impl.h.

{
if (my_owner) {
for(;;) {
predecessor_type *src;
{
if (this->internal_empty()) break;
src = &this->internal_pop();
}
src->register_successor( *my_owner );
}
}
}

Referenced by internal::reservable_predecessor_cache< T, null_mutex >::reset(), and internal::function_input_base< Input, Policy, Allocator, multifunction_input< Input, internal::wrap_tuple_elements< tbb::flow::tuple_size< Output >::value, internal::multifunction_output, Output >::type, Policy, Allocator > >::reset_receiver().

Here is the caller graph for this function:

## set_owner()

template<typename T, typename M = spin_mutex>

void internal::predecessor_cache< T, M >::set_owner | ( | successor_type * | owner | ) |

inline

Definition at line 141 of file _flow_graph_cache_impl.h.

{ my_owner = owner; }

Referenced by internal::function_input_base< Input, Policy, Allocator, multifunction_input< Input, internal::wrap_tuple_elements< tbb::flow::tuple_size< Output >::value, internal::multifunction_output, Output >::type, Policy, Allocator > >::function_input_base(), and internal::reserving_port< T >::reserving_port().

Here is the caller graph for this function:

## Member Data Documentation

## my_owner

template<typename T, typename M = spin_mutex>

successor_type* internal::predecessor_cache< T, M >::my_owner

protected

Definition at line 191 of file _flow_graph_cache_impl.h.

Referenced by internal::predecessor_cache< input_type, null_mutex >::get_item(), internal::successor_cache< continue_msg, M >::register_successor(), internal::successor_cache< continue_msg, M >::remove_successor(), internal::predecessor_cache< input_type, null_mutex >::reset(), internal::predecessor_cache< input_type, null_mutex >::set_owner(), internal::successor_cache< output_type, null_rw_mutex >::set_owner(), internal::successor_cache< continue_msg, M >::set_owner(), and internal::reservable_predecessor_cache< T, null_mutex >::try_reserve().

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

- _flow_graph_cache_impl.h

internal::node_cache< sender< T >, M >::add
void add(sender< T > &n)
Definition: _flow_graph_cache_impl.h:40
internal::node_cache< sender< T >, M >::internal_empty
bool internal_empty()
Definition: _flow_graph_cache_impl.h:97
internal::node_cache< sender< T >, M >::internal_pop
sender< T > & internal_pop()
Definition: _flow_graph_cache_impl.h:112
internal::node_cache< sender< T >, M >::my_mutex
mutex_type my_mutex
Definition: _flow_graph_cache_impl.h:90
lock
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 * lock
Definition: ittnotify_static.h:121
internal::predecessor_cache::my_owner
successor_type * my_owner
Definition: _flow_graph_cache_impl.h:191
internal::predecessor_cache::predecessor_type
sender< output_type > predecessor_type
Definition: _flow_graph_cache_impl.h:135

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.