PLCnext API Documentation  22.9.0.33
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) override = 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 
173 {
174  return this->dataTag.GetDataType();
175 }
176 
177 inline const DataTypeEnum& DataInfo::GetDataType()const
178 {
179  return this->dataTag.GetDataType();
180 }
181 
183 {
184  return this->dataTag;
185 }
186 
187 inline const DataTag& DataInfo::GetDataTag()const
188 {
189  return this->dataTag;
190 }
191 
193 {
194  return this->dataTag.GetTypeIdentifier();
195 }
196 
197 inline const TypeIdentifier& DataInfo::GetTypeIdentifier()const
198 {
199  return this->dataTag.GetTypeIdentifier();
200 }
201 
203 {
204  return this->dimensions;
205 }
206 
208 {
209  return this->dimensions;
210 }
211 
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
Definition: DataTypeEnum.hpp:16
Provide array information.
Definition: ArrayDimension.hpp:21
Provide array information.
Definition: ArrayDimensions.hpp:18
Provides detailed informations for the respective data object.
Definition: DataInfo.hpp:32
DataInfo(DataInfo &&arg)=default
Move constructor.
DataTypeEnum & GetDataType(void)
The data type of this instance.
Definition: DataInfo.hpp:172
DataInfo(const DataInfo &arg)=default
Copy constructor.
static const DataInfo Empty
constant empty object to enable references
Definition: DataInfo.hpp:59
DataInfo(void)=default
Constructs an DataInfo instance.
ArrayDimensions & GetArrayDimensions(void)
List of array dimensions information
Definition: DataInfo.hpp:202
const DataTypeEnum & GetDataType(void) const
The data type of this instance.
DataInfo(const DataTag &dataTag, const ArrayDimensions &arrayDimensions)
Constructs an DataInfo instance.
DataInfo & operator=(const DataInfo &arg)=default
Copy assignment operator.
DataInfo & operator=(DataInfo &&arg)=default
Move assignment operator
DataTag & GetDataTag(void)
Gets the DataTag .
Definition: DataInfo.hpp:182
const TypeIdentifier & GetTypeIdentifier(void) const
Get type name and namspace.
const DataTag & GetDataTag(void) const
Gets the DataTag .
TypeIdentifier & GetTypeIdentifier(void)
Get type name and namspace.
Definition: DataInfo.hpp:192
~DataInfo(void) override=default
Destructs this instance and frees all resources.
bool IsEmpty(void) const
Determines if this instance is empty.
Definition: DataInfo.hpp:167
DataInfo(const DataTag &dataTag, const ArrayDimension &arrayDimension)
Constructs an DataInfo instance.
DataInfo(const DataTag &dataTag)
Constructs an DataInfo instance.
bool IsBackgroundDomain(void) const
Only for internal using.
Definition: DataInfo.hpp:212
Includes kind as well as instance browse name.
Definition: DataTag.hpp:25
Provide type information
Definition: ITypeNavigator.hpp:19
Identifies a type descriptions
Definition: TypeIdentifier.hpp:24
Provides detailed type information within TypeBrowser interface.
Definition: TypeInfo.hpp:28
Marshalls structure or class data types. Serialize and Deserialize have to marshal fields in the same...
Definition: IRscSerializable.hpp:19
Reads data from Rsc
Definition: RscReader.hpp:26
Writes data to Rsc.
Definition: RscWriter.hpp:31
Namespace for classes and interfaces for the Remote Service Call implementation
Definition: IRscReadEnumerator.hxx:10
Root namespace for the PLCnext API