PLCnext API Documentation 25.0.2.69
ComponentFactory.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
7#ifndef ARP_USE_ARP_SYSTEM_ACF_COMMONS
8// not required any mode in public header
9#else
10#include "Arp/System/Core/Arp.h"
11#include "Arp/System/Acf/IComponentFactory.hpp"
12#include <map>
13
14namespace Arp { namespace System { namespace Acf
15{
16
19class ComponentFactory : public IComponentFactory
20{
21public: // typedefs
23 typedef IComponent::Ptr (*FactoryMethod)(IApplication& application, const String& componentName);
24
25private: // typedefs
26 typedef std::map<String, FactoryMethod> FactoryMethods;
27
28public: // construction/destruction
29 ComponentFactory(void) = default;
30 virtual ~ComponentFactory(void) = default;
31
32public: // overridden operations from IComponentFactory
33 bool HasComponentType(const String& typeName)override;
34 IComponent::Ptr CreateComponent(IApplication& application, const String& componentType, const String& componentName)override;
35
36public: // operations
41 bool AddFactoryMethod(const String& componentType, FactoryMethod factoryMethod);
42
43private: // ComponentFactory methods to avoid copying
44 ComponentFactory(const ComponentFactory& arg) = default;
45 ComponentFactory& operator=(const ComponentFactory& arg) = default;
46
47private: // fields
48 FactoryMethods factoryMethods;
49};
50
52// inline methods of class ComponentFactory
53inline bool ComponentFactory::HasComponentType(const String& typeName)
54{
55 return this->factoryMethods.find(typeName) != this->factoryMethods.end();
56}
57
58inline bool ComponentFactory::AddFactoryMethod(const String& componentType, FactoryMethod factoryMethod)
59{
60 return this->factoryMethods.insert(std::make_pair(componentType, factoryMethod)).second;
61}
62
63}}} // end of namesapce Arp::System::Acf
64
65#endif // ndef ARP_USE_ARP_SYSTEM_ACF_COMMONS
std::shared_ptr< IComponent > Ptr
The pointer type of this interface.
Definition: IComponent.hpp:83
Root namespace for the PLCnext API