PLCnext API Documentation 25.0.2.69
TypeDomain.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/System/Core/Enumerator.hxx"
9#include "Arp/Plc/Commons/Meta/TypeInfo.hpp"
10#include "Arp/Plc/Commons/Meta/TypeSystem/TypeDefinition.hpp"
11#include <initializer_list>
12#include <map>
13#include <memory>
14
15namespace Arp { namespace Plc { namespace Commons { namespace Meta
16{
17// forwards
18class TypeInfoProvider;
19}}}} // end of namespace Arp::Plc::Commons::Meta
20
21namespace Arp { namespace Plc { namespace Commons { namespace Meta { namespace TypeSystem
22{
23
26{
28
29public: // typedefs
30 using TypeDefinitions = std::map<String, TypeDefinition>; // [LocalTypeName, TypeDefinition]
31
32private: // nested types
34
35public: // construction/destruction
36 explicit TypeDomain(const char* libraryNamespace);
37 TypeDomain(const char* libraryNamespace, const std::initializer_list<TypeDefinition>& typeDefinitionList);
39 TypeDomain(const TypeDomain& arg) = default;
41 TypeDomain(TypeDomain&& arg) = default;
43 TypeDomain& operator=(const TypeDomain& arg) = default;
45 TypeDomain& operator=(TypeDomain&& arg) = default;
47 ~TypeDomain(void) = default;
48
49public: // setter/getter operations
50 const char* GetLibraryNamespace(void)const;
51
52public: // operations
53 void AddTypeDefinitions(const std::initializer_list<TypeDefinition>& typeDefinitionList);
54 void AddTypeDefinition(TypeDefinition&& typeDefinition);
55 void ReplaceTypeDefinition(TypeDefinition&& typeDefinition);
57
58private: // methods
59 const String& GetName(const TypeDefinition& typeDefinition) const;
60
61private: // fields
62 String libraryNamespace;
63 TypeDefinitions typeDefinitions;
64};
65
66}}}}} // end of namespace Arp::Plc::Commons::Meta::TypeSystem
Declares the interface of the enumerator pattern, which is leaned on .NET enumerator idiom.
Definition: IEnumerator.hxx:49
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
Provides type information of one library
Definition: TypeInfoProvider.hpp:20
Defines the meta information of a type
Definition: TypeDefinition.hpp:23
IEnumerator over this library's TypeInfos
Definition: TypeDomain.cpp:13
Container for the type information of a library
Definition: TypeDomain.hpp:26
const char * GetLibraryNamespace(void) const
Returns the namespace of the library
Definition: TypeDomain.cpp:43
~TypeDomain(void)=default
Destructs this instance and frees all resources.
void AddTypeDefinition(TypeDefinition &&typeDefinition)
Adds a TypeDefinition to this collection
Definition: TypeDomain.cpp:61
TypeDomain(const char *libraryNamespace)
Constructs an TypeDomain instance.
Definition: TypeDomain.cpp:30
IEnumerator< TypeInfo >::Ptr CreateTypeInfoEnumerator(void) const
Returns an IEnumerator over this library's TypeInfos
Definition: TypeDomain.cpp:82
void ReplaceTypeDefinition(TypeDefinition &&typeDefinition)
Replaces a TypeDefinition by a new description
Definition: TypeDomain.cpp:73
TypeDomain(const TypeDomain &arg)=default
Copy constructor.
TypeDomain(TypeDomain &&arg)=default
Move constructor.
void AddTypeDefinitions(const std::initializer_list< TypeDefinition > &typeDefinitionList)
Adds a list of TypeDefinitions to this collection
Definition: TypeDomain.cpp:50
TypeDomain & operator=(const TypeDomain &arg)=default
Copy assignment operator.
TypeDomain & operator=(TypeDomain &&arg)=default
Move assignment operator.
Root namespace for the PLCnext API