42template <
typename MessageTypeT,
52 using iterator =
typename MsgHolders::iterator;
87 batch_.push_back(msg);
99 netMsgs_.resize(batch_.size());
101 for (
size_t counter = 0; counter < batch_.size(); ++counter)
102 netMsgs_[counter] = batch_[counter].toNetworkMessage();
108 size_t size()
const {
return batch_.size(); }
118 friend class ONIXS_ICEBOE_NAMESPACE::Session;
119 friend class ONIXS_ICEBOE_MESSAGING_NAMESPACE::MessageBatchChecker;
145 template <
typename MessageTypeT,
150 netMsgs_.reserve(batch.
size());
151 for (
auto & holder : batch)
152 netMsgs_.push_back(holder.toNetworkMessage());
155 template <
typename MessageTypeT,
164 template <
typename MessageTypeT,
172 template <
typename MessageTypeT,
190 assert(!netMsgs_.empty());
191 return {&*netMsgs_.begin(), &*(netMsgs_.begin() + index)};
199 friend class ONIXS_ICEBOE_NAMESPACE::Session;
200 friend class ONIXS_ICEBOE_MESSAGING_NAMESPACE::MessageBatchChecker;
209 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
217 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
238 static size_t calculateBatchSize(
const NetMessages& msgs)
noexcept;
241 static size_t defaultMaxPacketSize() noexcept;
#define ONIXS_ICEBOE_MESSAGING_NAMESPACE_BEGIN
#define ONIXS_ICEBOE_NAMESPACE_BEGIN
#define ONIXS_ICEBOE_EXPORTED_CLASS
#define ONIXS_ICEBOE_NAMESPACE_END
#define ONIXS_ICEBOE_MESSAGING_NAMESPACE_END
#define ONIXS_ICEBOE_EXPORTED
static size_t calculateBatchSize(MessageBatchCombiner &msgs) noexcept
static bool fitSize(MessageBatchCombiner &msgs, size_t size=defaultMaxPacketSize()) noexcept
static size_t fitSize(MessageBatch< SbeMessageType, MaxMessageSize, MessageInitializer > &msgs, size_t size=defaultMaxPacketSize()) noexcept
static size_t calculateBatchSize(MessageBatch< SbeMessageType, MaxMessageSize, MessageInitializer > &msgs) noexcept
The class can be used to combine messages with different types to the batch for sending.
MessageBatchCombiner()=default
Creates an empty message batch combiner.
void add(MessageBatch< MessageTypeT, MaxMessageSize, MessageInitializer > &batch)
Adds the message batch to the array of combined messages.
void add(MessageBatch< MessageTypeT, MaxMessageSize, MessageInitializer > &&batch)=delete
MessageBatchCombiner & operator=(const MessageBatchCombiner &)=delete
MessageBatchCombiner(const MessageBatchCombiner &)=delete
void add(MessageHolder< MessageTypeT, MaxMessageSize, MessageInitializer > &holder)
Adds the message to the array of combined messages.
NetMessagesRange getRange(size_t index) noexcept
Provides a range of messages.
void clear()
Removes all combined messages.
void add(MessageHolder< MessageTypeT, MaxMessageSize, MessageInitializer > &&holder)=delete
The message batch wrapper.
MessageBatch(size_t size)
Creates a message batch with the given number of default constructed messages.
MessageHolder< MessageTypeT, MaxMessageSize, MessageInitializer > MsgHolder
const_iterator begin() const
void add(const MsgHolder &msg)
Appends a message to the end of the batch.
typename MsgHolders::const_iterator const_iterator
void updateHeaders()
Updates headers of SBE messages to be ready for sending.
MsgHolder & operator[](size_t index)
MessageBatch & operator=(const MessageBatch &)=delete
const MsgHolder & operator[](size_t index) const
typename MsgHolders::iterator iterator
MessageBatch(const MessageBatch &)=delete
MessageBatch()=default
Creates an empty message batch.
const_iterator end() const
std::vector< MsgHolder > MsgHolders
MessageBatch(std::initializer_list< MsgHolder > list)
Creates a message batch from the initializer list.
Contains the SimpleOpenFramingHeader, the SBE message, and the data buffer.
NetworkMessage toNetworkMessage() noexcept
constexpr UInt8 DefaultMaxGroupItems
Default maximum number of repeating group items.
constexpr std::enable_if<!details::HasMemberTraits< Value >::value, size_t >::type size() noexcept
std::vector< NetworkMessage > NetMessages
std::pair< NetworkMessage *, NetworkMessage * > NetMessagesRange
The policy to create messages with null-initialized optional fields.