Page MenuHomec4science

BackendFactory.h
No OneTemporary

File Metadata

Created
Wed, May 1, 01:10

BackendFactory.h

/**
* \file BackendFactory.h
*
* \date Jun 21, 2012
* \author Alexandre Tuleu
*/
#ifndef LIBONCILLA_BACKENDFACTORY_H_
#define LIBONCILLA_BACKENDFACTORY_H_
#include <map>
#include <boost/shared_ptr.hpp>
#include <iostream>
#include <string>
#include <set>
extern "C" {
typedef void (*liboncilla_backend_entry_fct)();
}
namespace rci{
namespace oncilla{
class OncillaSynchronizer;
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 OncillaSynchronizer * (*EntryPtr)();
static BackendFactory & Instance();
void AddAdditionalBackend(const std::string & name);
/**
* 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();
private:
typedef std::map<Priority,EntryPtr> EntryByPriority;
typedef std::set<std::string> SetOfBackendName;
typedef std::map<std::string,void*> ListOfLoadedBackend;
void LoadExternalBackend();
BackendFactory();
virtual ~BackendFactory();
EntryByPriority d_entries;
SetOfBackendName d_unloaded;
ListOfLoadedBackend d_loaded;
};
}
}
#endif // LIBONCILLA_BACKENDFACTORY_H_

Event Timeline