PLCnext API Documentation 25.0.2.69
DynamicPortsBuilder.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/Plc/Commons/DataTypeEnum.hpp"
9#include "Arp/Plc/Commons/Meta/TypeSystem/DataInfoDeduction.hxx"
10#include "Arp/Plc/Commons/Meta/TypeSystem/TypeDefinition.hpp"
11#include <array>
12
13namespace Arp { namespace Plc { namespace Commons { namespace Meta
14{
15
18{
19public:
20 template<typename TProgram, size_t MaxNumPorts>
21 static DynamicPortsBuilder Create(const String& libraryNamespace, const String& programInstanceName,
22 std::array<byte*, MaxNumPorts>& ports, size_t portsOffset);
23
24private:
25 DynamicPortsBuilder(const String& libraryNamespace, const String& programTypeName,
26 const String& programInstanceName, size_t programSize, size_t programAlign, size_t portsOffset,
27 size_t maximumNumberOfPorts, byte** ports);
28
29public:
30 size_t GetMaximumNumberOfPorts() const;
31 size_t GetNumberOfPorts() const;
32 const TypeSystem::TypeDefinition& GetTypeDefinition() const;
33 template<typename T>
34 void AddPort(const String& portName, T& value, StandardAttribute standardAttributes);
35
36private:
37 void AddPort(const String& name, DataTypeEnum dataType, const String& typeName, size_t size, size_t alignment,
38 const ArrayDimensions& dimensions, StandardAttribute standardAttributes, byte* pValue);
39 void CheckNumberOfPorts() const;
40 void CheckName(const String& name) const;
41 void CheckDataType(const String& name, const String& typeName, DataTypeEnum dataType) const;
42
43private:
44 TypeSystem::TypeDefinition typeDefinition;
45 String libraryNamespace;
46 String programTypeName;
47 String programInstanceName;
48 size_t portsOffset;
49 size_t maximumNumberOfPorts;
50 byte** ports;
51};
52
55template<typename TProgram, size_t MaxNumPorts>
56DynamicPortsBuilder DynamicPortsBuilder::Create(const String& libraryNamespace, const String& programInstanceName,
57 std::array<byte*, MaxNumPorts>& ports, size_t portsOffset)
58{
59 return DynamicPortsBuilder(libraryNamespace, CommonTypeName<TProgram>(), programInstanceName, sizeof(TProgram),
60 alignof(TProgram), portsOffset, MaxNumPorts, ports.data());
61}
62
67template<typename T>
68void DynamicPortsBuilder::AddPort(const String& portName, T& value, StandardAttribute standardAttributes)
69{
71
72 DataInfoDeduction deduction(libraryNamespace);
73 DataInfo dataInfo = deduction(portName, value);
74 this->AddPort(portName, dataInfo.GetDataType(), dataInfo.GetTypeIdentifier().GetName(), sizeof(T), alignof(T),
75 dataInfo.GetArrayDimensions(), standardAttributes, reinterpret_cast<byte*>(&value));
76}
77
78}}}} // end of namespace Arp::Plc::Commons::Meta
This (meta programming) class provides the type-name according the CLS (common language specification...
Definition: CommonTypeName.hxx:33
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
Provide array information.
Definition: ArrayDimensions.hpp:18
Provides detailed informations for the respective data object.
Definition: DataInfo.hpp:29
DataTypeEnum & GetDataType(void)
The data type of this instance.
Definition: DataInfo.cpp:210
ArrayDimensions & GetArrayDimensions(void)
List of array dimensions information
Definition: DataInfo.cpp:252
TypeIdentifier & GetTypeIdentifier(void)
Get type name and namspace.
Definition: DataInfo.cpp:238
Provides the infrastructure for dynamic port provision
Definition: DynamicPortsBuilder.hpp:18
size_t GetMaximumNumberOfPorts() const
summary>Returns the current number of dynamic ports to provide
Definition: DynamicPortsBuilder.cpp:28
static DynamicPortsBuilder Create(const String &libraryNamespace, const String &programInstanceName, std::array< byte *, MaxNumPorts > &ports, size_t portsOffset)
Definition: DynamicPortsBuilder.hpp:56
void AddPort(const String &portName, T &value, StandardAttribute standardAttributes)
Adds a variable as dynamic port
Definition: DynamicPortsBuilder.hpp:68
size_t GetNumberOfPorts() const
summary>Returns the type definition for the program
Definition: DynamicPortsBuilder.cpp:34
const String & GetName(void) const
Get type name of the corresponding object.
Definition: TypeIdentifier.cpp:71
Definition: DataInfoDeduction.hxx:14
Defines the meta information of a type
Definition: TypeDefinition.hpp:23
Definition: DataTypeEnum.hpp:15
Namespace for the type information of the Meta component
StandardAttribute
Standard attributes to types
Definition: StandardAttribute.hpp:18
Root namespace for the PLCnext API