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