OpenWalnut  1.4.0
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Attributes | Static Private Attributes | Friends
WModuleFactory Class Reference

Class able to create a new copy of an arbitrary module. More...

#include <WModuleFactory.h>

List of all members.

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< WModulecreate (boost::shared_ptr< WModule > prototype, std::string uuid="")
 Create a new and initialized module using the specified prototype.
const boost::shared_ptr< WModuleisPrototypeAvailable (std::string name)
 Searches a prototype by name.
const boost::shared_ptr< WModulegetPrototypeByName (std::string name)
 Finds a prototype using the specified name.
const boost::shared_ptr< WModulegetPrototypeByInstance (boost::shared_ptr< WModule > instance)
 Finds a prototype using an instance of a module.
std::vector< WModule::ConstSPtrgetPrototypesByType (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

Detailed Description

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.


Member Typedef Documentation

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.

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.


Constructor & Destructor Documentation

Destructor.

Definition at line 50 of file WModuleFactory.cpp.

Constructors are protected because this is a Singleton.

Definition at line 43 of file WModuleFactory.cpp.

Referenced by getModuleFactory().


Member Function Documentation

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.

Parameters:
modulethe module to check
ticketticket which already has read lock.
Returns:
true if it is a prototype

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.

Parameters:
prototypethe prototype to clone.
uuidthe 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.
Returns:
the module created using the prototype.

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.

Parameters:
uuidthe uuid to search for.
Returns:
the module, or NULL if not found

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.

Returns:
list of apply combiner.

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.

Parameters:
modulethe module to find the compatibles for.
Notes:
as the default parameter denotes, providing a NULL pointer (or calling the method without a parameter) returns the list of modules which are compatible to every other module. In other words, it returns all modules without input connectors. If the specified module is not NULL, the modules without input are not listed.
Returns:
set of compatible combiners.

Definition at line 218 of file WModuleFactory.cpp.

References WSharedObject< T >::getReadTicket(), and m_prototypes.

boost::shared_ptr< WModuleFactory > WModuleFactory::getModuleFactory ( ) [static]
boost::shared_ptr< WModuleLoader > WModuleFactory::getModuleLoader ( ) [static]

Returns instance of the module loader.

Returns:
the running 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.

Parameters:
instancethe instance to use.
Returns:
the prototype.
Exceptions:
WPrototypeUnknownif 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.

Parameters:
namethe name.
Returns:
the prototype whose name is equal to the specified one.

Definition at line 175 of file WModuleFactory.cpp.

References isPrototypeAvailable().

Referenced by getPrototypeByInstance().

This method gives read access to the list of all prototypes.

Returns:
the read ticket for the prototype list

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.

Parameters:
typethe type of module.
Returns:
the prototypes as list.

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.

Parameters:
modulethe module to initialize.

Definition at line 139 of file WModuleFactory.cpp.

Referenced by create(), and load().

template<typename T >
bool WModuleFactory::isA ( boost::shared_ptr< WModule module) [static]

Checks whether the first instance can be casted to the second one.

Parameters:
modulethe module to check.
Returns:
true if the dynamic_cast is successful

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.

Parameters:
modulethe module to check
Returns:
true if it is a prototype

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.

Parameters:
namename of the prototype to search
Returns:
the prototype if it exists, or NULL if not.

Definition at line 155 of file WModuleFactory.cpp.

References WSharedObject< T >::getReadTicket(), and m_prototypes.

Referenced by getPrototypeByName().

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.


Member Data Documentation

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().


The documentation for this class was generated from the following files: