OpenWalnut 1.3.1
|
Class able to create a new copy of an arbitrary module. More...
#include <WModuleFactory.h>
Public Types | |
typedef std::set < boost::shared_ptr< WModule > > | PrototypeContainerType |
For shortening: a type defining a shared set of WModule pointers. | |
typedef std::set < boost::shared_ptr< WModule > >::const_iterator | PrototypeContainerConstIteratorType |
Const iterator for the prototype set. | |
typedef std::set < boost::shared_ptr< WModule > >::iterator | PrototypeContainerIteratorType |
Iterator for the prototype set. | |
typedef WSharedAssociativeContainer < PrototypeContainerType > | PrototypeSharedContainerType |
The alias for a shared container. | |
Public Member Functions | |
virtual | ~WModuleFactory () |
Destructor. | |
void | load () |
Loads the modules and creates prototypes. | |
boost::shared_ptr< WModule > | create (boost::shared_ptr< WModule > prototype) |
Create a new and initialized module using the specified prototype. | |
const boost::shared_ptr< WModule > | isPrototypeAvailable (std::string name) |
Searches a prototype by name. | |
const boost::shared_ptr< WModule > | getPrototypeByName (std::string name) |
Finds a prototype using the specified name. | |
const boost::shared_ptr< WModule > | getPrototypeByInstance (boost::shared_ptr< WModule > instance) |
Finds a prototype using an instance of a module. | |
std::vector< WModule::ConstSPtr > | getPrototypesByType (MODULE_TYPE type) |
Finds a prototype using an type. | |
PrototypeSharedContainerType::ReadTicket | getPrototypes () const |
This method gives read access to the list of all prototypes. | |
WCombinerTypes::WCompatiblesList | getCompatiblePrototypes (boost::shared_ptr< WModule > module=boost::shared_ptr< WModule >()) |
Returns a set of module combiners with module combinations compatible with the specified one. | |
WCombinerTypes::WCompatiblesList | getAllPrototypes () |
Creates a list of WApplyCombiner for all modules known by the factory. | |
Static Public Member Functions | |
static boost::shared_ptr < WModuleFactory > | getModuleFactory () |
Returns instance of the module factory to use to create modules. | |
template<typename T > | |
static bool | isA (boost::shared_ptr< WModule > module) |
Checks whether the first instance can be casted to the second one. | |
static void | initializeModule (boost::shared_ptr< WModule > module) |
This method uses a newly created instance of WModule and initializes it properly. | |
static bool | isPrototype (boost::shared_ptr< WModule > module) |
Checks whether the specified module is a prototype or an instantiated module. | |
Protected Member Functions | |
WModuleFactory () | |
Constructors are protected because this is a Singleton. | |
bool | checkPrototype (boost::shared_ptr< WModule > module, PrototypeSharedContainerType::ReadTicket ticket) |
Checks whether the specified module is a prototype or an instantiated module. | |
Protected Attributes | |
PrototypeSharedContainerType | m_prototypes |
The module prototypes available. | |
Private Attributes | |
WModuleLoader | m_moduleLoader |
Loader class managing dynamically loaded modules in OpenWalnut. | |
Static Private Attributes | |
static boost::shared_ptr < WModuleFactory > | m_instance = boost::shared_ptr< WModuleFactory >() |
Singleton instance of WModuleFactory. | |
Friends | |
class | WModuleFactoryTest |
Class able to create a new copy of an arbitrary module.
It uses the Factory and Prototype design pattern.
Definition at line 46 of file WModuleFactory.h.
typedef std::set< boost::shared_ptr< WModule > >::const_iterator WModuleFactory::PrototypeContainerConstIteratorType |
Const iterator for the prototype set.
Definition at line 58 of file WModuleFactory.h.
typedef std::set< boost::shared_ptr< WModule > >::iterator WModuleFactory::PrototypeContainerIteratorType |
Iterator for the prototype set.
Definition at line 63 of file WModuleFactory.h.
typedef std::set< boost::shared_ptr< WModule > > WModuleFactory::PrototypeContainerType |
For shortening: a type defining a shared set of WModule pointers.
Definition at line 53 of file WModuleFactory.h.
typedef WSharedAssociativeContainer< PrototypeContainerType > WModuleFactory::PrototypeSharedContainerType |
The alias for a shared container.
Definition at line 68 of file WModuleFactory.h.
WModuleFactory::~WModuleFactory | ( | ) | [virtual] |
Destructor.
Definition at line 50 of file WModuleFactory.cpp.
WModuleFactory::WModuleFactory | ( | ) | [protected] |
Constructors are protected because this is a Singleton.
Definition at line 43 of file WModuleFactory.cpp.
Referenced by getModuleFactory().
bool WModuleFactory::checkPrototype | ( | boost::shared_ptr< WModule > | module, |
PrototypeSharedContainerType::ReadTicket | ticket | ||
) | [protected] |
Checks whether the specified module is a prototype or an instantiated module.
Use isPrototype if no ticket acquired yet.
module | the module to check |
ticket | ticket which already has read lock. |
Definition at line 100 of file WModuleFactory.cpp.
Referenced by create().
Create a new and initialized module using the specified prototype.
prototype | the prototype to clone. |
Definition at line 105 of file WModuleFactory.cpp.
References checkPrototype(), wlog::debug(), WSharedObject< T >::getReadTicket(), initializeModule(), and m_prototypes.
WCombinerTypes::WCompatiblesList WModuleFactory::getAllPrototypes | ( | ) |
Creates a list of WApplyCombiner for all modules known by the factory.
Definition at line 266 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
WCombinerTypes::WCompatiblesList WModuleFactory::getCompatiblePrototypes | ( | boost::shared_ptr< WModule > | module = boost::shared_ptr< WModule >() | ) |
Returns a set of module combiners with module combinations compatible with the specified one.
module | the module to find the compatibles for. |
Definition at line 208 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
boost::shared_ptr< WModuleFactory > WModuleFactory::getModuleFactory | ( | ) | [static] |
Returns instance of the module factory to use to create modules.
Definition at line 134 of file WModuleFactory.cpp.
References m_instance, and WModuleFactory().
Referenced by WApplyCombiner::apply(), WModuleContainer::applyModule(), WModuleContainer::createAndAdd(), WKernel::init(), WPrototypeRequirement::isComplied(), isPrototype(), WModuleProjectFileCombiner::parse(), and WBatchLoader::threadMain().
const boost::shared_ptr< WModule > WModuleFactory::getPrototypeByInstance | ( | boost::shared_ptr< WModule > | instance | ) |
Finds a prototype using an instance of a module.
This uses the type_info to find a proper prototype.
instance | the instance to use. |
WPrototypeUnknown | if prototype can not be found. |
Definition at line 178 of file WModuleFactory.cpp.
References getPrototypeByName().
const boost::shared_ptr< WModule > WModuleFactory::getPrototypeByName | ( | std::string | name | ) |
Finds a prototype using the specified name.
name | the name. |
Definition at line 165 of file WModuleFactory.cpp.
References isPrototypeAvailable().
Referenced by getPrototypeByInstance().
WModuleFactory::PrototypeSharedContainerType::ReadTicket WModuleFactory::getPrototypes | ( | ) | const |
This method gives read access to the list of all prototypes.
Definition at line 203 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
std::vector< WModule::ConstSPtr > WModuleFactory::getPrototypesByType | ( | MODULE_TYPE | type | ) |
Finds a prototype using an type.
type | the type of module. |
Definition at line 183 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
void WModuleFactory::initializeModule | ( | boost::shared_ptr< WModule > | module | ) | [static] |
This method uses a newly created instance of WModule and initializes it properly.
After using this method, the module is properly initialized and ready to be used.
module | the module to initialize. |
Definition at line 129 of file WModuleFactory.cpp.
bool WModuleFactory::isA | ( | boost::shared_ptr< WModule > | module | ) | [static] |
Checks whether the first instance can be casted to the second one.
module | the module to check. |
Definition at line 225 of file WModuleFactory.h.
bool WModuleFactory::isPrototype | ( | boost::shared_ptr< WModule > | module | ) | [static] |
Checks whether the specified module is a prototype or an instantiated module.
module | the module to check |
Definition at line 93 of file WModuleFactory.cpp.
References getModuleFactory().
Referenced by WApplyCombiner::apply().
const boost::shared_ptr< WModule > WModuleFactory::isPrototypeAvailable | ( | std::string | name | ) |
Searches a prototype by name.
It returns the prototype, or a NULL pointer if it is not found. The difference to getPrototypeByName() is, that an unavailable prototype does not throw an exception. This is nice for checking whether a prototype exists or not.
name | name of the prototype to search |
Definition at line 145 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
Referenced by getPrototypeByName().
void WModuleFactory::load | ( | ) |
Loads the modules and creates prototypes.
Definition at line 55 of file WModuleFactory.cpp.
References WLogger::addLogMessage(), WLogger::getLogger(), WSharedObject< T >::getWriteTicket(), initializeModule(), WModuleLoader::load(), m_moduleLoader, and m_prototypes.
boost::shared_ptr< WModuleFactory > WModuleFactory::m_instance = boost::shared_ptr< WModuleFactory >() [static, private] |
Singleton instance of WModuleFactory.
Definition at line 221 of file WModuleFactory.h.
Referenced by getModuleFactory().
WModuleLoader WModuleFactory::m_moduleLoader [private] |
Loader class managing dynamically loaded modules in OpenWalnut.
Definition at line 216 of file WModuleFactory.h.
Referenced by load().
The module prototypes available.
Definition at line 200 of file WModuleFactory.h.
Referenced by create(), getAllPrototypes(), getCompatiblePrototypes(), getPrototypes(), getPrototypesByType(), isPrototypeAvailable(), and load().