Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F86223677
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, 01:32
Size
1 KB
Mime Type
text/x-c
Expires
Mon, Oct 7, 01:32 (1 d, 22 h)
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