Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F86233804
BackendFactory.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Oct 5, 03:33
Size
1 KB
Mime Type
text/x-c
Expires
Mon, Oct 7, 03:33 (2 d)
Engine
blob
Format
Raw Data
Handle
21375641
Attached To
R6622 liboncilla
BackendFactory.h
View Options
/**
* \file BackendFactory.h
*
* \date Jun 21, 2012
* \author Alexandre Tuleu
*/
#ifndef LIBONCILLA_BACKENDFACTORY_H_
#define LIBONCILLA_BACKENDFACTORY_H_
#include <map>
#include <tr1/memory>
namespace rci{
namespace oncilla{
class OncillaSynchronizer;
typedef std::tr1::shared_ptr<OncillaSynchronizer> OncillaSynchronizerPtr;
class BackendFactory {
public :
/**
* define the priority of the backend
*/
enum Priority{
HARDWARE = 0,
SIMULATION = 1,
USER_DEFINED_PRIORITY = 2
};
/**
* Pointer to a function that will be the entry of the Backend.
*/
typedef OncillaSynchronizerPtr (*EntryPtr)();
static BackendFactory & Instance();
/**
* Register a new backend.
* \param p the Priority of the backend
* \param entry the EntryPtr of the backend
* \warning : if a backend with the same priority is already here, the call
* will be silently discarded.
*/
void RegisterBackend(Priority p, EntryPtr entry);
/**
* \return the EntryPtr of the highest priority backend or 0 if none was
* registered with RegisterBackend().
*/
EntryPtr HighestPriorityBackend() const;
private:
typedef std::map<Priority,EntryPtr> EntryByPriority;
EntryByPriority d_entries;
};
template <typename OncillaSynchronizerSubClass , BackendFactory::Priority P>
class BackendRegistrator {
public :
BackendRegistrator();
};
template <class OncillaSynchronizerSubClass , BackendFactory::Priority P>
inline
BackendRegistrator<OncillaSynchronizerSubClass , P>::BackendRegistrator(){
BackendFactory::Instance().RegisterBackend(P,
&(OncillaSynchronizerSubClass::Create));
}
#define LIBONCILLA_REGISTER_THIS_CLASS(ClassName,PriorityValue) public :\
static rci::oncilla::OncillaSynchronizerPtr Create();\
private :\
rci::oncilla::BackendRegistrator < ClassName , PriorityValue > s_registrator;
#endif // LIBONCILLA_BACKENDFACTORY_H_
}
}
Event Timeline
Log In to Comment