A factory that generates a component based on a string type. More...
#include <Factory.hh>
Public Member Functions | |
Factory (const Factory &)=delete | |
Factory (Factory &)=delete | |
bool | HasType (ComponentTypeId _typeId) |
Check if a component type has been registered. return True if registered. More... | |
std::string | Name (ComponentTypeId _typeId) const |
Get a component's type name given its type ID. return Unique component name. More... | |
template<typename ComponentTypeT > | |
std::unique_ptr< ComponentTypeT > | New () |
Create a new instance of a component. More... | |
std::unique_ptr< components::BaseComponent > | New (const ComponentTypeId &_type) |
Create a new instance of a component. More... | |
std::unique_ptr< components::BaseComponent > | New (const ComponentTypeId &_type, const components::BaseComponent *_data) |
Create a new instance of a component, initialized with particular data. More... | |
void | operator= (const Factory &)=delete |
void | operator= (Factory &&)=delete |
template<typename ComponentTypeT > | |
void | Register (const char *_type, ComponentDescriptorBase *_compDesc, RegistrationObjectId _regObjId) |
Register a component so that the factory can create instances of the component based on an ID. More... | |
template<typename ComponentTypeT > | |
void | Register (const std::string &_type, ComponentDescriptorBase *_compDesc) |
Register a component so that the factory can create instances of the component based on an ID. More... | |
template<typename ComponentTypeT > | |
void | Register (const std::string &_type, ComponentDescriptorBase *_compDesc, RegistrationObjectId _regObjId) |
Register a component so that the factory can create instances of the component based on an ID. More... | |
std::vector< ComponentTypeId > | TypeIds () const |
Get all the registered component types by ID. return Vector of component IDs. More... | |
template<typename ComponentTypeT > | |
void | Unregister () |
Unregister a component so that the factory can't create instances of the component anymore. More... | |
void | Unregister (ComponentTypeId _typeId) |
Unregister a component so that the factory can't create instances of the component anymore. More... | |
void | Unregister (ComponentTypeId _typeId, RegistrationObjectId _regObjId) |
Unregister a component so that the factory can't create instances of the component anymore. More... | |
template<typename ComponentTypeT > | |
void | Unregister (RegistrationObjectId _regObjId) |
Unregister a component so that the factory can't create instances of the component anymore. More... | |
Static Public Member Functions | |
static Factory * | Instance () |
Get an instance of the singleton. More... | |
Public Attributes | |
std::map< ComponentTypeId, std::string > | namesById |
A list of IDs and their equivalent names. More... | |
std::map< ComponentTypeId, std::string > | runtimeNamesById |
Keep track of the runtime names for types and warn the user if they try to register different types with the same typeName. More... | |
Detailed Description
A factory that generates a component based on a string type.
Constructor & Destructor Documentation
◆ Factory() [1/2]
◆ Factory() [2/2]
Member Function Documentation
◆ HasType()
|
inline |
Check if a component type has been registered. return True if registered.
◆ Instance()
|
static |
Get an instance of the singleton.
◆ Name()
|
inline |
Get a component's type name given its type ID. return Unique component name.
References map< K, T >::at(), string::end(), map< K, T >::find(), and Factory::namesById.
◆ New() [1/3]
|
inline |
Create a new instance of a component.
- Returns
- Pointer to a component. Null if the component type could not be handled.
- Template Parameters
-
ComponentTypeT component type requested
◆ New() [2/3]
|
inline |
Create a new instance of a component.
- Parameters
-
[in] _type Component id to create.
- Returns
- Pointer to a component. Null if the component type could not be handled.
◆ New() [3/3]
|
inline |
Create a new instance of a component, initialized with particular data.
- Parameters
-
[in] _type Component id to create. [in] _data The data to populate the component instance with.
- Returns
- Pointer to a component. Null if the component type could not be handled.
References std::endl(), gzerr, and BaseComponent::TypeId().
◆ operator=() [1/2]
|
delete |
◆ operator=() [2/2]
|
delete |
◆ Register() [1/3]
|
inline |
Register a component so that the factory can create instances of the component based on an ID.
- Parameters
-
[in] _type Type of component to register. [in] _compDesc Object to manage the creation of ComponentTypeT objects. [in] _regObjId An ID that identifies the registration object. This is generally derived from the this
pointer of the static component registration object created when calling GZ_SIM_REGISTER_COMPONENT.
- Template Parameters
-
ComponentTypeT Type of component to register.
References map< K, T >::end(), std::endl(), gz::common::env(), map< K, T >::find(), gz::common::hash64(), Factory::namesById, and Factory::runtimeNamesById.
◆ Register() [2/3]
|
inline |
Register a component so that the factory can create instances of the component based on an ID.
- Parameters
-
[in] _type Type of component to register. [in] _compDesc Object to manage the creation of ComponentTypeT objects.
- Template Parameters
-
ComponentTypeT Type of component to register.
References string::c_str().
◆ Register() [3/3]
|
inline |
Register a component so that the factory can create instances of the component based on an ID.
- Parameters
-
[in] _type Type of component to register. [in] _compDesc Object to manage the creation of ComponentTypeT objects. [in] _regObjId An ID that identifies the registration object. This is generally derived from the this
pointer of the static component registration object created when calling GZ_SIM_REGISTER_COMPONENT.
- Template Parameters
-
ComponentTypeT Type of component to register.
References string::c_str().
◆ TypeIds()
|
inline |
Get all the registered component types by ID. return Vector of component IDs.
References vector< T >::push_back().
◆ Unregister() [1/4]
|
inline |
Unregister a component so that the factory can't create instances of the component anymore.
- Template Parameters
-
ComponentTypeT Type of component to unregister.
Referenced by Factory::Unregister().
◆ Unregister() [2/4]
|
inline |
Unregister a component so that the factory can't create instances of the component anymore.
This function will not reset the typeId
static variable within the component type itself. Prefer using the templated Unregister
function when possible.
- Parameters
-
[in] _typeId Type of component to unregister.
References Factory::Unregister().
◆ Unregister() [3/4]
|
inline |
Unregister a component so that the factory can't create instances of the component anymore.
This function will not reset the typeId
static variable within the component type itself. Prefer using the templated Unregister
function when possible.
- Parameters
-
[in] _typeId Type of component to unregister. [in] _regObjId An ID that identifies the registration object. This is generally derived from the this
pointer of the static component registration object created when calling GZ_SIM_REGISTER_COMPONENT.
◆ Unregister() [4/4]
|
inline |
Unregister a component so that the factory can't create instances of the component anymore.
- Template Parameters
-
ComponentTypeT Type of component to unregister.
- Parameters
-
[in] _regObjId An ID that identifies the registration object. This is generally derived from the this
pointer of the static component registration object created when calling GZ_SIM_REGISTER_COMPONENT.
References Factory::Unregister().
Member Data Documentation
◆ namesById
std::map<ComponentTypeId, std::string> namesById |
A list of IDs and their equivalent names.
Referenced by Factory::Name(), and Factory::Register().
◆ runtimeNamesById
std::map<ComponentTypeId, std::string> runtimeNamesById |
Keep track of the runtime names for types and warn the user if they try to register different types with the same typeName.
Referenced by Factory::Register().
The documentation for this class was generated from the following file: