PLCnext API Documentation  22.9.0.33
LongStringPayloadField.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 
7 
8 #pragma once
9 
10 #include "Arp/System/Commons/Logging.h"
11 #include "Arp/System/Nm/GenericPayload.hpp"
12 
13 namespace Arp { namespace System { namespace Nm
14 {
15 
17 {
18 public:
19  template<typename PayloadType>
20  explicit LongStringPayloadField(PayloadType& payloadArg, const String& str);
21 
22  template<typename PayloadType>
23  explicit LongStringPayloadField(PayloadType& payloadArg);
24 
25 
26  size_t GetFieldIndexBegin() const;
27  size_t GetFieldCount() const;
28  String GetFormatString() const;
29  String GetString() const;
30  bool IsEmpty() const;
31 
32 private:
33  void CreatePayloadFieldsForString(const String& str);
34  void AddStringFields(size_t count);
35  void SetLongStringFieldValues(const String& str);
36  static size_t GetNumberOfFieldForString(const String& str);
37  static size_t FieldIndexToFormatStringIndex(size_t fieldIndex);
38 
39 private:
40  GenericPayload& payload;
41  const size_t fieldIndexBegin;
42 };
43 
44 
45 template<typename PayloadType>
46 LongStringPayloadField::LongStringPayloadField(PayloadType& payloadArg, const String& str)
47  : payload(payloadArg.payload),
48  fieldIndexBegin(payload.AddField(Arp::System::Rsc::Services::GetRscType<size_t>()))
49 {
50  this->CreatePayloadFieldsForString(str);
51  this->SetLongStringFieldValues(str);
52 }
53 
54 template<typename PayloadType>
55 LongStringPayloadField::LongStringPayloadField(PayloadType& payloadArg)
56  : payload(payloadArg.payload),
57  fieldIndexBegin(payload.AddField(Arp::System::Rsc::Services::GetRscType<size_t>()))
58 {
59  this->AddStringFields(this->GetFieldCount());
60 }
61 
62 
63 }}} // namespace Arp::System::Nm
Generic access to a IPayload
Definition: GenericPayload.hpp:19
Definition: LongStringPayloadField.hpp:17
@ System
System components used by the System, Device, Plc or Io domains.
Root namespace for the PLCnext API