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
31 DataInfo operator()(
const char* variableName,
const T& value)
const;
34 DataInfo operator()(
const char* name, std::shared_ptr<T>& valuePtr)
const;
36 template<
class T,
size_t N>
37 DataInfo operator()(
const char* variableName, T(&value)[N])
const;
39 template<
class T,
size_t N1,
size_t N2>
40 DataInfo operator()(
const char* variableName, T(&value)[N1][N2])
const;
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;
45 template<
class T,
size_t N>
46 DataInfo operator()(
const char* variableName, T(*
const (&value))[N])
const;
48 template<
class T,
size_t N1,
size_t N2>
49 DataInfo operator()(
const char* variableName, T(*
const (&value))[N1][N2])
const;
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;
55 const char* libraryNamespace;
61 : libraryNamespace(libraryNamespace)
66inline DataInfo DataInfoDeduction::operator()(
const char* variableName,
const T& value)
const
69 return DataInfo(getTag(variableName, value));
73inline DataInfo DataInfoDeduction::operator()(
const char* name, std::shared_ptr<T>& valuePtr)
const
75 T* pValue = valuePtr.get();
76 return this->operator()(name, pValue);
80template<
class T,
size_t N>
81inline DataInfo DataInfoDeduction::operator()(
const char* variableName, T(&value)[N])
const
87template<
class T,
size_t N1,
size_t N2>
88inline DataInfo DataInfoDeduction::operator()(
const char* variableName, T(&value)[N1][N2])
const
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
97 DataTagDeduction getTag(this->libraryNamespace);
98 return DataInfo(getTag(variableName, value), ArrayDimensions({ N1, N2, N3 }));
101template<
class T,
size_t N>
102inline DataInfo DataInfoDeduction::operator()(
const char* variableName, T(*
const (&value))[N])
const
104 DataTagDeduction getTag(this->libraryNamespace);
105 return DataInfo(getTag(variableName, value), ArrayDimension(N));
108template<
class T,
size_t N1,
size_t N2>
109inline DataInfo DataInfoDeduction::operator()(
const char* variableName, T(*
const (&value))[N1][N2])
const
111 DataTagDeduction getTag(this->libraryNamespace);
112 return DataInfo(getTag(variableName, value), ArrayDimensions({ N1, N2 }));
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
118 DataTagDeduction getTag(this->libraryNamespace);
119 return DataInfo(getTag(variableName, value), ArrayDimensions({ N1, N2, N3 }));
Root namespace for the PLCnext API