#pragma once #include #include #include // std::numeric_limits #include #include namespace ipc { // types using byte_t = std::uint8_t; template struct uint; template <> struct uint<8 > { using type = std::uint8_t ; }; template <> struct uint<16> { using type = std::uint16_t; }; template <> struct uint<32> { using type = std::uint32_t; }; template <> struct uint<64> { using type = std::uint64_t; }; template using uint_t = typename uint::type; // constants enum : std::uint32_t { invalid_value = (std::numeric_limits::max)(), default_timeout = 100, // ms }; enum : std::size_t { data_length = 64, large_msg_limit = data_length, large_msg_align = 1024, large_msg_cache = 32, }; enum class relat { // multiplicity of the relationship single, multi }; enum class trans { // transmission unicast, broadcast }; // producer-consumer policy flag template struct wr {}; template struct relat_trait; template struct relat_trait> { constexpr static bool is_multi_producer = (Rp == relat::multi); constexpr static bool is_multi_consumer = (Rc == relat::multi); constexpr static bool is_broadcast = (Ts == trans::broadcast); }; template