PLCnext API Documentation 25.0.2.69
DataInfoDeduction.hxx
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/Plc/Commons/Meta/DataInfo.hpp"
9#include "Arp/Plc/Commons/Meta/TypeSystem/DataTagDeduction.hxx"
10namespace Arp { namespace Plc { namespace Commons { namespace Meta { namespace TypeSystem
11{
12
14{
15public: // construction/destruction
17 DataInfoDeduction(const char* libraryNamespace);
19 DataInfoDeduction(const DataInfoDeduction& arg) = default;
27 ~DataInfoDeduction(void) = default;
28
29public: // static operations
30 template<class T>
31 DataInfo operator()(const char* variableName, const T& value)const;
32
33 template<class T>
34 DataInfo operator()(const char* name, std::shared_ptr<T>& valuePtr)const;
35
36 template<class T, size_t N>
37 DataInfo operator()(const char* variableName, T(&value)[N])const;
38
39 template<class T, size_t N1, size_t N2>
40 DataInfo operator()(const char* variableName, T(&value)[N1][N2])const;
41
42 template<class T, size_t N1, size_t N2, size_t N3>
43 DataInfo operator()(const char* variableName, T(&value)[N1][N2][N3])const;
44
45 template<class T, size_t N>
46 DataInfo operator()(const char* variableName, T(*const (&value))[N])const;
47
48 template<class T, size_t N1, size_t N2>
49 DataInfo operator()(const char* variableName, T(*const (&value))[N1][N2])const;
50
51 template<class T, size_t N1, size_t N2, size_t N3>
52 DataInfo operator()(const char* variableName, T(*const (&value))[N1][N2][N3])const;
53
54private: // fields
55 const char* libraryNamespace;
56};
57
59// inline methods of class DataInfoDeduction
60inline DataInfoDeduction::DataInfoDeduction(const char* libraryNamespace)
61 : libraryNamespace(libraryNamespace)
62{
63}
64
65template<class T>
66inline DataInfo DataInfoDeduction::operator()(const char* variableName, const T& value)const
67{
68 DataTagDeduction getTag(this->libraryNamespace);
69 return DataInfo(getTag(variableName, value));
70}
71
72template<class T>
73inline DataInfo DataInfoDeduction::operator()(const char* name, std::shared_ptr<T>& valuePtr)const
74{
75 T* pValue = valuePtr.get();
76 return this->operator()(name, pValue);
77}
78
79
80template<class T, size_t N>
81inline DataInfo DataInfoDeduction::operator()(const char* variableName, T(&value)[N])const
82{
83 DataTagDeduction getTag(this->libraryNamespace);
84 return DataInfo(getTag(variableName, value), ArrayDimension(N));
85}
86
87template<class T, size_t N1, size_t N2>
88inline DataInfo DataInfoDeduction::operator()(const char* variableName, T(&value)[N1][N2])const
89{
90 DataTagDeduction getTag(this->libraryNamespace);
91 return DataInfo(getTag(variableName, value), ArrayDimensions({ N1, N2 }));
92}
93
94template<class T, size_t N1, size_t N2, size_t N3>
95inline DataInfo DataInfoDeduction::operator()(const char* variableName, T(&value)[N1][N2][N3])const
96{
97 DataTagDeduction getTag(this->libraryNamespace);
98 return DataInfo(getTag(variableName, value), ArrayDimensions({ N1, N2, N3 }));
99}
100
101template<class T, size_t N>
102inline DataInfo DataInfoDeduction::operator()(const char* variableName, T(*const (&value))[N])const
103{
104 DataTagDeduction getTag(this->libraryNamespace);
105 return DataInfo(getTag(variableName, value), ArrayDimension(N));
106}
107
108template<class T, size_t N1, size_t N2>
109inline DataInfo DataInfoDeduction::operator()(const char* variableName, T(*const (&value))[N1][N2])const
110{
111 DataTagDeduction getTag(this->libraryNamespace);
112 return DataInfo(getTag(variableName, value), ArrayDimensions({ N1, N2 }));
113}
114
115template<class T, size_t N1, size_t N2, size_t N3>
116inline DataInfo DataInfoDeduction::operator()(const char* variableName, T(*const (&value))[N1][N2][N3])const
117{
118 DataTagDeduction getTag(this->libraryNamespace);
119 return DataInfo(getTag(variableName, value), ArrayDimensions({ N1, N2, N3 }));
120}
121
122
123}}}}} // end of namespace Arp::Plc::Commons::Meta::TypeSystem
Provide array information.
Definition: ArrayDimension.hpp:19
Provide array information.
Definition: ArrayDimensions.hpp:18
Provides detailed informations for the respective data object.
Definition: DataInfo.hpp:29
Definition: DataInfoDeduction.hxx:14
DataInfoDeduction(const char *libraryNamespace)
Constructs an DataInfoDeduction instance.
Definition: DataInfoDeduction.hxx:60
DataInfoDeduction & operator=(const DataInfoDeduction &arg)=default
Copy assignment operator.
DataInfoDeduction(DataInfoDeduction &&arg)=default
Move constructor.
DataInfoDeduction & operator=(DataInfoDeduction &&arg)=default
Copy assignment operator.
DataInfoDeduction(const DataInfoDeduction &arg)=default
Copy constructor.
~DataInfoDeduction(void)=default
Destructs this instance and frees all resources.
Root namespace for the PLCnext API