PLCnext API Documentation  20.6.0.30321
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 
119 private: // fields
120  DataTag dataTag;
121  ArrayDimensions dimensions;
122 
123 private: // static fields
124 };
125 
127 // inline methods of class DataInfo
128 
129 inline bool DataInfo::IsEmpty()const
130 {
131  return this->dataTag.IsEmpty();
132 }
133 
134 inline DataTypeEnum& DataInfo::GetDataType()
135 {
136  return this->dataTag.GetDataType();
137 }
138 
139 inline const DataTypeEnum& DataInfo::GetDataType()const
140 {
141  return this->dataTag.GetDataType();
142 }
143 
144 inline DataTag& DataInfo::GetDataTag()
145 {
146  return this->dataTag;
147 }
148 
149 inline const DataTag& DataInfo::GetDataTag()const
150 {
151  return this->dataTag;
152 }
153 
154 inline TypeIdentifier& DataInfo::GetTypeIdentifier()
155 {
156  return this->dataTag.GetTypeIdentifier();
157 }
158 
159 inline const TypeIdentifier& DataInfo::GetTypeIdentifier()const
160 {
161  return this->dataTag.GetTypeIdentifier();
162 }
163 
164 inline ArrayDimensions& DataInfo::GetArrayDimensions(void)
165 {
166  return this->dimensions;
167 }
168 
169 inline const ArrayDimensions& DataInfo::GetArrayDimensions(void)const
170 {
171  return this->dimensions;
172 }
173 
174 inline bool DataInfo::IsBackgroundDomain()const
175 {
176  return this->dataTag.IsBackgroundDomain();
177 }
178 
179 inline void DataInfo::SetName(const String& value)
180 {
181  this->dataTag.SetName(value);
182 }
183 
184 inline size_t DataInfo::GetFieldCount(void)
185 {
186  return 2;
187 }
188 
189 }}}} // 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