MADNESS  version 0.9
Public Member Functions | Public Attributes | Protected Member Functions | List of all members
madness::WorldObject< Derived > Class Template Reference

Implements most parts of a globally addressable object (via unique ID) More...

#include <worldam.h>

Inheritance diagram for madness::WorldObject< Derived >:
Inheritance graph
[legend]
Collaboration diagram for madness::WorldObject< Derived >:
Collaboration graph
[legend]

Public Member Functions

 WorldObject (World &world)
 Associates object with globally unique ID. More...
 
const uniqueidTid () const
 Returns the globally unique object ID. More...
 
Worldget_world () const
 Returns a reference to the world. More...
 
template<typename memfnT >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn) const
 
template<typename memfnT , typename a1T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, const a1T &a1) const
 
template<typename memfnT , typename a1T , typename a2T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2) const
 
template<typename memfnT , typename a1T , typename a2T , typename a3T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3) const
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4) const
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5) const
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6) const
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7) const
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, 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
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T , typename a9T >
detail::task_result_type
< memfnT >::futureT 
send (ProcessID dest, memfnT memfn, 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
 
template<typename memfnT >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, const TaskAttributes &attr=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7,a8,a9)". More...
 
template<typename memfnT , typename a1T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, const a1T &a1, const TaskAttributes &attr=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1)". More...
 
template<typename memfnT , typename a1T , typename a2T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const TaskAttributes &attr=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2)". More...
 
template<typename memfnT , typename a1T , typename a2T , typename a3T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const TaskAttributes &attr=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3)". More...
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const TaskAttributes &attr=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4)". More...
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const TaskAttributes &attr=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5)". More...
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const TaskAttributes &attr=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6)". More...
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const TaskAttributes &attr=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7)". More...
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, 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=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7,a8)". More...
 
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T , typename a9T >
detail::task_result_type
< memfnT >::futureT 
task (ProcessID dest, memfnT memfn, 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=TaskAttributes()) const
 Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7,a8,a9)". More...
 
virtual ~WorldObject ()
 

Public Attributes

Worldworld
 Think globally act locally. More...
 

Protected Member Functions

void process_pending ()
 To be called from derived constructor to process pending messages. More...
 

Detailed Description

template<class Derived>
class madness::WorldObject< Derived >

Implements most parts of a globally addressable object (via unique ID)

1) Derived class has WorldObject<Derived> as a public base class 2) Derived constructor a) invokes WorldObject<Derived>(world) constructor b) invokes process_pending() 3) Derived destructor must either be deferred or preceeded by gop.fence() 4) Derived class must have at least one virtual function for serialization of derived class pointers to be cast to the appropriate type.

This class is deliberately not default constructible and does not support assignment or copying. This ensures that each instance is unique. Have a look at the WorldContainer for an example of wrapping this using the PIMPL idiom and a shared pointer.

Note that world is exposed for convenience as a public data member.

Constructor & Destructor Documentation

template<class Derived>
madness::WorldObject< Derived >::WorldObject ( World world)
inline

Associates object with globally unique ID.

!! The derived class MUST call process_pending both to process any messages that arrived prior to construction and to enable processing of future messages.

template<class Derived>
virtual madness::WorldObject< Derived >::~WorldObject ( )
inlinevirtual

Member Function Documentation

template<class Derived>
World& madness::WorldObject< Derived >::get_world ( ) const
inline

Returns a reference to the world.

template<class Derived>
const uniqueidT& madness::WorldObject< Derived >::id ( ) const
inline

Returns the globally unique object ID.

Referenced by madness::WorldContainer< keyT, nodeT >::id().

template<class Derived>
void madness::WorldObject< Derived >::process_pending ( )
inlineprotected

To be called from derived constructor to process pending messages.

Cannot call this from the WorldObject constructor since the derived class would not yet be fully constructed.

!! No incoming messages are processed until this routine is invoked so the Derived class may rely upon well defined state until this routine is invoked.

Referenced by madness::WorldContainer< keyT, nodeT >::process_pending().

template<class Derived>
template<typename memfnT >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T , typename a2T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const a6T &  a6 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const a6T &  a6,
const a7T &  a7 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
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
inline
template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T , typename a9T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::send ( ProcessID  dest,
memfnT  memfn,
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
inline
template<class Derived>
template<typename memfnT >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
const TaskAttributes attr = TaskAttributes() 
) const
inline
template<class Derived>
template<typename memfnT , typename a1T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const TaskAttributes attr = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1)".

template<class Derived>
template<typename memfnT , typename a1T , typename a2T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const TaskAttributes attr = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1,a2)".

template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const TaskAttributes attr = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3)".

template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const TaskAttributes attr = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4)".

template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const TaskAttributes attr = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5)".

template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const a6T &  a6,
const TaskAttributes attr = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6)".

template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
const a1T &  a1,
const a2T &  a2,
const a3T &  a3,
const a4T &  a4,
const a5T &  a5,
const a6T &  a6,
const a7T &  a7,
const TaskAttributes attr = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7)".

template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
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 = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7,a8)".

template<class Derived>
template<typename memfnT , typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T , typename a9T >
detail::task_result_type<memfnT>::futureT madness::WorldObject< Derived >::task ( ProcessID  dest,
memfnT  memfn,
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 = TaskAttributes() 
) const
inline

Sends task to derived class method "returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7,a8,a9)".

Member Data Documentation

template<class Derived>
World& madness::WorldObject< Derived >::world

Think globally act locally.

Referenced by madness::WorldContainer< keyT, nodeT >::get_world().


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