51 template <
typename SbeMessageType>
52 inline static SbeMessageType createMessage(
55 return SbeMessageType(data, length, version);
61 return "FieldsInitPolicy";
69 template <
typename SbeMessageType>
70 inline static SbeMessageType createMessage(
73 return SbeMessageType(
80 return "FieldsNoInitPolicy";
89 IsBaseOf<TagBased::Message, MessageType>::value
93template <
typename MessageType>
98 IsBaseOf<TagBased::Message, MessageType>::value));
107 SbeType::EncodedLength
116 : MessageType(
SbeType(data, length, version))
125 : MessageType(
SbeType(data, length, version))
133 : MessageType(
SbeType(data, length))
153template <
typename MessageType>
158 IsBaseOf<SbeMessage, MessageType>::value));
165 SbeType::EncodedLength
174 : MessageType(data, length, version)
183 : MessageType(data, length, version)
191 : MessageType(data, length)
211template <
typename,
size_t,
typename>
214 template <
typename,
size_t,
typename>
class HolderType,
216 size_t MaxMessageSize,
217 typename MessageInitializer>
220 const HolderType<MsgType, MaxMessageSize, MessageInitializer>& holder)
222 str +=
"MessageHolder[";
224 str +=
"BufferSize=";
225 toStr(str, holder.BufferSize);
227 str +=
", MessageInitializer=";
228 str += MessageInitializer::name();
231 toStr(str, *holder.header());
234 toStr(str, holder.message());
249 typename MessageTypeT,
250 size_t MaxMessageSize =
255 typedef typename HeldAdapter<MessageTypeT>::SbeType SbeType;
257 ONIXS_ILINK3_STATIC_ASSERT_MSG(
259 "MaxMessageSize template parameter is too small");
261 ONIXS_ILINK3_STATIC_ASSERT_MSG(
262 (MaxMessageSize >= GetMinMessageSize<SbeType>::Size),
263 "The buffer can not fit the message");
265 ONIXS_ILINK3_STATIC_ASSERT_MSG(
267 "The buffer is too large.");
369 message().calculateBinarySize();
371 assert(calculatedMessageSize <= MaxMessageSize);
374 calculatedMessageSize >=
375 SbeType::blockLength(
message().version()) +
377 SbeType::getMinimalVariableFieldsSize(
message().version()));
380 return calculatedMessageSize;
404#ifdef ONIXS_ILINK3_MEMCHECK_DEBUG
405 std::memset(buffer_, magicDebugValue, BufferSize);
409 message_ = MessageInitializer::template createMessage<MessageType>(
419 void copyFrom(
const MessageHolder& r)
421#ifdef ONIXS_ILINK3_MEMCHECK_DEBUG
422 std::memset(buffer_, magicDebugValue, BufferSize);
425 const size_t sizeToCopy = r.message_.MessageType::calculateBinarySize() +
sizeof(SimpleOpenFramingHeader);
427 assert(r.message_.calculateBinarySize() <= MaxMessageSize);
436 buffer_ +
sizeof(SimpleOpenFramingHeader),
438 SbeMessage::NoInit(),
439 SbeMessage::NoCheck());
443 MessageType message_;
444 unsigned char buffer_[BufferSize];
448 template <
typename,
size_t,
typename>
class HolderType,
450 size_t MaxMessageSize,
451 typename MessageInitializer>
453 const HolderType<MsgType, MaxMessageSize, MessageInitializer>& holder)
461 template <
typename,
size_t,
typename>
class HolderType,
463 size_t MaxMessageSize,
464 typename MessageInitializer>
466 std::ostream& stream,
467 const HolderType<MsgType, MaxMessageSize, MessageInitializer>& rhs)
469 return stream <<
toStr(rhs);
#define ONIXS_ILINK3_MESSAGING_NAMESPACE_END
#define ONIXS_ILINK3_MESSAGING_NAMESPACE_BEGIN
#define ONIXS_ILINK3_EXPORTED_CLASS
#define ONIXS_ILINK3_NODISCARD
#define ONIXS_ILINK3_FINAL
#define ONIXS_ILINK3_CONST_OR_CONSTEXPR
#define ONIXS_ILINK3_EXPORTED
#define ONIXS_ILINK3_DEFAULT
#define ONIXS_ILINK3_NOTHROW
Contains the SimpleOpenFramingHeader, the SBE message, and the data buffer.
std::string toString() const
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
Calculates the binary size of the message and updates the Simple Open Framing Header accordingly.
const MessageType * operator->() const noexcept
UInt16 bufferSize() const noexcept
MessageHolder(const Session &session)
MessageType * operator->() noexcept
A network iLink3 message.
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.
MessageHeader::Version SchemaVersion
SBE-encoded data version type.
constexpr UInt16 MaxILink3MessageSize
Maximum supported message size.
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.
HeldAdapter(void *data, EncodedLength length, SbeMessage::NoFieldsInit, SchemaVersion version)
HeldAdapter(void *data, EncodedLength length, SbeMessage::NoInit, SbeMessage::NoCheck) noexcept
SbeType::EncodedLength EncodedLength
HeldAdapter(void *data, EncodedLength length, SbeMessage::NoInit)
ONIXS_ILINK3_STATIC_ASSERT((IsBaseOf< SbeMessage, MessageType >::value))
HeldAdapter(void *data, EncodedLength length, SbeMessage::NoFieldsInit, SchemaVersion version)
HeldAdapter(void *data, EncodedLength length, SbeMessage::NoInit, SbeMessage::NoCheck) noexcept
SbeType::EncodedLength EncodedLength
ONIXS_ILINK3_STATIC_ASSERT((IsBaseOf< TagBased::Message, MessageType >::value))
HeldAdapter(void *data, EncodedLength length, SbeMessage::NoInit)
MessageType::Binary SbeType