27template <
typename Type>
28struct arithmetic_type_name;
30#define DDL_DEFINE_ARITHMETIC_TYPE_NAME(__type, __name) \
32struct arithmetic_type_name<__type> \
34 static constexpr const char* name = __name; \
37DDL_DEFINE_ARITHMETIC_TYPE_NAME(tBool,
"tBool")
38DDL_DEFINE_ARITHMETIC_TYPE_NAME(tChar,
"tChar")
39DDL_DEFINE_ARITHMETIC_TYPE_NAME(tUInt8,
"tUInt8")
40DDL_DEFINE_ARITHMETIC_TYPE_NAME(tUInt16,
"tUInt16")
41DDL_DEFINE_ARITHMETIC_TYPE_NAME(tUInt32,
"tUInt32")
42DDL_DEFINE_ARITHMETIC_TYPE_NAME(tUInt64,
"tUInt64")
43DDL_DEFINE_ARITHMETIC_TYPE_NAME(tInt8,
"tInt8")
44DDL_DEFINE_ARITHMETIC_TYPE_NAME(tInt16,
"tInt16")
45DDL_DEFINE_ARITHMETIC_TYPE_NAME(tInt32,
"tInt32")
46DDL_DEFINE_ARITHMETIC_TYPE_NAME(tInt64,
"tInt64")
47DDL_DEFINE_ARITHMETIC_TYPE_NAME(tFloat32,
"tFloat32")
48DDL_DEFINE_ARITHMETIC_TYPE_NAME(tFloat64,
"tFloat64")
50template<typename T, typename Enable =
void>
53 static constexpr size_t value = 1;
57struct array_count<T, typename std::enable_if<std::is_array<T>::value>::type>
59 static constexpr size_t value =
sizeof(T) /
sizeof(
typename std::remove_pointer<typename std::decay<T>::type>::type);
62inline bool is_little_endian()
70 return sTest.aBytes[0] == 1;
73template <
typename T,
typename MemberType>
74size_t member_pointer_to_offset(MemberType T::* pMember)
77 return reinterpret_cast<size_t>(&(pStart->*pMember));
110template <
typename Type>
115 static_assert(std::is_arithmetic<Type>::value,
"Type is not an arithmetic type");
120 return detail::arithmetic_type_name<Type>::name;
130 return alignof(Type);
159 cEnumerationType(
const std::string& strName,
const std::shared_ptr<cType>& pUnderlyingType);
199 std::string m_strName;
200 std::shared_ptr<cType> m_pUnderlyingType;
201 std::vector<tValue> m_oValues;
220template <
typename Type,
typename Enable =
void>
229 std::make_shared<
arithmetic_type<typename std::underlying_type<Type>::type>>())
256template <
typename UnderlyingType>
258 typename std::enable_if<std::is_arithmetic<UnderlyingType>::value>::type>:
public cEnumerationType
337 operator std::pair<std::string, std::string>()
const
350 std::string m_strName;
353 std::vector<member> m_oMembers;
385template <
typename T =
void>
388 static_assert(std::is_trivially_copyable<T>::value,
389 "You can only use structs without pointers or complex members.");
407 template <
typename MemberType>
409 MemberType T::* pMemberOffset)
412 m_nCurrentSerializedOffset,
413 detail::is_little_endian(),
415 detail::array_count<MemberType>::value,
417 std::make_shared<
arithmetic_type<
typename std::remove_pointer<
typename std::decay<MemberType>::type>::type>>()});
418 m_nCurrentSerializedOffset +=
sizeof(MemberType);
429 template <
typename MemberType>
433 m_nCurrentSerializedOffset,
434 detail::is_little_endian(),
435 sizeof(
typename std::underlying_type<MemberType>::type),
436 detail::array_count<MemberType>::value,
438 std::make_shared<cEnumerationType>(oTypeDefinition)});
439 m_nCurrentSerializedOffset +=
sizeof(
typename std::underlying_type<MemberType>::type);
450 template <
typename MemberType>
454 m_nCurrentSerializedOffset,
455 detail::is_little_endian(),
457 detail::array_count<MemberType>::value,
459 std::make_shared<cStructureType>(oTypeDefinition)});
460 m_nCurrentSerializedOffset +=
sizeof(MemberType);
465 size_t m_nCurrentSerializedOffset = 0;
493 structure(const std::
string& strName,
size_t nAlignment = 0);
507 template <typename ArithmeticType>
508 typename std::enable_if<std::is_arithmetic<ArithmeticType>::value,
structure>::type&
509 Add(const std::
string& strName,
510 size_t nArrayCount = 1,
511 size_t nAlignment = 0,
512 int32_t nBytePosition = -1,
513 bool bLittleEndian = true)
531 size_t nArrayCount = 1,
532 size_t nAlignment = 0,
533 int32_t nBytePosition = -1,
534 bool bLittleEndian =
true);
548 size_t nArrayCount = 1,
549 size_t nAlignment = 0,
550 int32_t nBytePosition = -1,
551 bool bLittleEndian =
true);
554 void Add(
const std::string& strName,
557 int32_t nBytePosition,
559 const std::shared_ptr<cType>& oTypeDefinition);
561 size_t Align(
size_t nOffset,
size_t nAlignment)
const;
562 void AlignOffset(
size_t nAlignment);
565 size_t m_nCurrentOffset = 0;
566 size_t m_nCurrentSerializedOffset = 0;
567 size_t m_nMaxAlignment = 1;
#define ADTF3_DEPRECATED(_depr_message_)
Definition adtf_base_deprecated.h:27
Namespace for all functionality provided by ADTF and its SDKs.
Definition adtf_client_connector.h:14