MADNESS  version 0.9
Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | List of all members
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T > Struct Template Reference

Wrap a callable object and its arguments into a task function. More...

#include <taskfn.h>

Inheritance diagram for madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >:
Inheritance graph
[legend]
Collaboration diagram for madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >:
Collaboration graph
[legend]

Public Types

typedef fnT functionT
 The task function type. More...
 
typedef
detail::task_result_type< fnT >
::resultT 
resultT
 The result type of the function. More...
 
typedef
detail::task_result_type< fnT >
::futureT 
futureT
 

Public Member Functions

 TaskFn (const futureT &result, functionT func, const TaskAttributes &attr)
 
template<typename a1T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const TaskAttributes &attr)
 
template<typename a1T , typename a2T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const a2T &a2, const TaskAttributes &attr=TaskAttributes())
 
template<typename a1T , typename a2T , typename a3T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const a2T &a2, const a3T &a3, const TaskAttributes &attr)
 
template<typename a1T , typename a2T , typename a3T , typename a4T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const TaskAttributes &attr)
 
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const TaskAttributes &attr)
 
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const TaskAttributes &attr)
 
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const TaskAttributes &attr)
 
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const a8T &a8, const TaskAttributes &attr)
 
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T , typename a9T >
 TaskFn (const futureT &result, functionT func, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const a8T &a8, const a9T &a9, const TaskAttributes &attr)
 
 TaskFn (const futureT &result, functionT func, const TaskAttributes &attr, archive::BufferInputArchive &input_arch)
 
virtual ~TaskFn ()
 
const futureTresult () const
 
- Public Member Functions inherited from madness::TaskInterface
 TaskInterface (int ndepend=0, const TaskAttributes attr=TaskAttributes())
 Create a new task with ndepend dependencies (default 0) and given attributes. More...
 
 TaskInterface (const TaskAttributes &attr)
 Create a new task with zero dependencies and given attributes. More...
 
virtual void run (World &)
 Runs a single-threaded task ... derived classes must implement this. More...
 
virtual void run (World &world, const TaskThreadEnv &env)
 Runs a multi-threaded task. More...
 
Worldget_world () const
 
virtual ~TaskInterface ()
 
- Public Member Functions inherited from madness::PoolTaskInterface
 PoolTaskInterface ()
 
 PoolTaskInterface (const TaskAttributes &attr)
 
void set_nthread (int nthread)
 Call this to reset the number of threads before the task is submitted. More...
 
virtual ~PoolTaskInterface ()
 
- Public Member Functions inherited from madness::TaskAttributes
 TaskAttributes (unsigned long flags=0)
 
 TaskAttributes (const TaskAttributes &attr)
 
virtual ~TaskAttributes ()
 
bool is_generator () const
 
bool is_stealable () const
 
bool is_high_priority () const
 
void set_generator (bool generator_hint)
 
void set_stealable (bool stealable)
 
void set_highpriority (bool hipri)
 
void set_nthread (int nthread)
 Are you sure this is what you want to call? More...
 
int get_nthread () const
 
template<typename Archive >
void serialize (Archive &ar)
 
- Public Member Functions inherited from madness::DependencyInterface
 DependencyInterface (int ndep=0)
 
int ndep () const
 Returns the number of unsatisfied dependencies. More...
 
bool probe () const
 Returns true if ndepend == 0. More...
 
void notify ()
 Invoked by callbacks to notifiy of dependencies being satisfied. More...
 
void register_callback (CallbackInterface *callback)
 Registers a callback for when ndepend==0 , immediately invoked if ndepend==0. More...
 
void inc ()
 Increment the number of dependencies. More...
 
void dec ()
 Decrement the number of dependencies and invoke callback if ndepend=0. More...
 
virtual ~DependencyInterface ()
 
- Public Member Functions inherited from madness::CallbackInterface
virtual ~CallbackInterface ()
 

Static Public Attributes

static const unsigned int arity
 
- Static Public Attributes inherited from madness::TaskInterface
static bool debug = false
 
- Static Public Attributes inherited from madness::TaskAttributes
static const unsigned long NTHREAD = 0xff
 
static const unsigned long GENERATOR = 1ul<<8
 
static const unsigned long STEALABLE = GENERATOR<<1
 
static const unsigned long HIGHPRIORITY = GENERATOR<<2
 

Protected Member Functions

virtual void run (const TaskThreadEnv &env)
 Override this method to implement a multi-threaded task. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from madness::PoolTaskInterface
static void operator delete (void *p, std::size_t size) throw ()
 Destroy task object. More...
 
- Static Public Member Functions inherited from madness::TaskAttributes
static TaskAttributes generator ()
 
static TaskAttributes hipri ()
 
static TaskAttributes multi_threaded (int nthread)
 
- Static Protected Member Functions inherited from madness::PoolTaskInterface
template<typename fnT >
static enable_if_c
< detail::function_traits< fnT >
::value||detail::memfunc_traits
< fnT >::value >::type 
make_id (std::pair< void *, unsigned short > &id, fnT fn)
 
template<typename fnobjT >
static disable_if_c
< detail::function_traits
< fnobjT >::value||detail::memfunc_traits
< fnobjT >::value >::type 
make_id (std::pair< void *, unsigned short > &id, const fnobjT &)
 

Detailed Description

template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
struct madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >

Wrap a callable object and its arguments into a task function.

The callable object may have up to 10 arguments

Member Typedef Documentation

template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
typedef fnT madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::functionT

The task function type.

template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
typedef detail::task_result_type<fnT>::futureT madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::futureT
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
typedef detail::task_result_type<fnT>::resultT madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::resultT

The result type of the function.

Constructor & Destructor Documentation

template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T , typename a2T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const a2T &  a2,
const TaskAttributes attr = TaskAttributes() 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T , typename a2T , typename a3T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T , typename a2T , typename a3T , typename a4T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const a6T &  a6,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const a6T &  a6,
const a7T &  a7,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const a6T &  a6,
const a7T &  a7,
const a8T &  a8,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T , typename a9T >
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const a6T &  a6,
const a7T &  a7,
const a8T &  a8,
const a9T &  a9,
const TaskAttributes attr 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn ( const futureT result,
functionT  func,
const TaskAttributes attr,
archive::BufferInputArchive input_arch 
)
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
virtual madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::~TaskFn ( )
inlinevirtual

Member Function Documentation

template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
const futureT& madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::result ( ) const
inline
template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
virtual void madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run ( const TaskThreadEnv info)
inlineprotectedvirtual

Override this method to implement a multi-threaded task.

info.nthread() will be the number of threads collaborating on this task

info.id() will be the index of the current thread id=0,...,nthread-1

info.barrier() will be a barrier for all of the threads, and returns true for the last thread to enter the barrier (other threads get false)

Reimplemented from madness::TaskInterface.

References madness::detail::run_function().

Member Data Documentation

template<typename fnT, typename arg1T = void, typename arg2T = void, typename arg3T = void, typename arg4T = void, typename arg5T = void, typename arg6T = void, typename arg7T = void, typename arg8T = void, typename arg9T = void>
const unsigned int madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arity
static
Initial value:
= detail::ArgCount<arg1T, arg2T, arg3T,
arg4T, arg5T, arg6T, arg7T, arg8T, arg9T>::value

The number of arguments given for the function

Note
This may not match the arity of the function if it has default parameter values

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