PLCnext API Documentation  20.0.0.24462
DataInfo.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 #pragma once
7 #include "Arp/System/Core/Arp.h"
8 #include "Arp/System/Rsc/Services/IRscSerializable.hpp"
9 #include "Arp/System/Rsc/Services/RscReader.hpp"
10 #include "Arp/System/Rsc/Services/RscString.hxx"
11 #include "Arp/System/Rsc/Services/RscWriter.hpp"
12 #include "Arp/Plc/Commons/Meta/DataTag.hpp"
13 #include "Arp/Plc/Commons/Meta/ArrayDimension.hpp"
14 #include "Arp/Plc/Commons/Meta/ArrayDimensions.hpp"
15 #include "Arp/Plc/Commons/Meta/ITypeNavigator.hpp"
16 
17 
18 
19 
20 namespace Arp { namespace Plc { namespace Meta { namespace Internal
21 {
22 class DataBrowser;
23 }}}}
24 
25 namespace Arp { namespace Plc { namespace Commons { namespace Meta
26 {
27 
28 using namespace Arp::System::Rsc::Services;
29 
31 class DataInfo : public IRscSerializable
32 {
33  friend class Arp::Plc::Meta::Internal::DataBrowser;
34 
35 public: // typedefs
36 
37 public: // construction/destruction
39  DataInfo(void) = default;
41  DataInfo(const DataInfo& arg) = default;
43  DataInfo(DataInfo&& arg) = default;
45  DataInfo(const DataTag& dataTag);
47  DataInfo(const DataTag& dataTag, const ArrayDimension& arrayDimension);
49  DataInfo(const DataTag& dataTag, const ArrayDimensions& arrayDimensions);
51  DataInfo& operator=(const DataInfo& arg) = default;
53  DataInfo& operator=(DataInfo&& arg) = default;
55  ~DataInfo(void) = default;
56 
57 public: // static properties
58  static const DataInfo Empty;
59 
60 public: // setter/getter operations
63  bool IsEmpty(void)const;
64 
67  DataTypeEnum& GetDataType(void);
68 
71  const DataTypeEnum& GetDataType(void)const;
72 
75  DataTag& GetDataTag(void);
76 
79  const DataTag& GetDataTag(void)const;
80 
83  TypeIdentifier& GetTypeIdentifier(void);
84 
87  const TypeIdentifier& GetTypeIdentifier(void)const;
88 
91  ArrayDimensions& GetArrayDimensions(void);
92 
95  const ArrayDimensions& GetArrayDimensions(void)const;
96 
99  bool IsBackgroundDomain(void)const;
100 
101 public: // operations
102  ARP_DEPRECATED("Use GetBaseDataTypeSize instead")
103  size_t GetTypeSize(ITypeNavigator& typeNavigator)const;
104  size_t GetBaseDataTypeSize(ITypeNavigator& typeNavigator)const;
105  size_t GetDataSize(ITypeNavigator& typeNavigator)const;
106  size_t GetDataAlignment(ITypeNavigator& typeNavigator)const;
107  size_t GetVariableSize(ITypeNavigator& typeNavigator)const;
108  size_t GetVariableAlignment(ITypeNavigator& typeNavigator)const;
109  TypeInfo GetTypeInfo(ITypeNavigator& typeNavigator)const;
110 
111 public: // IRscSerializable operations
112  void Serialize(RscWriter& writer)const override;
113  void Deserialize(RscReader& reader)override;
114  static size_t GetFieldCount(void);
115 
116 private: // methods
117  void SetName(const String& value);
118  ArrayDimensions GetArrayTypeDimensions(ITypeNavigator& typeNavigator)const;
119 
120 private: // fields
121  DataTag dataTag;
122  ArrayDimensions dimensions;
123 
124 private: // static fields
125 };
126 
128 // inline methods of class DataInfo
129 
130 inline bool DataInfo::IsEmpty()const
131 {
132  return this->dataTag.IsEmpty();
133 }
134 
135 inline DataTypeEnum& DataInfo::GetDataType()
136 {
137  return this->dataTag.GetDataType();
138 }
139 
140 inline const DataTypeEnum& DataInfo::GetDataType()const
141 {
142  return this->dataTag.GetDataType();
143 }
144 
145 inline DataTag& DataInfo::GetDataTag()
146 {
147  return this->dataTag;
148 }
149 
150 inline const DataTag& DataInfo::GetDataTag()const
151 {
152  return this->dataTag;
153 }
154 
155 inline TypeIdentifier& DataInfo::GetTypeIdentifier()
156 {
157  return this->dataTag.GetTypeIdentifier();
158 }
159 
160 inline const TypeIdentifier& DataInfo::GetTypeIdentifier()const
161 {
162  return this->dataTag.GetTypeIdentifier();
163 }
164 
165 inline ArrayDimensions& DataInfo::GetArrayDimensions(void)
166 {
167  return this->dimensions;
168 }
169 
170 inline const ArrayDimensions& DataInfo::GetArrayDimensions(void)const
171 {
172  return this->dimensions;
173 }
174 
175 inline bool DataInfo::IsBackgroundDomain()const
176 {
177  return this->dataTag.IsBackgroundDomain();
178 }
179 
180 inline void DataInfo::SetName(const String& value)
181 {
182  this->dataTag.SetName(value);
183 }
184 
185 inline size_t DataInfo::GetFieldCount(void)
186 {
187  return 2;
188 }
189 
190 }}}} // end of namespace Arp::Plc::Meta
Reads data from Rsc
Definition: RscReader.hpp:23
Includes kind as well as instance browse name.
Definition: DataTag.hpp:24
Includes name and namespace of type object.
Definition: TypeIdentifier.hpp:21
Writes data to Rsc.
Definition: RscWriter.hpp:32
Definition: DataTypeEnum.hpp:15
Namespace for classes and interfaces for the Remote Service Call implementation
Provide array information.
Definition: ArrayDimensions.hpp:17
Provides detailed informations within TypeBrowser interface.
Definition: TypeInfo.hpp:27
Marshalls structure or class data types. Serialize and Deserialize have to marshal fields in the same...
Definition: IRscSerializable.hpp:18
Root namespace for the PLCnext API
Provide array information.
Definition: ArrayDimension.hpp:20
Provides detailed informations for the respective data object.
Definition: DataInfo.hpp:31
Definition: ITypeNavigator.hpp:16