OnixS C++ CME MDP Premium Market Data Handler 5.11.1
Users' manual and API documentation
Loading...
Searching...
No Matches
PacketHolder< FirstMessageType, RemainingMessageTypes > Class Template Reference

#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

Detailed Description

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
class OnixS::CME::MDH::Test::PacketHolder< FirstMessageType, RemainingMessageTypes >

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.

Note
Unless a MessageHolder specialization is supplied, each message uses MessageHolder's default maximum capacity regardless of its encoded size. Object storage is approximately the sum of all configured holder capacities.
Template Parameters
FirstMessageTypeFirst binary SBE or tag-based FIX message type, or MessageHolder specialization, to store. Defaults to AdminHeartbeat12.
RemainingMessageTypesAdditional message types or MessageHolder specializations to store.

Definition at line 67 of file PacketHolder.h.

Member Typedef Documentation

◆ MessageSpans

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
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.

Member Enumeration Documentation

◆ anonymous enum

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
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.

Constructor & Destructor Documentation

◆ PacketHolder() [1/2]

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
PacketHolder ( )
default

Constructs each held message using its default schema version.

Exceptions
Anyexception thrown while initializing a held message.

◆ PacketHolder() [2/2]

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
PacketHolder ( Messaging::SchemaVersion version)
inlineexplicit

Constructs all held messages for a common schema version.

Parameters
versionSchema version used to initialize every held message.
Exceptions
Anyexception thrown when a held message rejects version.

Definition at line 103 of file PacketHolder.h.

Member Function Documentation

◆ get() [1/2]

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
template<std::size_t Index>
auto get ( ) const -> decltype(std::get< Index >(messages_))
inlinenoexcept

Returns read-only tuple-style indexed access to a stored message holder.

Template Parameters
IndexZero-based message index.
Returns
Read-only reference to the selected holder.
Precondition
Index < MessageCount.
Note
The reference remains valid until this packet is destroyed.

Definition at line 147 of file PacketHolder.h.

◆ get() [2/2]

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
template<std::size_t Index>
auto get ( ) -> decltype(std::get< Index >(messages_))
inlinenoexcept

Returns mutable tuple-style indexed access to a stored message holder.

Template Parameters
IndexZero-based message index.
Returns
Mutable reference to the selected holder.
Precondition
Index < MessageCount.
Note
The reference remains valid until this packet is destroyed.

Definition at line 136 of file PacketHolder.h.

◆ message() [1/2]

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
template<std::size_t Index>
auto message ( ) const -> decltype(std::get< Index >(messages_))
inlinenoexcept

Returns read-only indexed access to a stored message holder.

Template Parameters
IndexZero-based message index.
Returns
Read-only reference to the selected holder.
Precondition
Index < MessageCount.
Note
The reference remains valid until this packet is destroyed.

Definition at line 125 of file PacketHolder.h.

◆ message() [2/2]

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
template<std::size_t Index>
auto message ( ) -> decltype(std::get< Index >(messages_))
inlinenoexcept

Returns mutable indexed access to a stored message holder.

Template Parameters
IndexZero-based message index.
Returns
Mutable reference to the selected holder.
Precondition
Index < MessageCount.
Note
The reference remains valid until this packet is destroyed.

Definition at line 114 of file PacketHolder.h.

◆ toNetworkMessageSpans()

template<typename FirstMessageType = Messaging::AdminHeartbeat12, typename... RemainingMessageTypes>
MessageSpans toNetworkMessageSpans ( )
inlinenoexcept

Commits every message prefix and returns network-ready byte views.

The views are ordered like the packet's template arguments.

Returns
Read-only views of each message prefix and encoded payload, in template argument order.
Note
The views refer to storage owned by this packet holder and must not outlive it. Mutating a held message can make its committed prefix and a previously returned view stale; call this method again before consuming the bytes.

Definition at line 162 of file PacketHolder.h.