PLCnext API Documentation 23.6.0.37
TypeDomain.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
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
32public: // nested types
33 // TODO Make this private
35 class TypeInfoEnumerator : public Enumerator<TypeInfo>
36 {
37 public: // construction/destruction
39
40 public: // IEnumerator<TypeInfo> oeprations
41 bool MoveNext(void) override;
42
43 private: // fields
44 TypeDefinitions::const_iterator begin;
45 TypeDefinitions::const_iterator end;
46 };
47
48public: // construction/destruction
50 TypeDomain(const char* libraryNamespace);
52 TypeDomain(const char* libraryNamespace, const std::initializer_list<TypeDefinition>& typeDefinitionList);
54 TypeDomain(const TypeDomain& arg) = default;
56 TypeDomain(TypeDomain&& arg) = default;
58 TypeDomain& operator=(const TypeDomain& arg) = default;
60 TypeDomain& operator=(TypeDomain&& arg) = default;
62 ~TypeDomain(void) = default;
63
64public: // setter/getter operations
66 const char* GetLibraryNamespace(void)const;
67
68public: // operations
71 void AddTypeDefinitions(const std::initializer_list<TypeDefinition>& typeDefinitionList);
72
75 void AddTypeDefinition(TypeDefinition&& typeDefinition);
76
80 void ReplaceTypeDefinition(TypeDefinition&& typeDefinition);
81
84
85private: // methods
86 const String& GetName(const TypeDefinition& typeDefinition) const;
87
88private: // fields
89 String libraryNamespace;
90 TypeDefinitions typeDefinitions;
91};
92
94// inline methods of class TypeDomain
95
96inline const char* TypeDomain::GetLibraryNamespace()const
97{
98 return this->libraryNamespace.CStr();
99}
100
102{
103 return std::make_shared<TypeInfoEnumerator>(*this);
104}
105
106}}}}} // end of namespace Arp::Plc::Commons::Meta::TypeSystem
This class defines a base class for all enumerator implementations and some predefined enumerators as...
Definition: Enumerator.hxx:22
Declares the interface of the enumerator pattern, which is leaned on .NET enumerator idiom.
Definition: IEnumerator.hxx:48
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.hpp:36
bool MoveNext(void) override
Moves this enumerator to the next position.
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.hpp:96
~TypeDomain(void)=default
Destructs this instance and frees all resources.
void AddTypeDefinition(TypeDefinition &&typeDefinition)
Adds a TypeDefinition to this collection
TypeDomain(const char *libraryNamespace)
Constructs an TypeDomain instance.
IEnumerator< TypeInfo >::Ptr CreateTypeInfoEnumerator(void)
Returns an IEnumerator over this library's TypeInfos
Definition: TypeDomain.hpp:101
void ReplaceTypeDefinition(TypeDefinition &&typeDefinition)
Replaces a TypeDefinition by a new description
TypeDomain(const TypeDomain &arg)=default
Copy constructor.
TypeDomain(TypeDomain &&arg)=default
Move constructor.
TypeDomain(const char *libraryNamespace, const std::initializer_list< TypeDefinition > &typeDefinitionList)
Constructs an TypeDomain instance.
void AddTypeDefinitions(const std::initializer_list< TypeDefinition > &typeDefinitionList)
Adds a list of TypeDefinitions to this collection
TypeDomain & operator=(const TypeDomain &arg)=default
Copy assignment operator.
TypeDomain & operator=(TypeDomain &&arg)=default
Move assignment operator.
const CharType * CStr() const
Gets the character data of this string.
Definition: BasicString.hxx:1518
Root namespace for the PLCnext API