50 template <
typename SbeMessageType>
51 inline static SbeMessageType createMessage(
54 return SbeMessageType(data, length, version);
60 return "FieldsInitPolicy";
68 template <
typename SbeMessageType>
69 inline static SbeMessageType createMessage(
72 return SbeMessageType(
79 return "FieldsNoInitPolicy";
84template <
typename MessageType>
87 ONIXS_B3_BOE_STATIC_ASSERT((
88 IsBaseOf<SbeMessage, MessageType>::value));
90 enum { isFix =
false };
95 SbeType::EncodedLength
102 EncodedLength length,
110 EncodedLength length,
111 SbeMessage::NoFieldsInit,
112 SchemaVersion version)
113 : MessageType(data, length, version)
119 EncodedLength length,
121 : MessageType(data, length)
127 EncodedLength length,
134 SbeMessage::NoInit(),
135 SbeMessage::NoCheck())
141template <
typename,
size_t,
typename>
144 template <
typename,
size_t,
typename>
class HolderType,
146 size_t MaxMessageSize,
147 typename MessageInitializer>
150 const HolderType<MsgType, MaxMessageSize, MessageInitializer>& holder,
bool skipHeader =
false,
bool skipEmptyFields =
false)
152 str +=
"MessageHolder[";
154 str +=
"BufferSize=";
155 toStr(str, holder.BufferSize);
157 str +=
", MessageInitializer=";
158 str += MessageInitializer::name();
163 toStr(str, *holder.header());
169 static_cast<const MsgType&
>(holder.message()),
185 typename MessageTypeT,
186 size_t MaxMessageSize =
191 typedef typename HeldAdapter<MessageTypeT>::SbeType SbeType;
193 ONIXS_B3_BOE_STATIC_ASSERT_MSG(
195 "MaxMessageSize template parameter is too small");
197 ONIXS_B3_BOE_STATIC_ASSERT_MSG(
198 (MaxMessageSize >= GetMinMessageSize<SbeType>::Size),
199 "The buffer can not fit the message");
201 ONIXS_B3_BOE_STATIC_ASSERT_MSG(
203 "The buffer is too large.");
305 message().calculateBinarySize();
307 assert(calculatedMessageSize <= MaxMessageSize);
310 calculatedMessageSize >=
311 SbeType::blockLength(
message().version()) +
313 SbeType::getMinimalVariableFieldsSize(
message().version()));
316 return calculatedMessageSize;
332 std::string
toString(
bool skipHeader =
false,
bool skipEmptyFields =
false)
const
334 return toStr(*
this, skipHeader, skipEmptyFields);
340#ifdef ONIXS_B3_BOE_MEMCHECK_DEBUG
341 std::memset(buffer_, magicDebugValue, BufferSize);
345 message_ = MessageInitializer::template createMessage<MessageType>(
355 void copyFrom(
const MessageHolder& r)
357#ifdef ONIXS_B3_BOE_MEMCHECK_DEBUG
358 std::memset(buffer_, magicDebugValue, BufferSize);
361 const size_t sizeToCopy = r.message_.MessageType::calculateBinarySize() +
sizeof(SimpleOpenFramingHeader);
363 assert(r.message_.calculateBinarySize() <= MaxMessageSize);
372 buffer_ +
sizeof(SimpleOpenFramingHeader),
374 SbeMessage::NoInit(),
375 SbeMessage::NoCheck());
379 MessageType message_;
380 unsigned char buffer_[BufferSize];
384 template <
typename,
size_t,
typename>
class HolderType,
386 size_t MaxMessageSize,
387 typename MessageInitializer>
389 const HolderType<MsgType, MaxMessageSize, MessageInitializer>& holder,
bool skipHeader =
false,
bool skipEmptyFields =
false)
392 toStr(res, holder, skipHeader, skipEmptyFields);
397 template <
typename,
size_t,
typename>
class HolderType,
399 size_t MaxMessageSize,
400 typename MessageInitializer>
402 std::ostream& stream,
403 const HolderType<MsgType, MaxMessageSize, MessageInitializer>& rhs)
405 return stream <<
toStr(rhs);
#define ONIXS_B3_BOE_EXPORTED_CLASS
#define ONIXS_B3_BOE_MESSAGING_NAMESPACE_END
#define ONIXS_B3_BOE_MESSAGING_NAMESPACE_BEGIN
#define ONIXS_B3_BOE_NODISCARD
#define ONIXS_B3_BOE_DEFAULT
#define ONIXS_B3_BOE_EXPORTED
#define ONIXS_B3_BOE_CONST_OR_CONSTEXPR
#define ONIXS_B3_BOE_NOTHROW
NetworkMessage toNetworkMessage() noexcept
MessageHolder & operator=(const MessageHolder &r)
SimpleOpenFramingHeader * header() noexcept
MessageType & message() noexcept
UInt16 messageSize() const noexcept
HeldAdapter< MessageTypeT > MessageType
const MessageType & message() const noexcept
MessageHolder(SchemaVersion version=SbeType::Schema::Version)
MessageHolder(const MessageHolder &r)
const SimpleOpenFramingHeader * header() const noexcept
const unsigned char * buffer() const noexcept
MessageSize setHeader() noexcept
const MessageType * operator->() const noexcept
std::string toString(bool skipHeader=false, bool skipEmptyFields=false) const
UInt16 bufferSize() const noexcept
MessageHolder(const Session &session)
MessageType * operator->() noexcept
constexpr UInt8 DefaultMaxGroupItems
Default maximum number of repeating group items.
std::ostream & operator<<(std::ostream &stream, const FloatingPointDecimal< Mantissa, Exponent > &value)
Serializes into a stream.
constexpr UInt16 MaxB3BOEMessageSize
Maximum supported message size.
MessageHeader::Version SchemaVersion
SBE-encoded data version type.
std::string toStr(const FixedPointDecimal< Mantissa, Exponent > &)
Serializes a fixed-point decimal into a string.
UInt16 MessageSize
Message length type.
Messaging::SchemaVersion getMessagingVersion(const Session &) noexcept
The policy to create messages with null-initialized optional fields.
The policy to create messages without initialized optional fields.