OpenWalnut
1.4.0
|
Class able to create a new copy of an arbitrary module. More...
#include <WModuleFactory.h>
Public Types | |
typedef boost::shared_ptr < WModuleFactory > | SPtr |
Shared pointer to a WModule. | |
typedef boost::shared_ptr < const WModuleFactory > | ConstSPtr |
Shared pointer to a const WModule. | |
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, std::string uuid="") |
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 SPtr | getModuleFactory () |
Returns instance of the module factory to use to create modules. | |
static boost::shared_ptr < WModuleLoader > | getModuleLoader () |
Returns instance of the module loader. | |
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. | |
static WModule::SPtr | findByUUID (std::string uuid) |
Find a module instance by UUID. | |
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 Types | |
typedef std::map< std::string, boost::weak_ptr< WModule > > | UuidModuleMap |
Mapping between a UUID and a module. | |
Private Attributes | |
WModuleLoader::SPtr | m_moduleLoader |
Loader class managing dynamically loaded modules in OpenWalnut. | |
WSharedAssociativeContainer < UuidModuleMap > | m_uuidModuleMap |
Keep track of uuids of each created module. | |
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 45 of file WModuleFactory.h.
typedef boost::shared_ptr< const WModuleFactory > WModuleFactory::ConstSPtr |
Shared pointer to a const WModule.
Definition at line 57 of file WModuleFactory.h.
typedef std::set< boost::shared_ptr< WModule > >::const_iterator WModuleFactory::PrototypeContainerConstIteratorType |
Const iterator for the prototype set.
Definition at line 67 of file WModuleFactory.h.
typedef std::set< boost::shared_ptr< WModule > >::iterator WModuleFactory::PrototypeContainerIteratorType |
Iterator for the prototype set.
Definition at line 72 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 62 of file WModuleFactory.h.
typedef WSharedAssociativeContainer< PrototypeContainerType > WModuleFactory::PrototypeSharedContainerType |
The alias for a shared container.
Definition at line 77 of file WModuleFactory.h.
typedef boost::shared_ptr< WModuleFactory > WModuleFactory::SPtr |
Shared pointer to a WModule.
Definition at line 52 of file WModuleFactory.h.
typedef std::map< std::string, boost::weak_ptr< WModule > > WModuleFactory::UuidModuleMap [private] |
Mapping between a UUID and a module.
Definition at line 253 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 105 of file WModuleFactory.cpp.
Referenced by create().
boost::shared_ptr< WModule > WModuleFactory::create | ( | boost::shared_ptr< WModule > | prototype, |
std::string | uuid = "" |
||
) |
Create a new and initialized module using the specified prototype.
prototype | the prototype to clone. |
uuid | the uuid to use for the created module. If you specify an empty string (default), a uuid will be created. This parameter is useful for the project loader. |
Definition at line 110 of file WModuleFactory.cpp.
References checkPrototype(), wlog::debug(), WSharedObject< T >::getReadTicket(), initializeModule(), WSharedAssociativeContainer< T >::insert(), m_prototypes, and m_uuidModuleMap.
WModule::SPtr WModuleFactory::findByUUID | ( | std::string | uuid | ) | [static] |
Find a module instance by UUID.
uuid | the uuid to search for. |
Definition at line 306 of file WModuleFactory.cpp.
References getModuleFactory(), and WSharedObject< T >::getReadTicket().
WCombinerTypes::WCompatiblesList WModuleFactory::getAllPrototypes | ( | ) |
Creates a list of WApplyCombiner for all modules known by the factory.
Definition at line 276 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 218 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 144 of file WModuleFactory.cpp.
References m_instance, and WModuleFactory().
Referenced by WApplyCombiner::apply(), WModuleContainer::applyModule(), WModuleContainer::createAndAdd(), WModuleContainerWrapper::createDataModule(), findByUUID(), getModuleLoader(), WKernel::init(), WPrototypeRequirement::isComplied(), isPrototype(), WModuleProjectFileCombiner::parse(), and WBatchLoader::threadMain().
boost::shared_ptr< WModuleLoader > WModuleFactory::getModuleLoader | ( | ) | [static] |
Returns instance of the module loader.
Definition at line 55 of file WModuleFactory.cpp.
References getModuleFactory().
Referenced by WKernel::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 188 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 175 of file WModuleFactory.cpp.
References isPrototypeAvailable().
Referenced by getPrototypeByInstance().
This method gives read access to the list of all prototypes.
Definition at line 213 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 193 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 139 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 262 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 98 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 155 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 60 of file WModuleFactory.cpp.
References WLogger::addLogMessage(), WLogger::getLogger(), WSharedObject< T >::getWriteTicket(), initializeModule(), 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 248 of file WModuleFactory.h.
Referenced by getModuleFactory().
Loader class managing dynamically loaded modules in OpenWalnut.
Definition at line 243 of file WModuleFactory.h.
Referenced by load().
The module prototypes available.
Definition at line 227 of file WModuleFactory.h.
Referenced by create(), getAllPrototypes(), getCompatiblePrototypes(), getPrototypes(), getPrototypesByType(), isPrototypeAvailable(), and load().
Keep track of uuids of each created module.
This is needed to find module pointers using uuid.
Definition at line 258 of file WModuleFactory.h.
Referenced by create().