8 #include "Arp/Plc/Commons/Esm/ProgramBase.hpp"
9 #include "Arp/Plc/Commons/Meta/DynamicPortsBuilder.hpp"
10 #include "Arp/Plc/Commons/Meta/TypeSystem/TypeDefinition.hpp"
11 #include "Arp/Plc/Commons/Meta/TypeSystem/TypeDomain.hpp"
13 namespace Arp {
namespace Plc {
namespace Commons {
namespace Esm
27 template<
typename TProgram,
size_t MaxNumPorts>
55 std::array<byte*, MaxNumPorts> ports{};
59 template<
typename TProgram,
size_t MaxNumPorts>
63 typeDomain(typeDomain),
65 typeDomain.GetLibraryNamespace(), programName, this->ports, offsetof(TProgram, ports)))
69 template<
typename TProgram,
size_t MaxNumPorts>
74 this->dynamicPortsBuilder.AddPort(portName, value, standardAttributes);
77 template<
typename TProgram,
size_t MaxNumPorts>
81 this->typeDomain.ReplaceTypeDefinition(
TypeDefinition(this->dynamicPortsBuilder.GetTypeDefinition()));
84 template<
typename TProgram,
size_t MaxNumPorts>
87 return this->dynamicPortsBuilder;
90 template<
typename TProgram,
size_t MaxNumPorts>
93 return this->dynamicPortsBuilder;
Base class for a program providing dynamic ports
Definition: DynamicPortsProgramBase.hpp:29
DynamicPortsBuilder & GetDynamicPortsBuilder()
Returns a reference to the DynamicPortsBuilder
Definition: DynamicPortsProgramBase.hpp:85
DynamicPortsProgramBase(const String &programName, TypeDomain &typeDomain)
Constructs an ProgramBase instance.
Definition: DynamicPortsProgramBase.hpp:60
void ReplaceProgramTypeDefinition() const
Updates the type definition for this program in the library's TypeDomain
Definition: DynamicPortsProgramBase.hpp:78
void AddPort(const String &portName, T &value, StandardAttribute standardAttributes)
Adds a variable as dynamic port
Definition: DynamicPortsProgramBase.hpp:71
This class implements the base functionality of a program.
Definition: ProgramBase.hpp:15
Container for the type information of a library
Definition: TypeDomain.hpp:26
Root namespace for the PLCnext API