46#if defined (ONIXS_ILINK3_CXX11)
51template <
typename MessageTypeT,
52size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType,
DefaultMaxGroupItems>::Size,
61 using iterator =
typename MsgHolders::iterator;
96 batch_.push_back(msg);
108 netMsgs_.resize(batch_.size());
110 for (
size_t counter = 0; counter < batch_.size(); ++counter)
111 netMsgs_[counter] = batch_[counter].toNetworkMessage();
117 size_t size()
const {
return batch_.size(); }
154 template <
typename MessageTypeT,
155 size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType,
DefaultMaxGroupItems>::Size,
159 netMsgs_.reserve(batch.
size());
160 for (
auto & holder : batch)
161 netMsgs_.push_back(holder.toNetworkMessage());
164 template <
typename MessageTypeT,
165 size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType,
DefaultMaxGroupItems>::Size,
173 template <
typename MessageTypeT,
174 size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType,
DefaultMaxGroupItems>::Size,
181 template <
typename MessageTypeT,
182 size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType,
DefaultMaxGroupItems>::Size,
199 assert(!netMsgs_.empty());
200 return {&*netMsgs_.begin(), &*(netMsgs_.begin() + index)};
218 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
226 template <
typename SbeMessageType,
size_t MaxMessageSize,
typename MessageInitializer>
247 static size_t calculateBatchSize(
const NetMessages& msgs)
noexcept;
250 static size_t defaultMaxPacketSize() noexcept;
#define ONIXS_ILINK3_MESSAGING_NAMESPACE_END
#define ONIXS_ILINK3_MESSAGING_NAMESPACE_BEGIN
#define ONIXS_ILINK3_EXPORTED_CLASS
#define ONIXS_ILINK3_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.
std::vector< NetworkMessage > NetMessages
std::pair< NetworkMessage *, NetworkMessage * > NetMessagesRange
The policy to create messages with null-initialized optional fields.