OnixS C++ B3 BOE Binary Order Entry 1.3.0
API Documentation
Loading...
Searching...
No Matches
MessageBatch.h
Go to the documentation of this file.
1// Copyright Onix Solutions Limited [OnixS]. All rights reserved.
2//
3// This software owned by Onix Solutions Limited [OnixS] and is
4// protected by copyright law and international copyright treaties.
5//
6// Access to and use of the software is governed by the terms of the applicable
7// OnixS Software Services Agreement (the Agreement) and Customer end user license
8// agreements granting a non-assignable, non-transferable and non-exclusive license
9// to use the software for it's own data processing purposes under the terms defined
10// in the Agreement.
11//
12// Except as otherwise granted within the terms of the Agreement, copying or
13// reproduction of any part of this source code or associated reference material
14// to any other location for further reproduction or redistribution, and any
15// amendments to this copyright notice, are expressly prohibited.
16//
17// Any reproduction or redistribution for sale or hiring of the Software not in
18// accordance with the terms of the Agreement is a violation of copyright law.
19//
20
21#pragma once
22
23#include <vector>
24
28
29namespace OnixS
30{
31 namespace B3
32 {
33 namespace BOE
34 {
36 }
37 }
38}
39
41
42typedef std::vector<NetworkMessage> NetMessages;
44
45#if defined (ONIXS_B3_BOE_CXX11)
46
50template <typename MessageTypeT,
51size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType, DefaultMaxGroupItems>::Size,
52typename MessageInitializer = FieldsInitPolicy>
54{
55public:
56
58 using MsgHolders = std::vector<MsgHolder>;
59
60 using iterator = typename MsgHolders::iterator;
61 using const_iterator = typename MsgHolders::const_iterator;
62
67 MessageBatch() = default;
68
73 explicit MessageBatch(size_t size) : batch_(size)
74 {
76 }
77
82 MessageBatch(std::initializer_list<MsgHolder> list) : batch_(list)
83 {
85 }
86
87 MessageBatch(const MessageBatch &) = delete;
88 MessageBatch & operator=(const MessageBatch &) = delete;
89
93 void add(const MsgHolder & msg)
94 {
95 batch_.push_back(msg);
96 }
97
106 {
107 netMsgs_.resize(batch_.size());
108
109 for (size_t counter = 0; counter < batch_.size(); ++counter)
110 netMsgs_[counter] = batch_[counter].toNetworkMessage();
111 }
112
113 MsgHolder & operator[](size_t index) { return batch_[index]; }
114 const MsgHolder & operator[](size_t index) const { return batch_[index]; }
115
116 size_t size() const { return batch_.size(); }
117
118 const_iterator begin() const { return batch_.begin(); }
119 iterator begin() { return batch_.begin(); }
120
121 const_iterator end() const { return batch_.end(); }
122 iterator end() { return batch_.end(); }
123
124private:
125
128
129 MsgHolders batch_;
130 NetMessages netMsgs_;
131};
132
140{
141public:
142
148
153 template <typename MessageTypeT,
154 size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType, DefaultMaxGroupItems>::Size,
155 typename MessageInitializer = FieldsInitPolicy>
157 {
158 for (auto & holder : batch)
159 netMsgs_.push_back(holder.toNetworkMessage());
160 }
161
162 template <typename MessageTypeT,
163 size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType, DefaultMaxGroupItems>::Size,
164 typename MessageInitializer = FieldsInitPolicy>
166
171 template <typename MessageTypeT,
172 size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType, DefaultMaxGroupItems>::Size,
173 typename MessageInitializer = FieldsInitPolicy>
175 {
176 netMsgs_.push_back(holder.toNetworkMessage());
177 }
178
179 template <typename MessageTypeT,
180 size_t MaxMessageSize = GetMaxMessageSize<typename HeldAdapter<MessageTypeT>::SbeType, DefaultMaxGroupItems>::Size,
181 typename MessageInitializer = FieldsInitPolicy>
183
187 void clear()
188 {
189 netMsgs_.clear();
190 }
191
194
195private:
196
199
200 NetMessages netMsgs_;
201};
202
204{
205public:
207 template <typename SbeMessageType, size_t MaxMessageSize, typename MessageInitializer>
213
215 template <typename SbeMessageType, size_t MaxMessageSize, typename MessageInitializer>
216 static size_t fitSize(
218 {
219 return calculateBatchSize(msgs) <= size;
220 }
221
224 {
225 return calculateBatchSize(msgs.netMsgs_);
226 }
227
229 static bool fitSize(MessageBatchCombiner & msgs, size_t size = defaultMaxPacketSize()) ONIXS_B3_BOE_NOTHROW
230 {
231 return calculateBatchSize(msgs) <= size;
232 }
233
234private:
236 static size_t calculateBatchSize(const NetMessages& msgs) ONIXS_B3_BOE_NOTHROW;
237
239 static size_t defaultMaxPacketSize() ONIXS_B3_BOE_NOTHROW;
240};
241
242#endif
243
#define ONIXS_B3_BOE_EXPORTED_CLASS
Definition ABI.h:44
#define ONIXS_B3_BOE_MESSAGING_NAMESPACE_END
Definition ABI.h:144
#define ONIXS_B3_BOE_MESSAGING_NAMESPACE_BEGIN
Definition ABI.h:140
#define ONIXS_B3_BOE_EXPORTED
Definition Compiler.h:181
#define ONIXS_B3_BOE_NOTHROW
Definition Compiler.h:182
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.
void clear()
Removes all combined messages.
void add(MessageHolder< MessageTypeT, MaxMessageSize, MessageInitializer > &&holder)=delete
MessageBatch(size_t size)
Creates a message batch with the given number of default constructed messages.
MessageHolder< MessageTypeT, MaxMessageSize, MessageInitializer > MsgHolder
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.
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
A FIXP Session.
Definition Session.h:48
constexpr UInt8 DefaultMaxGroupItems
Default maximum number of repeating group items.
std::vector< NetworkMessage > NetMessages
The policy to create messages with null-initialized optional fields.