PFUNC  1.0
Public Types | Public Member Functions | Public Attributes
pfunc::detail::task_queue_set< lifoS, ValueType > Struct Template Reference

#include <pfunc/lifo.hpp>

List of all members.

Public Types

typedef std::stack< ValueType * > queue_type
typedef queue_type::value_type value_type
typedef unsigned int queue_index_type
typedef task_queue_set_data
< queue_type
data_type

Public Member Functions

 task_queue_set (unsigned int num_queues) PFUNC_CONSTRUCTOR_TRY_BLOCK()
 ~task_queue_set ()
template<typename TaskPredicatePair >
bool test_and_get (queue_index_type queue_num, const TaskPredicatePair &cnd, value_type &value, bool own_queue)
template<typename TaskPredicatePair >
value_type get (queue_index_type queue_num, const TaskPredicatePair &cnd)
void put (queue_index_type queue_num, const value_type &value)

Public Attributes

ALIGN128 data_typedata
ALIGN128 unsigned int num_queues

Detailed Description

template<typename ValueType>
struct pfunc::detail::task_queue_set< lifoS, ValueType >

Specialization of task_queue_set for LIFO queues.


Member Typedef Documentation

template<typename ValueType >
typedef task_queue_set_data<queue_type> pfunc::detail::task_queue_set< lifoS, ValueType >::data_type
template<typename ValueType >
typedef unsigned int pfunc::detail::task_queue_set< lifoS, ValueType >::queue_index_type

type to index into the queue

template<typename ValueType >
typedef std::stack<ValueType*> pfunc::detail::task_queue_set< lifoS, ValueType >::queue_type

queue type

template<typename ValueType >
typedef queue_type::value_type pfunc::detail::task_queue_set< lifoS, ValueType >::value_type

value type


Constructor & Destructor Documentation

template<typename ValueType >
pfunc::detail::task_queue_set< lifoS, ValueType >::task_queue_set ( unsigned int  num_queues) [inline]

Constructor

Parameters:
[in]num_queuesNumber of task queues to create.
template<typename ValueType >
pfunc::detail::task_queue_set< lifoS, ValueType >::~task_queue_set ( ) [inline]

Destructor


Member Function Documentation

template<typename ValueType >
template<typename TaskPredicatePair >
value_type pfunc::detail::task_queue_set< lifoS, ValueType >::get ( queue_index_type  queue_num,
const TaskPredicatePair &  cnd 
) [inline]

Get a suitable task from the queue. First, we check if a task can be retrieved from the task queue passed to us. If not, we check every other task queue for a task (this constitues a steal).

Parameters:
[in]queue_numThe first queue to check on.
[in]cndThe predicate to be satisfied.
Returns:
value_type The retrieved task if found.
NULL If no suitable task is found.
template<typename ValueType >
void pfunc::detail::task_queue_set< lifoS, ValueType >::put ( queue_index_type  queue_num,
const value_type value 
) [inline]

Store the value at the front of the given queue

Parameters:
[in]queue_numThe task queue to use.
[in]valueThe value (task ptr) to be stored.
template<typename ValueType >
template<typename TaskPredicatePair >
bool pfunc::detail::task_queue_set< lifoS, ValueType >::test_and_get ( queue_index_type  queue_num,
const TaskPredicatePair &  cnd,
value_type value,
bool  own_queue 
) [inline]

Check if there is something at the front of the given task queue that meets our predicate. If so, get it. Remember that the predicate is always true for LIFO. Its there simply so that we have the same interface with other scheduling policies that require a predicate.

Parameters:
[in]queue_numThe task queue to check for tasks.
[in]cndThe predicate to be satisfied.
[out]valueIf a suitable task is found, its put here.
[in]own_queueIs true if removing element from own_queue.
Returns:
true If a suitable task is found.
false If no suitable tasks could be found.

Member Data Documentation

template<typename ValueType >
ALIGN128 data_type* pfunc::detail::task_queue_set< lifoS, ValueType >::data

Holds all the data required

template<typename ValueType >
ALIGN128 unsigned int pfunc::detail::task_queue_set< lifoS, ValueType >::num_queues

Number of queues


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