7#ifndef ARP_USE_ARP_SYSTEM_ACF_COMMONS
11#include "Arp/System/Acf/IComponentFactory.hpp"
14namespace Arp {
namespace System {
namespace Acf
19class ComponentFactory :
public IComponentFactory
23 typedef IComponent::Ptr (*FactoryMethod)(IApplication& application,
const String& componentName);
26 typedef std::map<String, FactoryMethod> FactoryMethods;
29 ComponentFactory(
void) =
default;
30 virtual ~ComponentFactory(
void) =
default;
33 bool HasComponentType(
const String& typeName)
override;
34 IComponent::Ptr CreateComponent(IApplication& application,
const String& componentType,
const String& componentName)
override;
41 bool AddFactoryMethod(
const String& componentType, FactoryMethod factoryMethod);
44 ComponentFactory(
const ComponentFactory& arg) =
default;
45 ComponentFactory& operator=(
const ComponentFactory& arg) =
default;
48 FactoryMethods factoryMethods;
53inline bool ComponentFactory::HasComponentType(
const String& typeName)
55 return this->factoryMethods.find(typeName) != this->factoryMethods.end();
58inline bool ComponentFactory::AddFactoryMethod(
const String& componentType, FactoryMethod factoryMethod)
60 return this->factoryMethods.insert(std::make_pair(componentType, factoryMethod)).second;
std::shared_ptr< IComponent > Ptr
The pointer type of this interface.
Definition: IComponent.hpp:83
Root namespace for the PLCnext API