43 template<
typename Message>
inline 46 if ONIXS_ILINK3_UNLIKELY(length < minimalRequiredLength)
47 throwBinaryBlockIsTooSmall(length, minimalRequiredLength, Message::className());
62 template < class Container, class BlockLength >
68 return *static_cast <
const Container*> (
this);
81 assert(container().blockLength() >= (offset + size<Value>()) &&
82 "The requested field exceeds provided block boundaries.");
84 const void*
const location = advanceByBytes(container().block(), offset);
85 return getValue<Value>(location);
95 value = ordinary<Value>(offset);
97 return (null != value);
107 return (since <= container().version() && ordinary (value, offset, null ) );
114 typedef typename Enumeration::Base
Base;
115 typedef typename Enumeration::Enum Enum;
117 return static_cast<Enum
>(ordinary<Base>(offset));
124 typedef typename Enumeration::Base
Base;
125 typedef typename Enumeration::Enum Enum;
127 value = static_cast <Enum>(ordinary<Base>(offset));
128 return null != value;
135 return (since <= container().version() && enumeration<Enumeration>(value, offset, null) );
142 return ordinary<Value>(offset);
152 value = ordinary<Value>(offset);
153 return null != value;
163 return (since <= container().version() && decimal(value, offset, null));
170 assert(container().blockLength() >= (offset + Length) &&
"The requested field exceeds provided block boundaries.");
172 const Char*
const text = reinterpret_cast <
const Char*> (advanceByBytes(container().block(), offset));
174 return StrRef(text, strnlen(text, Length));
184 value = fixedStr<Length>(offset);
185 return !value.empty();
195 return (since <= container().version() && fixedStr<Length>(value, offset));
203 template <
class Container,
class BlockLength >
210 return *
static_cast<Container*
>(
this);
217 const BlockLength encodedBlockLength = container().blockLength();
219 assert(encodedBlockLength >= offset);
221 const size_t paddingLength = encodedBlockLength - offset;
222 std::memset(advanceByBytes(container().block(), offset), 0, paddingLength);
229 assert(container().blockLength() >= (offset + size<FieldValue>()) &&
"The requested field exceeds provided block boundaries.");
231 void*
const fieldPos = advanceByBytes(container().block(), offset);
232 setValue(fieldPos, value);
239 if ONIXS_ILINK3_UNLIKELY(since > container().version())
240 throwDisallowedField();
242 setOrdinary(offset, value);
249 typedef typename Enumeration::Base
Base;
250 setOrdinary<Base>(offset,
static_cast<Base
>(value));
257 typedef typename Enumeration::Base
Base;
258 setOrdinary(offset, static_cast<Base>(value), since);
265 assert(container().blockLength() >= (offset + Size) &&
"The requested field exceeds provided block boundaries.");
266 assert(value.size() <= Size &&
"The string is truncated.");
268 void*
const fieldPos = advanceByBytes(container().block(), offset);
269 const size_t sizeToCopy = (std::min)(Size, static_cast<BlockLength>(value.size()));
272 std::memcpy(fieldPos, value.data(), sizeToCopy);
274 std::memset(advanceByBytes(fieldPos, sizeToCopy), 0, Size - sizeToCopy);
281 if ONIXS_ILINK3_UNLIKELY(since > container().version())
282 throwDisallowedField();
284 setFixedStr<Size>(offset, value);
295 template <
class BodySizeType>
377 template <
class EntryType,
class BlockLength,
class NumInGroup,
class Length >
434 return Entry(entry_, size_, version_);
438 Entry operator *()
const 446 return entry_ == other.entry_;
452 return entry_ != other.entry_;
458 return entry_ < other.entry_;
464 return entry_ > other.entry_;
472 entry_ = advanceByBytes(entry_, size_);
482 entry_ = advanceBackByBytes(entry_, size_);
493 return Iterator(advanceByBytes(entry_, distance * size_), size_, version_);
502 return Iterator(advanceBackByBytes(entry_, distance * size_), size_, version_);
523 , blockLength_(blockLength)
528 assert(blockLength > 0);
529 assert(version != 0);
553 return Iterator(encoded(), blockLength_, version_);
559 return Iterator(advanceByBytes(encoded(), encodedLength()), blockLength_, version_);
565 Entry operator [](Size index)
const 567 assert(index < size_);
570 return Entry(advanceByBytes(encoded_, static_cast<ptrdiff_t>(index) * blockLength_), blockLength_, version_);
582 return (static_cast<EncodedLength>(blockLength_) * static_cast<EncodedLength>(size_) );
586 template<
class OtherEntry,
class OtherBlockLength,
class OtherNumInGroup,
class OtherLength >
588 : encoded_(other.encoded_)
589 , blockLength_(other.blockLength_)
591 , version_(other.version_)
596 assert(blockLength_ == other.blockLength_);
597 assert(size_ == other.size_);
600 template <
class OtherEntry,
class OtherBlockLength,
class OtherNumInGroup,
class OtherLength>
603 encoded_ = other.encoded_;
605 blockLength_ = other.blockLength_;
607 assert(blockLength_ == other.blockLength_);
611 assert(size_ == other.size_);
613 version_ = other.version_;
620 template <
class OtherEntry,
class OtherBlockLength,
class OtherNumInGroup,
class OtherLength>
friend class SbeGroupEntries;
623 BlockLength blockLength_;
629 template <
class EntryType,
class DimensionType,
class GroupSizeType >
640 enum { EmptySize = Dimension::Size };
661 , entries_(ONIXS_ILINK3_NULLPTR)
669 : header_(static_cast <Dimension*>(data))
670 , entries_(advanceByBytes(data, Dimension::Size))
673 ONIXS_ILINK3_ASSERT(size >= Dimension::Size);
701 const Dimension*
const group =
static_cast<const Dimension*
>(header_);
703 return group->numInGroup();
712 return Iterator(entries_, numericCast<Size>(entrySize()), version_);
721 return Iterator(advanceByBytes(binary(), binarySize()), numericCast<Size>(entrySize()), version_);
728 Entry operator [](Size index)
const 731 assert(index < size());
733 return Entry(advanceByBytes(entries_, static_cast<ptrdiff_t>(index) * entrySize()), entrySize(), version_);
743 return Entries (entries_, header_->blockLength(), header_->numInGroup(), version_);
755 return advanceByBytes(toByteBlock(encoded()), binarySize());
769 return Dimension::Size + (
static_cast<BinarySize
>(entrySize()) * static_cast<BinarySize>(size()));
779 Dimension*
const group =
static_cast<Dimension*
>(header_);
780 return group->blockLength();
790 Dimension*
const group =
static_cast<Dimension*
>(header_);
791 group->setBlockLength(entrySize);
792 group->setNumInGroup(0);
796 Size allocate(Size entryCount,
const void* messageTail,
const void* blockEnd)
802 Dimension*
const group =
static_cast<Dimension*
>(header_);
804 const EntrySize entrySize = group->blockLength();
806 if ONIXS_ILINK3_UNLIKELY(
807 entrySize < EntryType::blockLength(version_))
809 throwBadBinaryBlock();
812 const Size oldEntryCount = group->numInGroup();
814 if(oldEntryCount == entryCount)
817 const ptrdiff_t memShift =
818 (entryCount - oldEntryCount) * static_cast<ptrdiff_t>(entrySize);
820 const void*
const newMessageTail =
821 advanceByBytes(messageTail, memShift);
823 if ONIXS_ILINK3_UNLIKELY(byteDistance(blockEnd, newMessageTail) < 0)
824 throwNotEnoughSpace();
826 const void*
const oldEndOfGroup =
827 advanceByBytes(entries_, static_cast<ptrdiff_t>(entrySize) * oldEntryCount);
829 void*
const newEndGroup =
830 advanceByBytes(entries_, static_cast<ptrdiff_t>(entrySize) * entryCount);
835 byteDistance(messageTail, oldEndOfGroup));
837 group->setNumInGroup(entryCount);
839 return oldEntryCount;
844 void setup(Size entryCount,
const void* messageTail,
const void* blockEnd)
850 const Size oldEntryCount = allocate(entryCount, messageTail, blockEnd);
852 for(Size index = oldEntryCount; index < entryCount; ++index)
853 zeroPaddingBytes((*
this)[index].resetVariableFields());
858 void construct(Size entryCount,
const void* messageTail,
const void* blockEnd)
864 const Size oldEntryCount = allocate(entryCount, messageTail, blockEnd);
866 for(Size index = oldEntryCount; index < entryCount; ++index)
867 zeroPaddingBytes((*
this)[index].reset());
871 static void zeroPaddingBytes(Entry& entry)
873 assert(entry.valid());
874 entry.zeroPaddingBytes(EntryType::minimalBlockLength(entry.version()));
886 template <
class BinarySize >
906 template<
class BinaryVariableLengthFieldType>
909 return *
static_cast<BinaryVariableLengthFieldType*
>(binary_);
918 const BinarySize headSize = head<BinaryVariableLengthFieldType>().binarySize();
920 assert(headSize <= size_);
931 if ONIXS_ILINK3_UNLIKELY(empty() || (size_ < BinaryVariableLengthFieldType::Size))
933 throwBadBinaryBlock();
936 const BinarySize headSize = head<BinaryVariableLengthFieldType>().binarySize();
938 if ONIXS_ILINK3_UNLIKELY(headSize > size_)
940 throwBadBinaryBlock();
954 template <
class BinarySize>
979 return Group(binary_, size_, version_);
988 const BinarySize headSize = head<Group>().binarySize();
990 assert(headSize <= size_);
992 return SbeGroupList(advanceByBytes(binary_, headSize), size_ - headSize, version_);
1001 const BinarySize headSize = head<Group>().binarySize();
1003 assert(headSize <= size_);
1014 const BinarySize headSize = checkHead<Group>();
1016 return SbeGroupList(advanceByBytes(binary_, headSize), size_ - headSize, version_);
1025 const BinarySize headSize = checkHead<Group>();
1031 template<
class Group>
1032 BinarySize checkHead()
const 1034 if ONIXS_ILINK3_UNLIKELY(size_ < Group::Dimension::Size)
1036 throwBadBinaryBlock();
1039 const Group group = head<Group>();
1041 const BinarySize headSize = group.binarySize();
1043 if ONIXS_ILINK3_UNLIKELY(headSize > size_)
1045 throwBadBinaryBlock();
1050 const BinarySize entrySize = group.entrySize();
1051 const BinarySize expectedEntrySize = Group::Entry::minimalBlockLength(version_);
1053 if ONIXS_ILINK3_UNLIKELY(entrySize < expectedEntrySize)
1055 throwBadBinaryBlock();
1068 template<
typename Traits>
1071 if ONIXS_ILINK3_UNLIKELY(version < Traits::MinimalVersion)
1073 throwBadMessageVersion(version, Traits::MinimalVersion);
1078 template<
typename Traits>
1081 checkVersion<Traits>(version);
1083 if ONIXS_ILINK3_UNLIKELY(version < since)
1085 throwBadMessageVersion(version, since);
1090 template<
typename Traits>
1093 if ONIXS_ILINK3_UNLIKELY(
id != Traits::Id)
1095 throwBadSchemaId(Traits::Id,
id);
1100 template<
typename Traits>
1103 checkSchemaId<Traits>(id);
1104 checkVersion<Traits>(version);
1138 if ONIXS_ILINK3_UNLIKELY(size < MessageHeader::Size)
1139 throwBinaryBlockIsTooSmall(size, MessageHeader::Size);
1141 this->version(version);
1153 if ONIXS_ILINK3_UNLIKELY(size < MessageHeader::Size)
1154 throwBinaryBlockIsTooSmall(size, MessageHeader::Size);
1157 if ONIXS_ILINK3_UNLIKELY(size < (MessageHeader::Size + header_->blockLength()))
1158 throwBinaryBlockIsTooSmall(size, MessageHeader::Size + header_->blockLength());
1172 assert(size >= MessageHeader::Size);
1173 assert(size >= MessageHeader::Size + header_->blockLength());
1194 return header_->templateId();
1202 return header_->version();
1210 return header_->schemaId();
1234 return advanceByBytes(header_, size_);
1242 return advanceByBytes(header_, size_);
1256 return advanceByBytes(header_, MessageHeader::Size);
1264 return header_->blockLength();
1272 return advanceByBytes(header_, MessageHeader::Size);
1280 return advanceByBytes(header_, MessageHeader::Size);
1292 header_->setVersion(version);
1303 void* list = advanceByBytes<void>(body(), blockLength());
1305 const MessageSize listSize = size_ - MessageHeader::Size - header_->blockLength();
1307 return GroupList(list, listSize, header_->version());
1316 const void* list = advanceByBytes(block(), blockLength());
1318 const MessageSize listSize = size_ - MessageHeader::Size - header_->blockLength();
1320 return GroupList(const_cast<void*>(list), listSize, header_->version());
1324 template<
typename Group>
1328 assert(group.valid());
1329 group.init(entrySize);
1333 template<
typename Group>
1335 void setupGroup(Group& group,
typename Group::Size entryCount,
const void* messageTail)
1337 assert(messageTail);
1338 assert(group.valid());
1339 group.setup(entryCount, messageTail, blockEnd());
1343 template<
typename Group>
1345 void constructGroup(Group& group,
typename Group::Size entryCount,
const void* messageTail)
1347 assert(messageTail);
1348 assert(group.valid());
1349 group.construct(entryCount, messageTail, blockEnd());
1355 assert(oldMessageTail);
1357 const ptrdiff_t lengthChange =
static_cast<ptrdiff_t
>(value.length() - data.
length());
1359 const void*
const newMessageTail = advanceByBytes(oldMessageTail, lengthChange);
1361 if ONIXS_ILINK3_UNLIKELY(byteDistance(blockEnd(), newMessageTail) < 0)
1362 throwNotEnoughSpace();
1364 const void*
const oldEndOfData = advanceByBytes(data.
varData().data(), data.
varData().size());
1366 void*
const newEndOfData = toOpaquePtr(advanceByBytes(&data, value.
length() + DATA::Size));
1368 std::memmove(newEndOfData, oldEndOfData, byteDistance(oldMessageTail, oldEndOfData));
1382 void* list = advanceByBytes<void>(body(), blockLength());
1384 const MessageSize listSize = size_ - MessageHeader::Size - header_->blockLength();
1386 return VariableLengthFieldList(list, listSize, header_->version());
1395 const void* list = advanceByBytes(block(), blockLength());
1397 const MessageSize listSize = size_ - MessageHeader::Size - header_->blockLength();
1399 return VariableLengthFieldList(const_cast<void*>(list), listSize, header_->version());
1410 assert(blockLength >= minimalBlockLength);
1412 header_->setTemplateId(value);
1413 header_->setBlockLength(blockLength);
1414 header_->setSchemaId(
id);
1416 zeroPaddingBytes(minimalBlockLength);
1424 const ptrdiff_t distance = byteDistance(tail, binary());
1426 assert(distance > 0);
1428 assert(distance <= (std::numeric_limits<MessageSize>::max)());
1432 assert(size <= size_);
1438 template<
class Callable,
class Owner>
1441 setVarDataField(callable(owner), value, owner.tail());
1445 template<
class Callable,
class Owner>
1448 if ONIXS_ILINK3_UNLIKELY(since > version())
1449 throwDisallowedField();
1451 setVariableLengthField(callable, value, owner);
1455 template<
class Callable,
class Owner>
1458 ONIXS_ILINK3_CHECK_NOTHROW(callable(owner));
1459 return callable(owner).varData();
1463 template<
class Callable,
class Owner>
1466 if ONIXS_ILINK3_UNLIKELY(since > version())
1469 return getVariableLengthField(callable, owner);
1473 template<
class Callable,
class Owner>
1476 ONIXS_ILINK3_CHECK_NOTHROW(callable(owner));
1477 callable(owner).length(0);
1481 template<
class Group,
class Callable,
class Owner>
1484 const typename Group::EntrySize entrySize = Group::Entry::blockLength(version());
1486 Group grp = callable(owner);
1488 initGroup(grp, entrySize);
1492 template<
class Callable,
class Owner>
1495 if ONIXS_ILINK3_UNLIKELY(since > version())
1498 setVariableLengthFieldToNull(callable, owner);
1502 template<
class Group,
class Callable,
class Owner>
1505 if ONIXS_ILINK3_UNLIKELY(since > version())
1508 resetGroup<Group>(callable, owner);
1512 template<
class Group,
class Callable,
class Owner>
1515 ONIXS_ILINK3_CHECK_NOTHROW(callable(owner));
1516 return callable(owner);
1520 template<
class Group,
class Callable,
class Owner>
1523 if ONIXS_ILINK3_UNLIKELY(since > version())
1526 return getGroup<Group>(callable, owner);
1530 template<
class Group,
class Callable,
class Owner>
1533 if ONIXS_ILINK3_UNLIKELY(since > version())
1536 return constructGroup<Group>(callable, length, owner);
1540 template<
class Group,
class Callable,
class Owner>
1543 Group group = callable(owner);
1545 constructGroup(group, length, owner.tail());
1551 template<
class Group,
class Callable,
class Owner>
1554 if ONIXS_ILINK3_UNLIKELY(since > version())
1557 return setupGroup<Group>(callable, length, owner);
1561 template<
class Group,
class Callable,
class Owner>
1562 Group
setupGroup(Callable callable,
typename Group::Size length, Owner& owner)
1564 Group group = callable(owner);
1566 setupGroup(group, length, owner.tail());
#define ONIXS_ILINK3_CONSTEXPR
#define ONIXS_ILINK3_NULLPTR
MessageSize calculateBinarySize(const void *tail) const noexcept
bool enumeration(typename Enumeration::Enum &value, BlockLength offset, NullValue null) const noexcept
Provides access to an optional field value.
Group constructGroup(Callable callable, typename Group::Size length, SchemaVersion since, Owner &owner)
Creates a repeating group with the given number of entries, sets all optional fields of the group ent...
MessageHeader::TemplateId MessageTemplateId
Message type (template) identification.
Operations over SBE-encoded repeating group entries.
SbeGroupList checkTail() const
Checks the list consistency.
SbeGroupEntry()
Initializes a blank instance.
void checkSchemaId(SchemaId id)
Checks the compatibility with the provided SBE Schema ID.
Entries::Iterator Iterator
The iterator type for group entries.
Value ordinary(BlockLength offset) const noexcept
SbeVariableLengthFieldList(void *binary, BinarySize size, SchemaVersion version) noexcept
Initializes the list over the given memory block.
void setEnumeration(BlockLength offset, typename Enumeration::Enum value, SchemaVersion since)
Sets the field value.
SbeMessage(void *data, MessageSize size)
Initializes the instance over the given memory block.
const void * blockEnd() const noexcept
std::basic_string_view< Char > StrRef
void setFixedStr(BlockLength offset, StrRef value) noexcept
Sets the field value.
SchemaId schemaId() const noexcept
char Char
Character type alias.
bool valid() const noexcept
void setVariableLengthField(Callable callable, StrRef value, SchemaVersion since, Owner &owner)
Sets the value of the variable length field.
Length length() const noexcept
Entries entries() const noexcept
StrRef fixedStr(BlockLength offset) const noexcept
Provides access to a string field value.
MessageSize bufferSize() const noexcept
void setVariableLengthFieldToNull(Callable callable, SchemaVersion since, Owner &owner) noexcept
Sets the variable length field to null.
Group setupGroup(Callable callable, typename Group::Size length, SchemaVersion since, Owner &owner)
Setups the repeating group with the given number of entries.
bool decimal(Value &value, BlockLength offset, NullValue null) const noexcept
bool valid() const noexcept
BodySizeType BlockLength
Type to present the length of binary data of the repeating group entry.
Group getGroup(Callable callable, Owner &owner) const noexcept
void setEnumeration(BlockLength offset, typename Enumeration::Enum value) noexcept
Sets the field value.
Group getGroup(Callable callable, SchemaVersion since, Owner &owner) const noexcept
SchemaVersion version() const noexcept
void constructGroup(Group &group, typename Group::Size entryCount, const void *messageTail)
Initializes the group header, sets all optional fields to null.
SBE-encoded repeating group.
SbeGroup(void *data, BinarySize size, SchemaVersion version) noexcept
Initializes an instance referencing to a valid group of a given message.
MessageHeader::Version SchemaVersion
SBE-encoded data version type.
An iterator over SBE-encoded group entries.
SchemaVersion version() const noexcept
Operations over a repeating group instance.
SbeGroupEntries() noexcept
Initializes a blank instance referencing to nothing.
NumInGroup Size
Number of entries in the collection.
BlockLength blockLength() const noexcept
void * binary() const noexcept
Services to access fields stored in an SBE-encoded block of fixed-length fields.
GroupSizeType BinarySize
Length of group data.
Iterator end() const
Returns the iterator pointing to the entry behind the end of the group.
SbeGroupEntries(void *encoded, BlockLength blockLength, Size groupSize, SchemaVersion version) noexcept
Initializes the instance referencing to data.
Enumeration::Enum enumeration(BlockLength offset) const noexcept
Variable-length fields list.
ptrdiff_t difference_type
std::random_access_iterator_tag iterator_category
GroupList groups() const noexcept
BinarySize binarySize() const noexcept
bool fixedStr(StrRef &value, BlockLength offset) const noexcept
Provides access to an optional string field value.
VariableLengthFieldList variableLengthFields() const noexcept
void clear() noexcept
Blank the instance.
void resetGroup(Callable callable, SchemaVersion since, Owner &owner)
Resets the repeating group.
Iterator(void *entry, Size size, SchemaVersion version) noexcept
Initializes the instance to the given repeating group.
MessageSize EncodedLength
Length of the message binary data.
StrRef varData() const noexcept
Group constructGroup(Callable callable, typename Group::Size length, Owner &owner)
Creates a repeating group with the given number of entries, sets all optional fields of the group ent...
void setOrdinary(BlockLength offset, FieldValue value) noexcept
Sets the field value.
void setupGroup(Group &group, typename Group::Size entryCount, const void *messageTail)
Initializes the group header.
void checkVersion(SchemaVersion since, SchemaVersion version)
Checks the compatibility with the provided SBE Schema version.
SbeVariableLengthFieldList tail() const noexcept
bool decimal(Value &value, BlockLength offset, NullValue null, SchemaVersion since) const noexcept
MessageSize BlockLength
Length of the message body representing a block of fixed-length fields.
Value decimal(BlockLength offset) const noexcept
Iterator() noexcept
Initializes the instance that refers to nothing.
#define ONIXS_ILINK3_DEFAULT
BinaryVariableLengthFieldType & head() const noexcept
Group head() const noexcept
SbeGroupEntries(const SbeGroupEntries< OtherEntry, OtherBlockLength, OtherNumInGroup, OtherLength > &other) noexcept
Copy constructor.
#define ONIXS_ILINK3_LTWT_EXPORTED
Base services to access fields stored in an SBE-encoded block of memory.
void zeroPaddingBytes(BlockLength offset) noexcept
If specified, the extra space is padded at the end of each entry and should be set to zeroes by encod...
StrRef getVariableLengthField(Callable callable, SchemaVersion since, Owner &owner) const noexcept
GroupList groups() noexcept
bool ordinary(Value &value, BlockLength offset, NullValue null, SchemaVersion since) const noexcept
Provides access to an optional field value.
const void * encoded() const noexcept
SbeVariableLengthFieldList< BinarySize > checkVariableLengthFields() const
Checks the variable length fields list consistency.
EntryType Entry
The type of the repeating group entry.
#define ONIXS_ILINK3_LTWT_CLASS
void init(MessageHeader::TemplateId value, MessageHeader::BlockLength minimalBlockLength, MessageHeader::BlockLength blockLength, SchemaId id) noexcept
const void * block() const noexcept
const void * blockEnd() noexcept
const void * tail() const noexcept
bool valid() const noexcept
DimensionType Dimension
Repeating group dimension type.
Entries::Size Size
Number of entries in the group.
bool fixedStr(StrRef &value, BlockLength offset, SchemaVersion since) const noexcept
Provides access to an optional string field value.
const void * binary() const noexcept
void setOrdinary(BlockLength offset, FieldValue value, SchemaVersion since)
Sets the field value.
EntrySize entrySize() const noexcept
#define ONIXS_ILINK3_MESSAGING_NAMESPACE_END
SbeGroupList< MessageSize > GroupList
Binary group list instantiation.
void checkSchema(SchemaId id, SchemaVersion version)
Checks the compatibility with the provided SBE Schema version.
UInt16 MessageSize
Message length type.
bool ordinary(Value &value, BlockLength offset, NullValue null) const noexcept
Provides access to an optional field value.
StrRef getVariableLengthField(Callable callable, const Owner &owner) const noexcept
SbeMessage() noexcept
Initializes a blank instance.
SbeGroupEntry(void *encoded, BlockLength size, SchemaVersion version)
Initializes the instance from the memory block of the encoded message.
Length EncodedLength
The length of the binary data occupied by the group entries.
SbeVariableLengthFieldList< BinarySize > variableLengthFields() const noexcept
void * encoded() noexcept
SbeGroupList tail() const noexcept
void setVariableLengthField(Callable callable, StrRef value, Owner &owner)
Sets the value of the variable length field.
DimensionType::BlockLength EntrySize
Length of group entry data.
constexpr UInt16 MaxILink3MessageSize
Maximum supported message size.
void setVariableLengthFieldToNull(Callable callable, Owner &owner) noexcept
Resets the variable length field.
void initGroup(Group &group, typename Group::EntrySize entrySize) noexcept
Resets the group to the initial state.
bool enumeration(typename Enumeration::Enum &value, BlockLength offset, NullValue null, SchemaVersion since) const noexcept
Provides access to an optional field value.
Iterator begin() const noexcept
SbeVariableLengthFieldList checkTail() const
Checks the variable-length field list consistency.
void setFixedStr(BlockLength offset, StrRef value, SchemaVersion since)
Sets the field value.
bool empty() const noexcept
TimeSpan operator-(const TimeSpan &timeSpan) noexcept
Changes the sign of the Timestamp.
VariableLengthFieldList variableLengthFields() noexcept
SbeMessage(void *data, MessageSize size, SchemaVersion version)
Initializes the instance over the given memory block.
#define ONIXS_ILINK3_MESSAGING_NAMESPACE_BEGIN
SbeGroup() noexcept
Initializes a blank instance referencing to nothing.
#define ONIXS_ILINK3_HOTPATH
bool empty() const noexcept
MessageHeader::SchemaId SchemaId
Group setupGroup(Callable callable, typename Group::Size length, Owner &owner)
Setups the repeating group with the given number of entries.
EncodedLength encodedLength() const noexcept
void setVarDataField(DATA &data, StrRef value, const void *oldMessageTail)
Sets the variable length field value.
MessageTemplateId templateId() const noexcept
Entries::Entry Entry
Group entry type.
#define ONIXS_ILINK3_UNUSED
Size size() const noexcept
Container & container() noexcept
#define ONIXS_ILINK3_NODISCARD
Size size() const noexcept
bool valid() const noexcept
void resetGroup(Callable callable, Owner &owner) noexcept
Sets the group to the initial state.
SbeGroupList(void *binary, BinarySize size, SchemaVersion version) noexcept
Initializes the list over the memory block.
SbeMessage & version(SchemaVersion version) noexcept
Sets the SBE Schema version.
BlockLength blockLength() const noexcept
SbeVariableLengthFieldList< MessageSize > VariableLengthFieldList
Binary group list instantiation.
static constexpr MessageSize getMaxMessageSize() noexcept
Maximal message size.
#define ONIXS_ILINK3_NOTHROW
bool valid() const noexcept
void * encoded() const noexcept
const void * block() const noexcept
const void * encoded() const noexcept
bool empty() const noexcept
Iterator end() const noexcept
Timestamp operator+(const Timestamp ×tamp, const TimeSpan &timeSpan) noexcept
Adds the time interval.
SbeGroupEntries< EntryType, typename Dimension::BlockLength, typename Dimension::NumInGroup, GroupSizeType > Entries
Binary group blocks.
SbeMessage(void *data, MessageSize size, NoCheck) noexcept
Initializes the instance over the given memory block.
bool empty() const noexcept