PLCnext API Documentation  21.0.0.35466
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
59  static const DataInfo Empty;
60 
61 public: // setter/getter operations
64  bool IsEmpty(void)const;
65 
68  DataTypeEnum& GetDataType(void);
69 
72  const DataTypeEnum& GetDataType(void)const;
73 
76  DataTag& GetDataTag(void);
77 
80  const DataTag& GetDataTag(void)const;
81 
84  TypeIdentifier& GetTypeIdentifier(void);
85 
88  const TypeIdentifier& GetTypeIdentifier(void)const;
89 
92  ArrayDimensions& GetArrayDimensions(void);
93 
96  const ArrayDimensions& GetArrayDimensions(void)const;
97 
100  bool IsBackgroundDomain(void)const;
101 
102 public: // operations
108  ARP_DEPRECATED("Use GetBaseDataTypeSize instead")
109  size_t GetTypeSize(ITypeNavigator& typeNavigator)const;
110 
115  size_t GetBaseDataTypeSize(ITypeNavigator& typeNavigator)const;
116 
122  size_t GetDataSize(ITypeNavigator& typeNavigator)const;
123 
128  size_t GetDataAlignment(ITypeNavigator& typeNavigator)const;
129 
135  size_t GetVariableSize(ITypeNavigator& typeNavigator)const;
136 
142  size_t GetVariableAlignment(ITypeNavigator& typeNavigator)const;
143 
147  TypeInfo GetTypeInfo(ITypeNavigator& typeNavigator)const;
148 
149 public: // IRscSerializable operations
150  void Serialize(RscWriter& writer)const override;
151  void Deserialize(RscReader& reader)override;
152  static size_t GetFieldCount(void);
153 
154 private: // methods
155  void SetName(const String& value);
156 
157 private: // fields
158  DataTag dataTag;
159  ArrayDimensions dimensions;
160 
161 private: // static fields
162 };
163 
165 // inline methods of class DataInfo
166 
167 inline bool DataInfo::IsEmpty()const
168 {
169  return this->dataTag.IsEmpty();
170 }
171 
172 inline DataTypeEnum& DataInfo::GetDataType()
173 {
174  return this->dataTag.GetDataType();
175 }
176 
177 inline const DataTypeEnum& DataInfo::GetDataType()const
178 {
179  return this->dataTag.GetDataType();
180 }
181 
182 inline DataTag& DataInfo::GetDataTag()
183 {
184  return this->dataTag;
185 }
186 
187 inline const DataTag& DataInfo::GetDataTag()const
188 {
189  return this->dataTag;
190 }
191 
192 inline TypeIdentifier& DataInfo::GetTypeIdentifier()
193 {
194  return this->dataTag.GetTypeIdentifier();
195 }
196 
197 inline const TypeIdentifier& DataInfo::GetTypeIdentifier()const
198 {
199  return this->dataTag.GetTypeIdentifier();
200 }
201 
202 inline ArrayDimensions& DataInfo::GetArrayDimensions(void)
203 {
204  return this->dimensions;
205 }
206 
207 inline const ArrayDimensions& DataInfo::GetArrayDimensions(void)const
208 {
209  return this->dimensions;
210 }
211 
212 inline bool DataInfo::IsBackgroundDomain()const
213 {
214  return this->dataTag.IsBackgroundDomain();
215 }
216 
217 inline void DataInfo::SetName(const String& value)
218 {
219  this->dataTag.SetName(value);
220 }
221 
222 inline size_t DataInfo::GetFieldCount(void)
223 {
224  return 2;
225 }
226 
227 }}}} // 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
DataTypeEnum & GetDataType(void)
The data type of this instance.
Definition: DataTag.hpp:173
Identifies a type descriptions
Definition: TypeIdentifier.hpp:23
TypeIdentifier & GetTypeIdentifier(void)
Returns the type identifier of this instance.
Definition: DataTag.hpp:183
Writes data to Rsc.
Definition: RscWriter.hpp:32
Definition: DataTypeEnum.hpp:15
Namespace for classes and interfaces for the Remote Service Call implementation
Definition: IRscReadEnumerator.hxx:9
bool IsBackgroundDomain(void) const
Only for internal using.
Definition: DataTag.hpp:246
Provide array information.
Definition: ArrayDimensions.hpp:17
bool IsEmpty(void) const
Determines if this instance is empty.
Definition: DataInfo.hpp:167
Provides detailed type information 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
static const DataInfo Empty
constant empty object to enable references
Definition: DataInfo.hpp:59
Provide type information
Definition: ITypeNavigator.hpp:18