PLCnext API Documentation  20.6.0.30321
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& payload, const String& str);
21 
22  template<typename PayloadType>
23  explicit LongStringPayloadField(PayloadType& payload);
24 
25 
26  size_t GetFieldIndexBegin() const;
27  size_t GetFieldCount() const;
28  String GetFormatString() const;
29  String GetString() const;
30 
31 private:
32  void CreatePayloadFieldsForString(const String& str);
33  void AddStringFields(size_t count);
34  void SetLongStringFieldValues(const String& str);
35  static size_t GetNumberOfFieldForString(const String& str);
36  static size_t FieldIndexToFormatStringIndex(size_t fieldIndex);
37 
38 private:
39  GenericPayload& payload;
40  const size_t fieldIndexBegin;
41 };
42 
43 
44 template<typename PayloadType>
45 LongStringPayloadField::LongStringPayloadField(PayloadType& payloadArg, const String& str)
46  : payload(payloadArg.payload),
47  fieldIndexBegin(payload.AddField(Arp::System::Rsc::Services::GetRscType<size_t>()))
48 {
49  this->CreatePayloadFieldsForString(str);
50  this->SetLongStringFieldValues(str);
51 }
52 
53 template<typename PayloadType>
54 LongStringPayloadField::LongStringPayloadField(PayloadType& payloadArg)
55  : payload(payloadArg.payload),
56  fieldIndexBegin(payload.AddField(Arp::System::Rsc::Services::GetRscType<size_t>()))
57 {
58  this->AddStringFields(this->GetFieldCount());
59 }
60 
61 
62 }}} // namespace Arp::System::Nm
size_t AddField(FieldType type)
Adds a field with the given FieldType
Generic access to a IPayload
Definition: GenericPayload.hpp:18
Root namespace for the PLCnext API
System components used by the System, Device, Plc or Io domains.
Definition: LongStringPayloadField.hpp:16