66template <
typename FirstMessageType = Messaging::AdminHeartbeat12,
typename... RemainingMessageTypes>
69 template <
typename MessageType>
75 template <
typename MessageType, std::
size_t MaxMessageSize>
87 std::tuple<typename Element<FirstMessageType>::Type,
typename Element<RemainingMessageTypes>::Type...> messages_;
91 enum : std::size_t {
MessageCount = 1 +
sizeof...(RemainingMessageTypes) };
104 : messages_(schemaVersion<FirstMessageType>(version), schemaVersion<RemainingMessageTypes>(version)...)
113 template <std::
size_t Index>
116 return std::get<Index>(messages_);
124 template <std::
size_t Index>
127 return std::get<Index>(messages_);
135 template <std::
size_t Index>
136 auto get() noexcept -> decltype(
std::
get<Index>(messages_))
146 template <std::
size_t Index>
147 auto get() const noexcept -> decltype(
std::
get<Index>(messages_))
165 fillMessageSpans<0>(result);
175 template <std::
size_t Index>
176 typename std::enable_if<Index == MessageCount>::type fillMessageSpans(MessageSpans&)
noexcept
180 template <std::
size_t Index>
181 typename std::enable_if<(Index < MessageCount)>::type fillMessageSpans(MessageSpans& result)
noexcept
183 result[Index] = std::get<Index>(messages_).toNetworkBytes();
184 fillMessageSpans<Index + 1>(result);
195template <std::size_t Index,
typename... MessageTypes>
208template <std::size_t Index,
typename... MessageTypes>
217template <std::size_t Index,
typename... MessageTypes>
218typename std::enable_if<Index == PacketHolder<MessageTypes...>::MessageCount>::type appendPacketHolderMessages(
219 std::string&,
const PacketHolder<MessageTypes...>&)
224template <std::size_t Index,
typename... MessageTypes>
225typename std::enable_if<(Index < PacketHolder<MessageTypes...>::MessageCount)>::type appendPacketHolderMessages(
226 std::string& str,
const PacketHolder<MessageTypes...>& holder)
231 toStr(str, holder.template message<Index>());
232 appendPacketHolderMessages<Index + 1>(str, holder);
242template <
typename... MessageTypes>
245 str +=
"PacketHolder[Messages=[";
246 details::appendPacketHolderMessages<0>(str, holder);
255template <
typename... MessageTypes>
259 toStr(result, holder);
269template <
typename... MessageTypes>
272 return stream <<
toStr(holder);
281template <
typename... MessageTypes>
283 : integral_constant<size_t, ONIXS_CME_MDH_TESTING_NAMESPACE::PacketHolder<MessageTypes...>::MessageCount>
290template <
size_t Index,
typename... MessageTypes>
293 using type =
typename remove_reference<
decltype(
294 declval<ONIXS_CME_MDH_TESTING_NAMESPACE::PacketHolder<MessageTypes...>&>().template get<Index>())>
::type;
#define ONIXS_CME_MDH_TESTING_NAMESPACE
#define ONIXS_CME_MDH_TESTING_NAMESPACE_END
#define ONIXS_CME_MDH_TESTING_NAMESPACE_BEGIN
#define ONIXS_CMEMDH_NODISCARD
Owns fixed-capacity storage for a prefixed CME message.
Owns a fixed set of CME message holders for sending in one packet.
PacketHolder(Messaging::SchemaVersion version)
Constructs all held messages for a common schema version.
MessageSpans toNetworkMessageSpans() noexcept
Commits every message prefix and returns network-ready byte views.
auto message() const noexcept -> decltype(std::get< Index >(messages_))
Returns read-only indexed access to a stored message holder.
PacketHolder()=default
Constructs each held message using its default schema version.
auto get() noexcept -> decltype(std::get< Index >(messages_))
Returns mutable tuple-style indexed access to a stored message holder.
auto get() const noexcept -> decltype(std::get< Index >(messages_))
Returns read-only tuple-style indexed access to a stored message holder.
auto message() noexcept -> decltype(std::get< Index >(messages_))
Returns mutable indexed access to a stored message holder.
std::array< ByteSpan, MessageCount > MessageSpans
Fixed-size array of read-only byte views, one per held message.
MessageHeader::Version SchemaVersion
Aliases SBE-encoded data version type.
auto get(PacketHolder< MessageTypes... > &holder) noexcept -> decltype(holder.template get< Index >())
Returns mutable tuple-style indexed access to a stored message holder.
void toStr(std::string &str, const MessageHolder< MessageType, MaxMessageSize > &holder)
Appends the holder's capacity, prefix, and message to a string.
std::ostream & operator<<(std::ostream &stream, const MessageHolder< MessageType, MaxMessageSize > &rhs)
Writes the holder's capacity, prefix, and message to a stream.
typename remove_reference< decltype( declval< OnixS::CME::MDH::Test::PacketHolder< MessageTypes... > & >().template get< Index >())>::type type