PLCnext API Documentation 25.0.2.69
GenericPayload.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6
7#pragma once
8
10#include "Arp/System/Nm/IPayload.hpp"
11#include "Arp/System/Nm/Notification.hpp"
12
13
14namespace Arp { namespace System { namespace Nm
15{
16
17
19class ARP_CXX_SYMBOL_EXPORT GenericPayload : public IPayload
20{
21public: // typedefs
22 using ValueType = RawPayloadType::value_type;
23 using FieldType = Arp::Base::Rsc::Commons::RscType;
24
25private: // typedefs
26 using FieldInfos = std::vector<FieldType>;
27
28public: // construction/destruction
29 explicit GenericPayload(const Notification& notification);
31 GenericPayload(PayloadTypeIdType id, const String& name, const RawPayloadType& payloadArg);
32 GenericPayload(PayloadTypeIdType id, const String& name, const Notification& notification);
33 ~GenericPayload() override = default;
34
35public: // operations
36 // Methods of IPayload
37 PayloadTypeIdType GetId() const override;
38 const String GetName() const override;
39 const RawPayloadType& GetAsRawPayloadType() const override;
40 const String ToString() const override;
41 RawPayloadType&& MoveOutRawPayload();
42 bool IsReadOnly() const;
43 size_t GetFieldCount() const;
44 const ValueType& GetFieldValue(size_t fieldIndex) const;
45 FieldType GetFieldType(size_t fieldIndex) const;
46 size_t GetFieldIndexFormatString() const;
47 size_t AddField(FieldType type);
48 void SetFieldValue(size_t fieldIndex, const ValueType& value);
49
50private: // methods
51 void InitializeFields();
52 bool HasAssociatedNotification() const;
53 bool CanFieldBeAdded() const;
54 const String FormatValue(const String& formatString, const ValueType& value) const;
55
56private: // fields
58 String Name;
59 const Notification* NotificationPtr = nullptr;
60 RawPayloadType Payload;
61 FieldInfos Fields;
62 size_t FieldIndexFormatString = 0;
63};
64
65
66}}} // end of namespace Arp::System::Nm
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
Generic access to a IPayload
Definition: GenericPayload.hpp:20
Interface for Paylo objects
Definition: IPayload.hpp:19
Contains meta data and paylod of a Notification
Definition: Notification.hpp:20
std::vector< Arp::Base::Rsc::Commons::RscVariant< RawPayloadTypeLength > > RawPayloadType
type for the internally transferred payloads
Definition: NotificationManagerTypes.hpp:32
Root namespace for the PLCnext API