PLCnext API Documentation 23.6.0.37
ChildTypeInfo.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
8#include "Arp/Plc/Commons/DataType.hpp"
9#include "Arp/Plc/Commons/Meta/ChildKind.hpp"
10#include "Arp/Plc/Commons/Meta/TypeIdentifier.hpp"
11#include "Arp/Plc/Commons/Meta/ArrayDimensions.hpp"
12#include "Arp/Plc/Commons/Meta/StandardAttributes.hpp"
13#include "Arp/Plc/Commons/Meta/CustomAttributes.hpp"
14#include "Arp/Plc/Commons/Meta/TypeInfo.hpp"
15#include "Arp/Plc/Commons/DataTypeEnum.hpp"
16#include "Arp/System/Rsc/Services/IRscSerializable.hpp"
17
18
19namespace Arp { namespace Plc { namespace Commons { namespace Meta
20{
21
22using namespace Arp::System::Rsc::Services;
23
25// rename to FieldInfo
26class ChildTypeInfo : public TypeInfo
27{
28public: // usings
30 using Ptr = std::shared_ptr<ChildTypeInfo>;
31
32public: // construction/destruction
37 ARP_DEPRECATED("Use ChildTypeInfo constructor with TypeInfo and ArrayDimensions")
38 ChildTypeInfo(const String& name, size_t offset, const TypeInfo& typeInfo, ChildKind kind = ChildKind::Default);
40 ChildTypeInfo(const String& name, size_t offset, const TypeInfo& typeInfo, const ArrayDimensions& arrayDimensions,
41 ChildKind kind = ChildKind::Default);
43 ChildTypeInfo(const String& name, size_t offset, DataType dataType, size_t size, size_t alignment,
44 StandardAttributes standardAttributes = StandardAttribute::None, ChildKind kind = ChildKind::Default);
46 ChildTypeInfo(const String& name, size_t offset, DataType dataType, const TypeIdentifier& typeId, size_t size, size_t alignment,
47 StandardAttributes standardAttributes = StandardAttribute::None, ChildKind kind = ChildKind::Default);
49 ChildTypeInfo(const String& name, size_t offset, DataType dataType, const TypeIdentifier& typeId, size_t size, size_t alignment,
50 const ArrayDimension& arrayDimension, StandardAttributes standardAttributes = StandardAttribute::None, ChildKind kind = ChildKind::Default);
52 ChildTypeInfo(const String& name, size_t offset, DataType dataType, const TypeIdentifier& typeId, size_t size, size_t alignment,
53 const ArrayDimensions& arrayDimensions, StandardAttributes standardAttributes = StandardAttribute::None, ChildKind kind = ChildKind::Default);
55 ChildTypeInfo(const String& name, size_t offset, DataType dataType, const TypeIdentifier& typeId, size_t size, size_t alignment,
56 const ArrayDimensions& arrayDimensions, StandardAttributes standardAttributes, const CustomAttributes& customAttributes, ChildKind kind);
58 ChildTypeInfo(const ChildTypeInfo& arg) = default;
60 ChildTypeInfo(ChildTypeInfo&& arg) = default;
62 ChildTypeInfo& operator=(const ChildTypeInfo& arg) = default;
64 ChildTypeInfo& operator=(ChildTypeInfo&& arg) = default;
66 ~ChildTypeInfo(void) override = default;
67
68public: // static properties
69 static const ChildTypeInfo Empty;
70
71public: // operators
72 void Serialize(RscWriter& writer)const override;
73 void Deserialize(RscReader& reader)override;
74
75public: // static operations
76 static size_t GetFieldCount(void);
77
78public: // setter/getter operations
81 void SetDataType(DataType value);
82
85 const String& GetName(void)const;
86
89 size_t GetOffset(void)const;
90
93 ChildKind GetKind(void)const;
94
98
101 size_t GetCacheSize(void)const;
102
103public: // operations
104
105private: // methods
106
107private: // fields
108 String name;
109 size_t offset = static_cast<size_t>(-1);
110 ChildKind kind = ChildKind::None;
111};
112
114// inline methods of class ChildTypeInfo
115inline const String& ChildTypeInfo::GetName()const
116{
117 return this->name;
118}
119
120inline size_t ChildTypeInfo::GetOffset()const
121{
122 return this->offset;
123}
124
126{
127 this->dataType = value;
128}
129
131{
132 return this->kind;
133}
134
135inline size_t ChildTypeInfo::GetFieldCount(void)
136{
137 return 10;
138}
139
140inline size_t ChildTypeInfo::GetCacheSize(void)const
141{
142 size_t result = TypeInfo::GetCacheSize();
143 result += this->name.Capacity();
144 result += sizeof(this->offset);
145 result += sizeof(this->kind);
146 return result;
147}
148
149}}}} // end of namespace Arp::Plc::Commons::Meta
Provide array information.
Definition: ArrayDimension.hpp:21
Provide array information.
Definition: ArrayDimensions.hpp:18
Provides detailed type information of a child within TypeBrowser interface.
Definition: ChildTypeInfo.hpp:27
void SetDataType(DataType value)
Sets the DataType
Definition: ChildTypeInfo.hpp:125
void Deserialize(RscReader &reader) override
Deserializes the datatype. All fields of the datatype have to be deserialized in use of RscReader.
const ArrayDimensions & GetArrayDimensions(void) const
List of array dimensions and their informations.
const String & GetName(void) const
Returns the name of the child
Definition: ChildTypeInfo.hpp:115
ChildKind GetKind(void) const
Returns the kind of a child type (e.g. instance, static)
Definition: ChildTypeInfo.hpp:130
std::shared_ptr< ChildTypeInfo > Ptr
std::shared_ptr to ChildTypeInfo
Definition: ChildTypeInfo.hpp:30
size_t GetOffset(void) const
Returns the offset of this child in the parent struct
Definition: ChildTypeInfo.hpp:120
ChildTypeInfo(void)
Constructs an ChildTypeInfo instance.
size_t GetCacheSize(void) const
Get the cache size
Definition: ChildTypeInfo.hpp:140
void Serialize(RscWriter &writer) const override
Serializes the datatype. All fields of the datatype have to be serialized in use of RscWriter.
Collection of StandardAttribute flags
Definition: StandardAttributes.hpp:16
Identifies a type descriptions
Definition: TypeIdentifier.hpp:24
Provides detailed type information within TypeBrowser interface.
Definition: TypeInfo.hpp:28
size_t GetCacheSize(void) const
Get the cache size
Definition: TypeInfo.hpp:238
Reads data from Rsc
Definition: RscReader.hpp:27
Writes data to Rsc.
Definition: RscWriter.hpp:32
size_type Capacity() const
Rceturns the capacity of this string.
Definition: BasicString.hxx:1079
ChildKind
Enumeration of the type of a child type
Definition: ChildKind.hpp:17
std::vector< CustomAttribute > CustomAttributes
List of type attributes TypeAttribute.
Definition: CustomAttributes.hpp:15
StandardAttribute
Standard attributes to types
Definition: StandardAttribute.hpp:18
DataType
Definition: DataType.hpp:15
Namespace for classes and interfaces for the Remote Service Call implementation
Root namespace for the PLCnext API
class ARP_DEPRECATED("Use Arp::Enum<T> instead.") EnumStrings
Deprecated! The class implements an adapter for enums to define the string literals of the enum entri...
Definition: EnumStrings.hxx:38