retdec
Public Member Functions | Private Types | Private Attributes | List of all members
retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy > Class Template Reference

Implementation of a generic object factory. More...

#include <factory.h>

Inheritance diagram for retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >:
Inheritance graph
[legend]
Collaboration diagram for retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >:
Collaboration graph
[legend]

Public Member Functions

 Factory ()
 Default constructor. More...
 
bool registerObject (ObjectIDType id, ObjectCreator creator)
 Registers the given object. More...
 
bool unregisterObject (const ObjectIDType &id) const
 Unregisters the given object. More...
 
template<typename... Args>
ShPtr< AbstractObject > createObject (const ObjectIDType &id, Args &&... args) const
 Creates an instance of the given object with the given arguments. More...
 
std::vector< ObjectIDType > getRegisteredObjects () const
 Returns a vector of all registered object IDs. More...
 
bool isRegistered (const ObjectIDType &id) const
 Returns true if there is an object registered with the selected ID, false otherwise. More...
 

Private Types

using IDToObjectMap = std::map< ObjectIDType, ObjectCreator >
 Type of a container used to map an object ID to its creator function. More...
 

Private Attributes

IDToObjectMap associations
 Container used to map an object ID to its creator function. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from retdec::llvmir2hll::DefaultFactoryError< ObjectIDType, AbstractObject >
static ShPtr< AbstractObject > onUnknownType (ObjectIDType id)
 Reaction to the "Unknown Type" error. More...
 
- Protected Member Functions inherited from retdec::llvmir2hll::DefaultFactoryError< ObjectIDType, AbstractObject >
 DefaultFactoryError ()=default
 Default constructor. More...
 
 ~DefaultFactoryError ()=default
 Destructor. More...
 

Detailed Description

template<class AbstractObject, typename ObjectIDType, typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
class retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >

Implementation of a generic object factory.

Implements the Object Factory design pattern - creates instances of objects according to the given object identifier.

For details, see the following book:

Template Parameters
AbstractObjectBase class of all classes whose instances are to be created by a factory.
ObjectIDTypeType of an object's identifier.
ObjectCreatorType of a function used to create instances of AbstractObject.
FactoryErrorPolicyPolicy to be used when trying to instantiate an object with unknown identifier.

FactoryErrorPolicy requirements:

It supports ObjectCreators with up to five parameters.

Member Typedef Documentation

◆ IDToObjectMap

template<class AbstractObject , typename ObjectIDType , typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
using retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >::IDToObjectMap = std::map<ObjectIDType, ObjectCreator>
private

Type of a container used to map an object ID to its creator function.

Constructor & Destructor Documentation

◆ Factory()

template<class AbstractObject , typename ObjectIDType , typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >::Factory ( )
inline

Default constructor.

Member Function Documentation

◆ createObject()

template<class AbstractObject , typename ObjectIDType , typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
template<typename... Args>
ShPtr<AbstractObject> retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >::createObject ( const ObjectIDType &  id,
Args &&...  args 
) const
inline

Creates an instance of the given object with the given arguments.

Parameters
[in]idObject's ID.
argsArguments to be passed to the instance's constructor.
Returns
Instance of the given object.

◆ getRegisteredObjects()

template<class AbstractObject , typename ObjectIDType , typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
std::vector<ObjectIDType> retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >::getRegisteredObjects ( ) const
inline

Returns a vector of all registered object IDs.

◆ isRegistered()

template<class AbstractObject , typename ObjectIDType , typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
bool retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >::isRegistered ( const ObjectIDType &  id) const
inline

Returns true if there is an object registered with the selected ID, false otherwise.

◆ registerObject()

template<class AbstractObject , typename ObjectIDType , typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
bool retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >::registerObject ( ObjectIDType  id,
ObjectCreator  creator 
)
inline

Registers the given object.

Parameters
[in]idObject's ID.
[in]creatorCreator to be used to create instances.
Returns
true if the registration was successful, false otherwise.

Every ID can be registered only once. If someone tries to register the same object twice, this function will return false.

◆ unregisterObject()

template<class AbstractObject , typename ObjectIDType , typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
bool retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >::unregisterObject ( const ObjectIDType &  id) const
inline

Unregisters the given object.

Parameters
[in]idObject's ID.
Returns
true if the unregistration was successful, false otherwise.

Member Data Documentation

◆ associations

template<class AbstractObject , typename ObjectIDType , typename ObjectCreator = ShPtr<AbstractObject> (*)(), template< typename, class > class FactoryErrorPolicy = DefaultFactoryError>
IDToObjectMap retdec::llvmir2hll::Factory< AbstractObject, ObjectIDType, ObjectCreator, FactoryErrorPolicy >::associations
private

Container used to map an object ID to its creator function.


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