emlabcpp
modern opinionated embedded C++ library
emlabcpp::protocol::tuple< Endianess, Ds > Struct Template Reference

tuple is high levle alternative to use just 'std::tuple' that is more friendly for standalone protocols. More...

#include <tuple.h>

+ Inheritance diagram for emlabcpp::protocol::tuple< Endianess, Ds >:
+ Collaboration diagram for emlabcpp::protocol::tuple< Endianess, Ds >:

Public Types

template<typename... SubDs>
using with_items = tuple< Endianess, Ds..., SubDs... >
 
using def_tuple = std::tuple< Ds... >
 
template<std::size_t N>
using nth_def = std::tuple_element_t< N, def_tuple >
 
using def_type = endianess_wrapper< Endianess, def_tuple >
 
using traits = proto_traits< def_type >
 
using value_type = typename traits::value_type
 
using message_type = message< max_size >
 

Static Public Member Functions

constexpr static value_type make_val (typename proto_traits< Ds >::value_type const &... args)
 

Static Public Attributes

static constexpr std::size_t max_size = traits::max_size
 

Detailed Description

template<std::endian Endianess, typename... Ds>
struct emlabcpp::protocol::tuple< Endianess, Ds >

tuple is high levle alternative to use just 'std::tuple' that is more friendly for standalone protocols.

It is designed for message that are simply a set of serialized items. It also provieds more readable syntax. The template arguments at first configurate the protocol and later is follow by items present in the tuple, this can also be added with tuple::with_items alias that appends the items. For example: tuple< BIG_ENDIAN >::with_items< uint32_t, uint32_t >; serializes/deserializes in same way as 'std::tuple<uint32_t,uint32_t>' configured for big endianess.

Member Typedef Documentation

◆ def_tuple

template<std::endian Endianess, typename... Ds>
using emlabcpp::protocol::tuple< Endianess, Ds >::def_tuple = std::tuple< Ds... >

◆ def_type

template<std::endian Endianess, typename... Ds>
using emlabcpp::protocol::tuple< Endianess, Ds >::def_type = endianess_wrapper< Endianess, def_tuple >

◆ message_type

template<std::endian Endianess, typename... Ds>
using emlabcpp::protocol::tuple< Endianess, Ds >::message_type = message< max_size >

◆ nth_def

template<std::endian Endianess, typename... Ds>
template<std::size_t N>
using emlabcpp::protocol::tuple< Endianess, Ds >::nth_def = std::tuple_element_t< N, def_tuple >

◆ traits

template<std::endian Endianess, typename... Ds>
using emlabcpp::protocol::tuple< Endianess, Ds >::traits = proto_traits< def_type >

◆ value_type

template<std::endian Endianess, typename... Ds>
using emlabcpp::protocol::tuple< Endianess, Ds >::value_type = typename traits::value_type

◆ with_items

template<std::endian Endianess, typename... Ds>
template<typename... SubDs>
using emlabcpp::protocol::tuple< Endianess, Ds >::with_items = tuple< Endianess, Ds..., SubDs... >

Member Function Documentation

◆ make_val()

template<std::endian Endianess, typename... Ds>
constexpr static value_type emlabcpp::protocol::tuple< Endianess, Ds >::make_val ( typename proto_traits< Ds >::value_type const &...  args)
inlinestaticconstexpr

References emlabcpp::args.

Member Data Documentation

◆ max_size

template<std::endian Endianess, typename... Ds>
constexpr std::size_t emlabcpp::protocol::tuple< Endianess, Ds >::max_size = traits::max_size
staticconstexpr

The documentation for this struct was generated from the following file: