#include <OnixS/CME/MDH/testing/PacketHolder.h>
Public Types | |
| enum | : std::size_t |
| using | MessageSpans = std::array<ByteSpan, MessageCount> |
Public Member Functions | |
| PacketHolder ()=default | |
| PacketHolder (Messaging::SchemaVersion version) | |
| template<std::size_t Index> | |
| auto | message () noexcept -> decltype(std::get< Index >(messages_)) |
| template<std::size_t Index> | |
| auto | message () const noexcept -> decltype(std::get< Index >(messages_)) |
| template<std::size_t Index> | |
| auto | get () noexcept -> decltype(std::get< Index >(messages_)) |
| template<std::size_t Index> | |
| auto | get () const noexcept -> decltype(std::get< Index >(messages_)) |
| MessageSpans | toNetworkMessageSpans () noexcept |
Each template argument identifies a MessageHolder owned by the packet. The number, order, and types of the holders are fixed at compile time. The packet is neither copyable nor movable, so references and byte views into its owned storage remain valid until the packet is destroyed.
The holder provides tuple-like indexed access through get(), ADL-visible free get() overloads, and std::tuple_size and std::tuple_element specializations. This supports structured bindings in C++17 and generic code that calls unqualified get() after importing std::get. It does not provide std::get overloads or promise portable std::apply support.
PacketHolder<> is the same specialization as PacketHolder<Messaging::AdminHeartbeat12> and therefore represents a CME protocol heartbeat. A template argument can instead be a MessageHolder specialization to select that message's capacity. For example, PacketHolder<MessageHolder<Message, 256>, OtherMessage> gives the first message a 256-byte payload capacity and the second message the default capacity. A custom-capacity holder remains compatible with typed message builders for its underlying message type.
| FirstMessageType | First binary SBE or tag-based FIX message type, or MessageHolder specialization, to store. Defaults to AdminHeartbeat12. |
| RemainingMessageTypes | Additional message types or MessageHolder specializations to store. |
Definition at line 67 of file PacketHolder.h.
| using MessageSpans = std::array<ByteSpan, MessageCount> |
Fixed-size array of read-only byte views, one per held message.
Definition at line 94 of file PacketHolder.h.
| anonymous enum : std::size_t |
Number of message holders owned by each packet instance.
| Enumerator | ||
|---|---|---|
| MessageCount | 1 + sizeof...(RemainingMessageTypes) | |
Definition at line 91 of file PacketHolder.h.
|
default |
Constructs each held message using its default schema version.
| Any | exception thrown while initializing a held message. |
|
inlineexplicit |
Constructs all held messages for a common schema version.
| version | Schema version used to initialize every held message. |
| Any | exception thrown when a held message rejects version. |
Definition at line 103 of file PacketHolder.h.
|
inlinenoexcept |
Returns read-only tuple-style indexed access to a stored message holder.
| Index | Zero-based message index. |
Definition at line 147 of file PacketHolder.h.
|
inlinenoexcept |
Returns mutable tuple-style indexed access to a stored message holder.
| Index | Zero-based message index. |
Definition at line 136 of file PacketHolder.h.
|
inlinenoexcept |
Returns read-only indexed access to a stored message holder.
| Index | Zero-based message index. |
Definition at line 125 of file PacketHolder.h.
|
inlinenoexcept |
Returns mutable indexed access to a stored message holder.
| Index | Zero-based message index. |
Definition at line 114 of file PacketHolder.h.
|
inlinenoexcept |
Commits every message prefix and returns network-ready byte views.
The views are ordered like the packet's template arguments.
Definition at line 162 of file PacketHolder.h.