8#include "Arp/System/Core/TypeDeduction.hxx"
9#include "Arp/Plc/Commons/DataType.hpp"
10#include "Arp/Plc/Commons/DataTypeEnum.hpp"
11#include "Arp/Plc/Commons/PlcTypes.h"
12#include "Arp/Plc/Commons/Esm/IProgram.hpp"
13namespace Arp {
namespace Plc {
namespace Commons {
namespace Meta {
namespace TypeSystem
19template<class T, bool IsArray = std::is_array<T>::value>
28 using type =
typename std::remove_reference<decltype(*std::begin(std::declval<T&>()))>;
33inline DataType GetDataType(
void)
35 if (std::is_enum<T>::value)
37 return DataType::Enum | GetDataType<typename underlying_enum_type<T>::type>();
39 else if (std::is_class<T>::value)
41 return DataType::Struct;
43 else if (std::is_array<T>::value)
45 return DataType::Array | GetDataType<typename array_element_type<T>::type>();
47 else if (std::is_pointer<T>::value)
49 return DataType::Pointer | GetDataType<typename std::remove_pointer<T>::type>();
53 return DataType::None;
64inline DataType GetDataType<boolean>()
66 return DataType::Boolean;
72 return DataType::Char8;
81 return DataType::UInt8;
85inline DataType GetDataType<int8>(
void)
87 return DataType::Int8;
91inline DataType GetDataType<uint16>(
void)
93 return DataType::UInt16;
97inline DataType GetDataType<int16>(
void)
99 return DataType::Int16;
103inline DataType GetDataType<uint32>(
void)
105 return DataType::UInt32;
109inline DataType GetDataType<int32>(
void)
111 return DataType::Int32;
115inline DataType GetDataType<uint64>(
void)
117 return DataType::UInt64;
121inline DataType GetDataType<int64>(
void)
123 return DataType::Int64;
127inline DataType GetDataType<float32>(
void)
129 return DataType::Float32;
133inline DataType GetDataType<float64>(
void)
135 return DataType::Float64;
139inline DataType GetDataType<DateTime>(
void)
141 return DataType::DateTime;
145inline DataType GetDataType<String>(
void)
147 return DataType::String;
151inline DataType GetDataType<IProgram>(
void)
153 return DataType::Program;
170 operator DataType(
void)
const;
174 DataType Value = DataType::None;
179inline DataTypeDeductionBase::operator DataType()
const
184inline DataTypeDeductionBase::operator
DataTypeEnum()
const
Interface to implement PLC program to be executed in realtime context.
Definition: IProgram.hpp:19
Root namespace for the PLCnext API