diff --git a/1.4.1/annotated.html b/1.4.1/annotated.html new file mode 100644 index 0000000..27b090a --- /dev/null +++ b/1.4.1/annotated.html @@ -0,0 +1,174 @@ + + + + + + + + +sbepp: Class List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NsbeppThe main sbepp namespace
 NdetailNamespace for various implementation details. Should not be used directly
 Cbitset_baseBase class for bitsets
 Cbyte_rangeBase class for all reference semantics types
 Ccomposite_baseBase class for composites
 Cdynamic_array_refRepresents reference to dynamic arrays used for <data> elements
 Centry_baseBase class for group entries
 Cflat_group_baseBase class for a flat group
 Cmessage_baseBase class for messages
 Cnested_group_baseBase class for a nested group
 Coptional_baseBase class for optional types
 Crequired_baseBase class for required types
 Cstatic_array_refRepresents reference to fixed-size array
 Cbyte_typeTrait to get view's byte type
 Cchar_opt_tBuilt-in char optional type
 Cchar_tBuilt-in char required type
 Ccomposite_traitsProvides various traits/attributes of a <composite> element
 CcursorRepresents cursor which is used in cursor-based API. Clients should not use undocumented methods
 Cdata_traitsProvides various traits/attributes of a <data> element
 Cdefault_init_tTag for dynamic_array_ref::resize(). Used to skip value initialization
 Cdouble_opt_tBuilt-in double optional type
 Cdouble_tBuilt-in double required type
 Cenum_traitsProvides various traits/attributes of an <enum> element
 Cenum_value_traitsProvides various traits/attributes of a <validValue> element
 Cfield_traitsProvides various traits/attributes of a <field> element
 Cfloat_opt_tBuilt-in float optional type
 Cfloat_tBuilt-in float required type
 Cgroup_traitsProvides various traits/attributes of a <group> element
 Cint16_opt_tBuilt-in int16 optional type
 Cint16_tBuilt-in int16 required type
 Cint32_opt_tBuilt-in int32 optional type
 Cint32_tBuilt-in int32 required type
 Cint64_opt_tBuilt-in int64 optional type
 Cint64_tBuilt-in int64 required type
 Cint8_opt_tBuilt-in int8 optional type
 Cint8_tBuilt-in int8 required type
 Cis_enumChecks if T is an enumeration
 Cmessage_traitsProvides various traits/attributes of a <message> element
 Cnullopt_tTag type used to initialize optional types with null value
 Cschema_traitsProvides various traits/attributes of a <messageSchema> element
 Cset_choice_traitsProvides various traits/attributes of a <choice> element
 Cset_traitsProvides various traits/attributes of a <set> element
 Csize_bytes_checked_resultResult type of size_bytes_checked
 Ctraits_tagMaps representation type to its tag
 Ctype_traitsProvides various traits and attributes of a <type> element
 Cuint16_opt_tBuilt-in uint16 optional type
 Cuint16_tBuilt-in uint16 required type
 Cuint32_opt_tBuilt-in uint32 optional type
 Cuint32_tBuilt-in uint32 required type
 Cuint64_opt_tBuilt-in uint64 optional type
 Cuint64_tBuilt-in uint64 required type
 Cuint8_opt_tBuilt-in uint8 optional type
 Cuint8_tBuilt-in uint8 required type
 Cunknown_enum_value_tagTag for unknown enum values
+
+
+
+ + + + diff --git a/1.4.1/annotated_dup.js b/1.4.1/annotated_dup.js new file mode 100644 index 0000000..f7de0b4 --- /dev/null +++ b/1.4.1/annotated_dup.js @@ -0,0 +1,59 @@ +var annotated_dup = +[ + [ "sbepp", "namespacesbepp.html", [ + [ "detail", "namespacesbepp_1_1detail.html", [ + [ "bitset_base", "classsbepp_1_1detail_1_1bitset__base.html", "classsbepp_1_1detail_1_1bitset__base" ], + [ "byte_range", "classsbepp_1_1detail_1_1byte__range.html", "classsbepp_1_1detail_1_1byte__range" ], + [ "composite_base", "classsbepp_1_1detail_1_1composite__base.html", null ], + [ "dynamic_array_ref", "classsbepp_1_1detail_1_1dynamic__array__ref.html", "classsbepp_1_1detail_1_1dynamic__array__ref" ], + [ "entry_base", "classsbepp_1_1detail_1_1entry__base.html", "classsbepp_1_1detail_1_1entry__base" ], + [ "flat_group_base", "classsbepp_1_1detail_1_1flat__group__base.html", "classsbepp_1_1detail_1_1flat__group__base" ], + [ "message_base", "classsbepp_1_1detail_1_1message__base.html", null ], + [ "nested_group_base", "classsbepp_1_1detail_1_1nested__group__base.html", "classsbepp_1_1detail_1_1nested__group__base" ], + [ "optional_base", "classsbepp_1_1detail_1_1optional__base.html", "classsbepp_1_1detail_1_1optional__base" ], + [ "required_base", "classsbepp_1_1detail_1_1required__base.html", "classsbepp_1_1detail_1_1required__base" ], + [ "static_array_ref", "classsbepp_1_1detail_1_1static__array__ref.html", "classsbepp_1_1detail_1_1static__array__ref" ] + ] ], + [ "byte_type", "structsbepp_1_1byte__type.html", "structsbepp_1_1byte__type" ], + [ "char_opt_t", "classsbepp_1_1char__opt__t.html", null ], + [ "char_t", "classsbepp_1_1char__t.html", null ], + [ "composite_traits", "classsbepp_1_1composite__traits.html", "classsbepp_1_1composite__traits" ], + [ "cursor", "classsbepp_1_1cursor.html", "classsbepp_1_1cursor" ], + [ "data_traits", "classsbepp_1_1data__traits.html", "classsbepp_1_1data__traits" ], + [ "default_init_t", "structsbepp_1_1default__init__t.html", null ], + [ "double_opt_t", "classsbepp_1_1double__opt__t.html", null ], + [ "double_t", "classsbepp_1_1double__t.html", null ], + [ "enum_traits", "classsbepp_1_1enum__traits.html", "classsbepp_1_1enum__traits" ], + [ "enum_value_traits", "classsbepp_1_1enum__value__traits.html", null ], + [ "field_traits", "classsbepp_1_1field__traits.html", "classsbepp_1_1field__traits" ], + [ "float_opt_t", "classsbepp_1_1float__opt__t.html", null ], + [ "float_t", "classsbepp_1_1float__t.html", null ], + [ "group_traits", "classsbepp_1_1group__traits.html", "classsbepp_1_1group__traits" ], + [ "int16_opt_t", "classsbepp_1_1int16__opt__t.html", null ], + [ "int16_t", "classsbepp_1_1int16__t.html", null ], + [ "int32_opt_t", "classsbepp_1_1int32__opt__t.html", null ], + [ "int32_t", "classsbepp_1_1int32__t.html", null ], + [ "int64_opt_t", "classsbepp_1_1int64__opt__t.html", null ], + [ "int64_t", "classsbepp_1_1int64__t.html", null ], + [ "int8_opt_t", "classsbepp_1_1int8__opt__t.html", null ], + [ "int8_t", "classsbepp_1_1int8__t.html", null ], + [ "is_enum", "structsbepp_1_1is__enum.html", null ], + [ "message_traits", "classsbepp_1_1message__traits.html", "classsbepp_1_1message__traits" ], + [ "nullopt_t", "structsbepp_1_1nullopt__t.html", null ], + [ "schema_traits", "classsbepp_1_1schema__traits.html", "classsbepp_1_1schema__traits" ], + [ "set_choice_traits", "classsbepp_1_1set__choice__traits.html", null ], + [ "set_traits", "classsbepp_1_1set__traits.html", "classsbepp_1_1set__traits" ], + [ "size_bytes_checked_result", "structsbepp_1_1size__bytes__checked__result.html", "structsbepp_1_1size__bytes__checked__result" ], + [ "traits_tag", "structsbepp_1_1traits__tag.html", "structsbepp_1_1traits__tag" ], + [ "type_traits", "classsbepp_1_1type__traits.html", "classsbepp_1_1type__traits" ], + [ "uint16_opt_t", "classsbepp_1_1uint16__opt__t.html", null ], + [ "uint16_t", "classsbepp_1_1uint16__t.html", null ], + [ "uint32_opt_t", "classsbepp_1_1uint32__opt__t.html", null ], + [ "uint32_t", "classsbepp_1_1uint32__t.html", null ], + [ "uint64_opt_t", "classsbepp_1_1uint64__opt__t.html", null ], + [ "uint64_t", "classsbepp_1_1uint64__t.html", null ], + [ "uint8_opt_t", "classsbepp_1_1uint8__opt__t.html", null ], + [ "uint8_t", "classsbepp_1_1uint8__t.html", null ], + [ "unknown_enum_value_tag", "structsbepp_1_1unknown__enum__value__tag.html", null ] + ] ] +]; \ No newline at end of file diff --git a/1.4.1/bc_s.png b/1.4.1/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/1.4.1/bc_s.png differ diff --git a/1.4.1/bc_sd.png b/1.4.1/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/1.4.1/bc_sd.png differ diff --git a/1.4.1/benchmarks.html b/1.4.1/benchmarks.html new file mode 100644 index 0000000..e38580e --- /dev/null +++ b/1.4.1/benchmarks.html @@ -0,0 +1,229 @@ + + + + + + + + +sbepp: Benchmarks + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Benchmarks
+
+
+

Note
Benchmarks discussed in this section are only to reason about relative performance when compared to a hand-written code. Real-world performance heavily depends on a particular message structure and access pattern.
+

To reason about the performance of generated code I've made a set of benchmarks around this message:

+
<sbe:message name="msg1" id="1">
+
<field name="field1" id="1" type="uint32"/>
+
<field name="field2" id="2" type="uint32"/>
+
<field name="field3" id="3" type="uint32"/>
+
<field name="field4" id="4" type="uint32"/>
+
<field name="field5" id="5" type="uint32"/>
+
+
<group name="flat_group" id="10">
+
<field name="field1" id="1" type="uint32"/>
+
<field name="field2" id="2" type="uint32"/>
+
<field name="field3" id="3" type="uint32"/>
+
<field name="field4" id="4" type="uint32"/>
+
<field name="field5" id="5" type="uint32"/>
+
</group>
+
+
<group name="nested_group" id="20">
+
<field name="field1" id="1" type="uint32"/>
+
<field name="field2" id="2" type="uint32"/>
+
<field name="field3" id="3" type="uint32"/>
+
<field name="field4" id="4" type="uint32"/>
+
<field name="field5" id="5" type="uint32"/>
+
<data name="data" id="6" type="varDataEncoding"/>
+
</group>
+
+
<group name="nested_group2" id="30">
+
<field name="field1" id="1" type="uint32"/>
+
<field name="field2" id="2" type="uint32"/>
+
<field name="field3" id="3" type="uint32"/>
+
<field name="field4" id="4" type="uint32"/>
+
<field name="field5" id="5" type="uint32"/>
+
+
<group name="nested_group" id="20">
+
<field name="field1" id="1" type="uint32"/>
+
<field name="field2" id="2" type="uint32"/>
+
<field name="field3" id="3" type="uint32"/>
+
<field name="field4" id="4" type="uint32"/>
+
<field name="field5" id="5" type="uint32"/>
+
<data name="data" id="6" type="varDataEncoding"/>
+
</group>
+
</group>
+
+
<data name="data" id="6" type="varDataEncoding"/>
+
</sbe:message>
+

They all use the same scenario: read all message fields in-order up to a certain point. For example, top_level_fields_benchmark reads only 5 top-level fields, flat_group_benchmark reads top-level fields and all fields in all entries of flat_group and so on.
+ There are 4 different reading methods:

    +
  • raw_reader, a reader written by hand which uses pointer arithmetic and casts
  • +
  • sbepp_reader, a reader which uses normal accessors of sbepp generated code
  • +
  • sbepp_cursor_reader, a reader which uses cursor-based accessors of sbepp generated code
  • +
  • real_logic_reader, a reader which uses code generated by RealLogic which provides a forward-only access
  • +
+

The idea was to compare performance of normal and cursor-based accessors to the code written by hand with a message of gradually increasing complexity. All the measurements were done for a pack of 1000 messages but using two different strategies:

+
    +
  1. Fixed group size and data field size to 10. Since all message have the same structure, this benchmark is quite stable and was used for the following analysis.

    +
    Intel(R) Core(TM) i9-10900 CPU @ 2.80GHz
    +
    +
    Benchmark Time CPU Iterations
    +
    sbepp_reader::top_level_fields_benchmark/1000/10/10/10/10 1515 ns 1515 ns 439318
    +
    sbepp_reader::flat_group_benchmark/1000/10/10/10/10 23784 ns 23783 ns 29424
    +
    sbepp_reader::nested_group_benchmark/1000/10/10/10/10 60434 ns 60431 ns 11524
    +
    sbepp_reader::nested_group2_benchmark/1000/10/10/10/10 580107 ns 580068 ns 1208
    +
    sbepp_reader::whole_message_benchmark/1000/10/10/10/10 822789 ns 822741 ns 848
    +
    +
    sbepp_cursor_reader::top_level_fields_benchmark/1000/10/10/10/10 1516 ns 1516 ns 462815
    +
    sbepp_cursor_reader::flat_group_benchmark/1000/10/10/10/10 23767 ns 23765 ns 29446
    +
    sbepp_cursor_reader::nested_group_benchmark/1000/10/10/10/10 59644 ns 59642 ns 11640
    +
    sbepp_cursor_reader::nested_group2_benchmark/1000/10/10/10/10 397326 ns 397305 ns 1732
    +
    sbepp_cursor_reader::whole_message_benchmark/1000/10/10/10/10 412343 ns 412322 ns 1716
    +
    +
    raw_reader::top_level_fields_benchmark/1000/10/10/10/10 1518 ns 1517 ns 460772
    +
    raw_reader::flat_group_benchmark/1000/10/10/10/10 23761 ns 23759 ns 29490
    +
    raw_reader::nested_group_benchmark/1000/10/10/10/10 62226 ns 62219 ns 11198
    +
    raw_reader::nested_group2_benchmark/1000/10/10/10/10 431421 ns 431394 ns 1617
    +
    raw_reader::whole_message_benchmark/1000/10/10/10/10 423216 ns 423194 ns 1654
    +
    +
    real_logic_reader::top_level_fields_benchmark/1000/10/10/10/10 1524 ns 1524 ns 462506
    +
    real_logic_reader::flat_group_benchmark/1000/10/10/10/10 23044 ns 23042 ns 30361
    +
    real_logic_reader::nested_group_benchmark/1000/10/10/10/10 60635 ns 60632 ns 11447
    +
    real_logic_reader::nested_group2_benchmark/1000/10/10/10/10 422053 ns 422028 ns 1642
    +
    real_logic_reader::whole_message_benchmark/1000/10/10/10/10 431510 ns 431489 ns 1642
    +
  2. +
  3. Randomized group size in range [0; 20] and data size in range [0; 32]. This one cannot be used to compare different reading approaches since message structure heavily changes and is only provided for a reference.

    +
    Intel(R) Core(TM) i9-10900 CPU @ 2.80GHz
    +
    +
    Benchmark Time CPU Iterations
    +
    sbepp_reader::top_level_fields_benchmark/1000/0/20/0/32 1520 ns 1520 ns 460833
    +
    sbepp_reader::flat_group_benchmark/1000/0/20/0/32 21984 ns 21983 ns 29613
    +
    sbepp_reader::nested_group_benchmark/1000/0/20/0/32 139916 ns 139912 ns 4900
    +
    sbepp_reader::nested_group2_benchmark/1000/0/20/0/32 1507963 ns 1507874 ns 481
    +
    sbepp_reader::whole_message_benchmark/1000/0/20/0/32 1818439 ns 1818343 ns 388
    +
    +
    sbepp_cursor_reader::top_level_fields_benchmark/1000/0/20/0/32 1511 ns 1511 ns 463569
    +
    sbepp_cursor_reader::flat_group_benchmark/1000/0/20/0/32 22442 ns 22442 ns 30635
    +
    sbepp_cursor_reader::nested_group_benchmark/1000/0/20/0/32 137442 ns 137438 ns 5036
    +
    sbepp_cursor_reader::nested_group2_benchmark/1000/0/20/0/32 1251388 ns 1251352 ns 540
    +
    sbepp_cursor_reader::whole_message_benchmark/1000/0/20/0/32 1304626 ns 1304581 ns 538
    +
    +
    raw_reader::top_level_fields_benchmark/1000/0/20/0/32 1511 ns 1511 ns 463647
    +
    raw_reader::flat_group_benchmark/1000/0/20/0/32 22794 ns 22793 ns 29730
    +
    raw_reader::nested_group_benchmark/1000/0/20/0/32 137293 ns 137289 ns 4893
    +
    raw_reader::nested_group2_benchmark/1000/0/20/0/32 1307361 ns 1307269 ns 533
    +
    raw_reader::whole_message_benchmark/1000/0/20/0/32 1296803 ns 1296747 ns 544
    +
    +
    real_logic_reader::top_level_fields_benchmark/1000/0/20/0/32 1510 ns 1510 ns 463907
    +
    real_logic_reader::flat_group_benchmark/1000/0/20/0/32 23054 ns 23053 ns 30689
    +
    real_logic_reader::nested_group_benchmark/1000/0/20/0/32 141231 ns 141225 ns 5048
    +
    real_logic_reader::nested_group2_benchmark/1000/0/20/0/32 1301144 ns 1301107 ns 524
    +
    real_logic_reader::whole_message_benchmark/1000/0/20/0/32 1371855 ns 1371795 ns 539
    +
  4. +
+

We can see that when message structure is simple, like in top_level_fields_benchmark and flat_group_benchmark, there's no reason to use more complex cursor-based accessors. Even in nested_group_benchmark there's no significant gain because a single data member is not a big deal, computing it's length is a single memory read. Only starting from nested_group2_benchmark cursor-based API really starts to shine since message structure becomes really complex at that point.

+
+
+
+ + + + diff --git a/1.4.1/classes.html b/1.4.1/classes.html new file mode 100644 index 0000000..fa440c3 --- /dev/null +++ b/1.4.1/classes.html @@ -0,0 +1,161 @@ + + + + + + + + +sbepp: Class Index + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
B | C | D | E | F | G | I | M | N | O | R | S | T | U
+ +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1char__opt__t-members.html b/1.4.1/classsbepp_1_1char__opt__t-members.html new file mode 100644 index 0000000..5e038bf --- /dev/null +++ b/1.4.1/classsbepp_1_1char__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::char_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::char_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< char, char_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< char, char_opt_t >inline
max_value() noexceptsbepp::char_opt_tinlinestatic
min_value() noexceptsbepp::char_opt_tinlinestatic
null_value() noexceptsbepp::char_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< char, char_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< char, char_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< char, char_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< char, char_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< char, char_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< char, char_opt_t >inline
value() const noexceptsbepp::detail::optional_base< char, char_opt_t >inline
value_or(char default_value) const noexceptsbepp::detail::optional_base< char, char_opt_t >inline
value_type typedefsbepp::detail::optional_base< char, char_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1char__opt__t.html b/1.4.1/classsbepp_1_1char__opt__t.html new file mode 100644 index 0000000..92dbabc --- /dev/null +++ b/1.4.1/classsbepp_1_1char__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::char_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::char_opt_t Class Reference
+
+
+ +

Built-in char optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::char_opt_t:
+
+
+ + +sbepp::detail::optional_base< char, char_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< char, char_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< char, char_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (char default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in char optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1char__opt__t.png b/1.4.1/classsbepp_1_1char__opt__t.png new file mode 100644 index 0000000..ff05d03 Binary files /dev/null and b/1.4.1/classsbepp_1_1char__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1char__t-members.html b/1.4.1/classsbepp_1_1char__t-members.html new file mode 100644 index 0000000..72a29fb --- /dev/null +++ b/1.4.1/classsbepp_1_1char__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::char_t Member List
+
+
+ +

This is the complete list of members for sbepp::char_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< char, char_t >inline
max_value() noexceptsbepp::char_tinlinestatic
min_value() noexceptsbepp::char_tinlinestatic
operator*() noexceptsbepp::detail::required_base< char, char_t >inline
operator*() const noexceptsbepp::detail::required_base< char, char_t >inline
required_base()=defaultsbepp::detail::required_base< char, char_t >
required_base(value_type val) noexceptsbepp::detail::required_base< char, char_t >inline
value() const noexceptsbepp::detail::required_base< char, char_t >inline
value_type typedefsbepp::detail::required_base< char, char_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1char__t.html b/1.4.1/classsbepp_1_1char__t.html new file mode 100644 index 0000000..1da66e5 --- /dev/null +++ b/1.4.1/classsbepp_1_1char__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::char_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::char_t Class Reference
+
+
+ +

Built-in char required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::char_t:
+
+
+ + +sbepp::detail::required_base< char, char_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< char, char_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< char, char_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in char required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1char__t.png b/1.4.1/classsbepp_1_1char__t.png new file mode 100644 index 0000000..75e9b76 Binary files /dev/null and b/1.4.1/classsbepp_1_1char__t.png differ diff --git a/1.4.1/classsbepp_1_1composite__traits-members.html b/1.4.1/classsbepp_1_1composite__traits-members.html new file mode 100644 index 0000000..075f333 --- /dev/null +++ b/1.4.1/classsbepp_1_1composite__traits-members.html @@ -0,0 +1,127 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::composite_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::composite_traits< T >, including all inherited members.

+ + + + + + + + + +
deprecated() noexceptsbepp::composite_traits< T >static
description() noexceptsbepp::composite_traits< T >static
name() noexceptsbepp::composite_traits< T >static
offset() noexceptsbepp::composite_traits< T >static
semantic_type() noexceptsbepp::composite_traits< T >static
since_version() noexceptsbepp::composite_traits< T >static
size_bytes() noexceptsbepp::composite_traits< T >static
value_type typedefsbepp::composite_traits< T >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1composite__traits.html b/1.4.1/classsbepp_1_1composite__traits.html new file mode 100644 index 0000000..4c6b00a --- /dev/null +++ b/1.4.1/classsbepp_1_1composite__traits.html @@ -0,0 +1,203 @@ + + + + + + + + +sbepp: sbepp::composite_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::composite_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <composite> element. + More...

+ + + + + + +

+Public Types

template<typename Byte >
using value_type = CompositeType<Byte>
 Representation type.
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr offset_t offset () noexcept
 Returns type offset. Available only if offset is static, i.e. not available for public composites whose offset is different on each usage.
 
+static constexpr const char * semantic_type () noexcept
 Returns semanticType attribute.
 
+static constexpr version_t since_version () noexcept
 Returns addedSince attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in.
 
+static constexpr std::size_t size_bytes () noexcept
 Size of the composite in bytes.
 
+

Detailed Description

+
template<typename T>
+class sbepp::composite_traits< T >

Provides various traits/attributes of a <composite> element.

+

For example: sbepp::composite_traits<SchemaTag::types::composite>::since_version();

+
Template Parameters
+ + +
Tcomposite tag
+
+
+

Member Typedef Documentation

+ +

◆ value_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::composite_traits< T >::value_type = CompositeType<Byte>
+
+ +

Representation type.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1composite__traits.js b/1.4.1/classsbepp_1_1composite__traits.js new file mode 100644 index 0000000..d1865f6 --- /dev/null +++ b/1.4.1/classsbepp_1_1composite__traits.js @@ -0,0 +1,4 @@ +var classsbepp_1_1composite__traits = +[ + [ "value_type", "classsbepp_1_1composite__traits.html#a0b92c7c81c1973207accafaeb65302da", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1cursor-members.html b/1.4.1/classsbepp_1_1cursor-members.html new file mode 100644 index 0000000..c763acb --- /dev/null +++ b/1.4.1/classsbepp_1_1cursor-members.html @@ -0,0 +1,125 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::cursor< Byte > Member List
+
+
+ +

This is the complete list of members for sbepp::cursor< Byte >, including all inherited members.

+ + + + + + + +
byte_type typedefsbepp::cursor< Byte >
cursor()=defaultsbepp::cursor< Byte >
cursor(cursor< Byte2 > other) noexceptsbepp::cursor< Byte >inline
operator=(cursor< Byte2 > other) noexceptsbepp::cursor< Byte >inline
pointer() noexceptsbepp::cursor< Byte >inline
pointer() const noexceptsbepp::cursor< Byte >inline
+
+ + + + diff --git a/1.4.1/classsbepp_1_1cursor.html b/1.4.1/classsbepp_1_1cursor.html new file mode 100644 index 0000000..0c1d566 --- /dev/null +++ b/1.4.1/classsbepp_1_1cursor.html @@ -0,0 +1,316 @@ + + + + + + + + +sbepp: sbepp::cursor< Byte > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::cursor< Byte > Class Template Reference
+
+
+ +

Represents cursor which is used in cursor-based API. Clients should not use undocumented methods. + More...

+ +

#include <sbepp.hpp>

+ + + + + +

+Public Types

+using byte_type = Byte
 same as Byte
 
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

cursor ()=default
 Construct a new cursor object initialized with nullptr
 
template<typename Byte2 , typename = detail::enable_if_convertible_t<Byte2, Byte>>
constexpr cursor (cursor< Byte2 > other) noexcept
 Construct from another cursor. Enabled only if Byte2* is convertible to Byte*.
 
template<typename Byte2 , typename = detail::enable_if_convertible_t<Byte2, Byte>>
constexpr cursoroperator= (cursor< Byte2 > other) noexcept
 Assign from another cursor. Enabled only if Byte2* is convertible to Byte
 
constexpr Byte *& pointer () noexcept
 access underlying pointer. Might be useful in rare cases to initialize cursor with a particular value.
 
constexpr Byte * pointer () const noexcept
 access underlying pointer
 
+

Detailed Description

+
template<typename Byte>
+class sbepp::cursor< Byte >

Represents cursor which is used in cursor-based API. Clients should not use undocumented methods.

+
Template Parameters
+ + +
Bytebyte type
+
+
+

Constructor & Destructor Documentation

+ +

◆ cursor()

+ +
+
+
+template<typename Byte >
+
+template<typename Byte2 , typename = detail::enable_if_convertible_t<Byte2, Byte>>
+ + + + + +
+ + + + + + + +
constexpr sbepp::cursor< Byte >::cursor (cursor< Byte2 > other)
+
+inlineconstexprnoexcept
+
+ +

Construct from another cursor. Enabled only if Byte2* is convertible to Byte*.

+
Template Parameters
+ + +
Byte2other's byte type
+
+
+
Parameters
+ + +
othercursor to construct from
+
+
+ +
+
+

Member Function Documentation

+ +

◆ operator=()

+ +
+
+
+template<typename Byte >
+
+template<typename Byte2 , typename = detail::enable_if_convertible_t<Byte2, Byte>>
+ + + + + +
+ + + + + + + +
constexpr cursor & sbepp::cursor< Byte >::operator= (cursor< Byte2 > other)
+
+inlineconstexprnoexcept
+
+ +

Assign from another cursor. Enabled only if Byte2* is convertible to Byte

+
Template Parameters
+ + +
Byte2other's byte type
+
+
+
Parameters
+ + +
othercursor to assign from
+
+
+
Returns
*this
+ +
+
+ +

◆ pointer() [1/2]

+ +
+
+
+template<typename Byte >
+ + + + + +
+ + + + + + + +
constexpr Byte * sbepp::cursor< Byte >::pointer () const
+
+inlineconstexprnoexcept
+
+ +

access underlying pointer

+
Returns
underlying pointer
+ +
+
+ +

◆ pointer() [2/2]

+ +
+
+
+template<typename Byte >
+ + + + + +
+ + + + + + + +
constexpr Byte *& sbepp::cursor< Byte >::pointer ()
+
+inlineconstexprnoexcept
+
+ +

access underlying pointer. Might be useful in rare cases to initialize cursor with a particular value.

+
Returns
a reference to underlying pointer
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1cursor.js b/1.4.1/classsbepp_1_1cursor.js new file mode 100644 index 0000000..6071d31 --- /dev/null +++ b/1.4.1/classsbepp_1_1cursor.js @@ -0,0 +1,9 @@ +var classsbepp_1_1cursor = +[ + [ "byte_type", "classsbepp_1_1cursor.html#a36cf06c2b21b3d0b48e39ca1e3be6ad0", null ], + [ "cursor", "classsbepp_1_1cursor.html#a939a73d3177034f1504ad4bf323c18d1", null ], + [ "cursor", "classsbepp_1_1cursor.html#a1a02c8cd73c25c19372403426dfb7a1b", null ], + [ "operator=", "classsbepp_1_1cursor.html#ad40cf19febd9ea381ac2a572d9c9afa7", null ], + [ "pointer", "classsbepp_1_1cursor.html#a14a745ce53b7345b42ae67b4514a504e", null ], + [ "pointer", "classsbepp_1_1cursor.html#ac20d80344ad78a32aeea203936ce32c7", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1data__traits-members.html b/1.4.1/classsbepp_1_1data__traits-members.html new file mode 100644 index 0000000..9ed6313 --- /dev/null +++ b/1.4.1/classsbepp_1_1data__traits-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::data_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::data_traits< T >, including all inherited members.

+ + + + + + + + + + +
deprecated() noexceptsbepp::data_traits< T >static
description() noexceptsbepp::data_traits< T >static
id() noexceptsbepp::data_traits< T >static
length_type typedefsbepp::data_traits< T >
length_type_tag typedefsbepp::data_traits< T >
name() noexceptsbepp::data_traits< T >static
since_version() noexceptsbepp::data_traits< T >static
size_bytes(const length_type::value_type size) noexceptsbepp::data_traits< T >static
value_type typedefsbepp::data_traits< T >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1data__traits.html b/1.4.1/classsbepp_1_1data__traits.html new file mode 100644 index 0000000..322e9cd --- /dev/null +++ b/1.4.1/classsbepp_1_1data__traits.html @@ -0,0 +1,243 @@ + + + + + + + + +sbepp: sbepp::data_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::data_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <data> element. + More...

+ + + + + + + + + + + + +

+Public Types

template<typename Byte >
using value_type = DataType
 Representation type.
 
+using length_type = LengthType
 Length type.
 
+using length_type_tag = LengthTypeTag
 length_type tag
 
+ + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr member_id_t id () noexcept
 Returns id attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr version_t since_version () noexcept
 Returns addedSince attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
static constexpr std::size_t size_bytes (const length_type::value_type size) noexcept
 Returns number of bytes required to represent <data> in memory.
 
+

Detailed Description

+
template<typename T>
+class sbepp::data_traits< T >

Provides various traits/attributes of a <data> element.

+

For example: sbepp::data_traits<message_tag::data_name>::since_version();

+
Template Parameters
+ + +
Tdata tag
+
+
+

Member Typedef Documentation

+ +

◆ value_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::data_traits< T >::value_type = DataType
+
+ +

Representation type.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+

Member Function Documentation

+ +

◆ size_bytes()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
static constexpr std::size_t sbepp::data_traits< T >::size_bytes (const length_type::value_type size)
+
+staticconstexprnoexcept
+
+ +

Returns number of bytes required to represent <data> in memory.

+
Parameters
+ + +
sizepayload size
+
+
+
Returns
total size in bytes (including <data> header)
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1data__traits.js b/1.4.1/classsbepp_1_1data__traits.js new file mode 100644 index 0000000..4bfe3a7 --- /dev/null +++ b/1.4.1/classsbepp_1_1data__traits.js @@ -0,0 +1,6 @@ +var classsbepp_1_1data__traits = +[ + [ "length_type", "classsbepp_1_1data__traits.html#ae824aeb50b8ac3b1676a32169271fb6c", null ], + [ "length_type_tag", "classsbepp_1_1data__traits.html#aa86bdd1a0f628c740434a75a07ec73f7", null ], + [ "value_type", "classsbepp_1_1data__traits.html#a83ed2fb355c41064edd17fb7f6498a54", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1bitset__base-members.html b/1.4.1/classsbepp_1_1detail_1_1bitset__base-members.html new file mode 100644 index 0000000..51216d8 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1bitset__base-members.html @@ -0,0 +1,125 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::bitset_base< T > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::bitset_base< T >, including all inherited members.

+ + + + + + + +
bitset_base()=defaultsbepp::detail::bitset_base< T >
bitset_base(T value) noexceptsbepp::detail::bitset_base< T >inlineexplicit
operator!=sbepp::detail::bitset_base< T >friend
operator*() noexceptsbepp::detail::bitset_base< T >inline
operator*() const noexceptsbepp::detail::bitset_base< T >inline
operator==sbepp::detail::bitset_base< T >friend
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1bitset__base.html b/1.4.1/classsbepp_1_1detail_1_1bitset__base.html new file mode 100644 index 0000000..17a57a7 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1bitset__base.html @@ -0,0 +1,169 @@ + + + + + + + + +sbepp: sbepp::detail::bitset_base< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::bitset_base< T > Class Template Reference
+
+
+ +

Base class for bitsets. + More...

+ +

#include <sbepp.hpp>

+ + + + + + + + + + + + + + +

+Public Member Functions

bitset_base ()=default
 Default constructs underlying value to 0
 
+constexpr bitset_base (T value) noexcept
 Constructs from given value.
 
+constexpr T & operator* () noexcept
 Returns reference to underlying value.
 
+constexpr T operator* () const noexcept
 Returns underlying value.
 
+ + + + + + + +

+Friends

+constexpr friend bool operator== (const bitset_base &lhs, const bitset_base &rhs) noexcept
 Tests if underlying values are equal.
 
+constexpr friend bool operator!= (const bitset_base &lhs, const bitset_base &rhs) noexcept
 Tests if underlying values are not equal.
 
+

Detailed Description

+
template<typename T>
+class sbepp::detail::bitset_base< T >

Base class for bitsets.

+
Template Parameters
+ + +
Tunderlying value type
+
+
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1bitset__base.js b/1.4.1/classsbepp_1_1detail_1_1bitset__base.js new file mode 100644 index 0000000..7ae7f6d --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1bitset__base.js @@ -0,0 +1,9 @@ +var classsbepp_1_1detail_1_1bitset__base = +[ + [ "bitset_base", "classsbepp_1_1detail_1_1bitset__base.html#aff9292d5470a65ccbac45033c271d186", null ], + [ "bitset_base", "classsbepp_1_1detail_1_1bitset__base.html#a8218ec7a0569f6bd0c54bf1ed020e0a5", null ], + [ "operator*", "classsbepp_1_1detail_1_1bitset__base.html#a294da4f166672d95106d667af08f43f2", null ], + [ "operator*", "classsbepp_1_1detail_1_1bitset__base.html#a55c149fd634e7d1d72e451967f9a66af", null ], + [ "operator!=", "classsbepp_1_1detail_1_1bitset__base.html#aef491dc98b3eb25722425cbb95ba4744", null ], + [ "operator==", "classsbepp_1_1detail_1_1bitset__base.html#a2d338f6e17f7ac9a6c90f33d31802347", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1byte__range-members.html b/1.4.1/classsbepp_1_1detail_1_1byte__range-members.html new file mode 100644 index 0000000..7c1ce2d --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1byte__range-members.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::byte_range< Byte > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::byte_range< Byte >, including all inherited members.

+ + + + + +
byte_range()=defaultsbepp::detail::byte_range< Byte >
byte_range(Byte *begin, Byte *end) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(Byte *ptr, const std::size_t size) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(const byte_range< Byte2 > &other) noexceptsbepp::detail::byte_range< Byte >inline
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1byte__range.html b/1.4.1/classsbepp_1_1detail_1_1byte__range.html new file mode 100644 index 0000000..7255082 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1byte__range.html @@ -0,0 +1,173 @@ + + + + + + + + +sbepp: sbepp::detail::byte_range< Byte > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::byte_range< Byte > Class Template Reference
+
+
+ +

Base class for all reference semantics types. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::detail::byte_range< Byte >:
+
+
+ + +sbepp::detail::composite_base< Byte > +sbepp::detail::dynamic_array_ref< Byte, Value, Length, E > +sbepp::detail::entry_base< Byte, BlockLengthType > +sbepp::detail::flat_group_base< Byte, Entry, Dimension > +sbepp::detail::message_base< Byte, Header > +sbepp::detail::nested_group_base< Byte, Entry, Dimension > +sbepp::detail::static_array_ref< Byte, Value, N, Tag > + +
+ + + + + + + + + + + + + + + +

+Public Member Functions

byte_range ()=default
 Initializes to nullptr
 
+constexpr byte_range (Byte *begin, Byte *end) noexcept
 Constructs from a pair of pointers.
 
+constexpr byte_range (Byte *ptr, const std::size_t size) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr byte_range (const byte_range< Byte2 > &other) noexcept
 Copy constructor. Available if Byte2* is convertible to Byte*
 
+

Detailed Description

+
template<typename Byte>
+class sbepp::detail::byte_range< Byte >

Base class for all reference semantics types.

+
Template Parameters
+ + +
Bytebyte type. Must have size equal to 1
+
+
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1byte__range.js b/1.4.1/classsbepp_1_1detail_1_1byte__range.js new file mode 100644 index 0000000..76404a3 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1byte__range.js @@ -0,0 +1,7 @@ +var classsbepp_1_1detail_1_1byte__range = +[ + [ "byte_range", "classsbepp_1_1detail_1_1byte__range.html#a7c71293de61b7e01d5f7ca29d72e394a", null ], + [ "byte_range", "classsbepp_1_1detail_1_1byte__range.html#aec6ab4f07a9910cb8baf29c41c62542b", null ], + [ "byte_range", "classsbepp_1_1detail_1_1byte__range.html#a14cd2d9c6afb4a77d44eeb0dc18523f9", null ], + [ "byte_range", "classsbepp_1_1detail_1_1byte__range.html#a4d4774d319e0e9335f7103528aee55f8", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1byte__range.png b/1.4.1/classsbepp_1_1detail_1_1byte__range.png new file mode 100644 index 0000000..391055c Binary files /dev/null and b/1.4.1/classsbepp_1_1detail_1_1byte__range.png differ diff --git a/1.4.1/classsbepp_1_1detail_1_1composite__base-members.html b/1.4.1/classsbepp_1_1detail_1_1composite__base-members.html new file mode 100644 index 0000000..1e80564 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1composite__base-members.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::composite_base< Byte > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::composite_base< Byte >, including all inherited members.

+ + + + + +
byte_range()=defaultsbepp::detail::byte_range< Byte >
byte_range(Byte *begin, Byte *end) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(Byte *ptr, const std::size_t size) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(const byte_range< Byte2 > &other) noexceptsbepp::detail::byte_range< Byte >inline
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1composite__base.html b/1.4.1/classsbepp_1_1detail_1_1composite__base.html new file mode 100644 index 0000000..d639b9a --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1composite__base.html @@ -0,0 +1,161 @@ + + + + + + + + +sbepp: sbepp::detail::composite_base< Byte > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::composite_base< Byte > Class Template Reference
+
+
+ +

Base class for composites. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::detail::composite_base< Byte >:
+
+
+ + +sbepp::detail::byte_range< Byte > + +
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from sbepp::detail::byte_range< Byte >
byte_range ()=default
 Initializes to nullptr
 
+constexpr byte_range (Byte *begin, Byte *end) noexcept
 Constructs from a pair of pointers.
 
+constexpr byte_range (Byte *ptr, const std::size_t size) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr byte_range (const byte_range< Byte2 > &other) noexcept
 Copy constructor. Available if Byte2* is convertible to Byte*
 
+

Detailed Description

+
template<typename Byte>
+class sbepp::detail::composite_base< Byte >

Base class for composites.

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1composite__base.png b/1.4.1/classsbepp_1_1detail_1_1composite__base.png new file mode 100644 index 0000000..89860ab Binary files /dev/null and b/1.4.1/classsbepp_1_1detail_1_1composite__base.png differ diff --git a/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref-members.html b/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref-members.html new file mode 100644 index 0000000..e815a44 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref-members.html @@ -0,0 +1,162 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::dynamic_array_ref< Byte, Value, Length, E > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
assign(size_type count, const value_type value) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
assign(InputIt first, InputIt last) constsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
assign(std::initializer_list< value_type > ilist) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
assign_range(R &&r) constsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
assign_string(const char *str) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
back() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
begin() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
byte_range()=defaultsbepp::detail::byte_range< Byte >
byte_range(Byte *begin, Byte *end) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(Byte *ptr, const std::size_t size) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(const byte_range< Byte2 > &other) noexceptsbepp::detail::byte_range< Byte >inline
clear() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
data() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
difference_type typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
element_type typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
empty() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
end() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
erase(iterator pos) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
erase(iterator first, iterator last) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
front() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
insert(iterator pos, const value_type value) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
insert(iterator pos, size_type count, const value_type value) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
insert(iterator pos, InputIt first, InputIt last) constsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
insert(iterator pos, std::initializer_list< value_type > ilist) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
iterator typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
max_size() noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inlinestatic
operator[](size_type pos) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
pointer typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
pop_back() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
push_back(value_type value) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
raw() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
rbegin() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
reference typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
rend() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
resize(size_type count) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
resize(size_type count, value_type value) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
resize(size_type count, sbepp::default_init_t) const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
reverse_iterator typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
sbe_size() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
sbe_size_type typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
size() const noexceptsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >inline
size_type typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
value_type typedefsbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.html b/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.html new file mode 100644 index 0000000..b506cdc --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.html @@ -0,0 +1,571 @@ + + + + + + + + +sbepp: sbepp::detail::dynamic_array_ref< Byte, Value, Length, E > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::dynamic_array_ref< Byte, Value, Length, E > Class Template Reference
+
+
+ +

Represents reference to dynamic arrays used for <data> elements. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >:
+
+
+ + +sbepp::detail::byte_range< Byte > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using element_type = detail::apply_cv_qualifiers_t<Byte, Value>
 final element type. value_type with the same cv-qualifiers as Byte
 
+using value_type = Value
 same as Value
 
+using sbe_size_type = Length
 length SBE representation of data's encoding
 
+using size_type = typename sbe_size_type::value_type
 raw size type
 
+using difference_type = std::ptrdiff_t
 std::ptrdiff_t
 
+using reference = element_type&
 element reference type
 
+using pointer = element_type*
 element pointer type
 
+using iterator = pointer
 iterator type. Satisfies std::random_access_iterator
 
+using reverse_iterator = std::reverse_iterator<iterator>
 reverse iterator type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+constexpr iterator begin () const noexcept
 Returns an iterator to the beginning.
 
+constexpr iterator end () const noexcept
 Returns an iterator to the end.
 
+constexpr reverse_iterator rbegin () const noexcept
 Returns a reverse iterator to the beginning.
 
+constexpr reverse_iterator rend () const noexcept
 Returns a reverse iterator to the end.
 
constexpr reference front () const noexcept
 Access the first element.
 
constexpr reference back () const noexcept
 Access the last element.
 
constexpr pointer data () const noexcept
 Direct access to the underlying array.
 
constexpr reference operator[] (size_type pos) const noexcept
 Access element at pos
 
+constexpr sbe_size_type sbe_size () const noexcept
 Returns SBE size representation.
 
+constexpr size_type size () const noexcept
 Returns raw size.
 
+constexpr bool empty () const noexcept
 Checks if size() != 0
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void clear () const noexcept
 Sets size to 0.
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void resize (size_type count) const noexcept
 Sets size to count, value initializes new elements.
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void resize (size_type count, value_type value) const noexcept
 Sets size to count, initializes new elements with value
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void resize (size_type count, sbepp::default_init_t) const noexcept
 Sets size to count, default initializes new elements.
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void push_back (value_type value) const noexcept
 Adds new element to the end.
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void pop_back () const noexcept
 Removes the last element.
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr iterator erase (iterator pos) const noexcept
 Erases element at pos
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr iterator erase (iterator first, iterator last) const noexcept
 Erases elements in [first; last) range.
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr iterator insert (iterator pos, const value_type value) const noexcept
 Inserts value before pos
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr iterator insert (iterator pos, size_type count, const value_type value) const noexcept
 Inserts count copies of value before pos
 
+template<typename InputIt , typename = detail::enable_if_t< !std::is_const<Byte>::value && std::is_convertible< typename std::iterator_traits<InputIt>::iterator_category, std::input_iterator_tag>::value>>
constexpr iterator insert (iterator pos, InputIt first, InputIt last) const
 Inserts elements from [first; last) range before pos
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr iterator insert (iterator pos, std::initializer_list< value_type > ilist) const noexcept
 Inserts elements from ilist before pos
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void assign (size_type count, const value_type value) const noexcept
 Replaces the contents of the container with count copies of value
 
+template<typename InputIt , typename = enable_if_writable_t<Byte, InputIt>>
constexpr void assign (InputIt first, InputIt last) const
 Replaces the contents of the container with the elements from [first; last) range.
 
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void assign (std::initializer_list< value_type > ilist) const noexcept
 Replaces the contents of the container with the elements from ilist
 
constexpr dynamic_array_ref< Byte, detail::remove_cv_t< Byte >, Length, E > raw () const noexcept
 Returns dynamic_array_ref<Byte, Byte, Length, E>.
 
template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void assign_string (const char *str) const noexcept
 Assigns null-terminated string.
 
template<typename R , typename = enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
constexpr void assign_range (R &&r) const
 Assigns range.
 
- Public Member Functions inherited from sbepp::detail::byte_range< Byte >
byte_range ()=default
 Initializes to nullptr
 
+constexpr byte_range (Byte *begin, Byte *end) noexcept
 Constructs from a pair of pointers.
 
+constexpr byte_range (Byte *ptr, const std::size_t size) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr byte_range (const byte_range< Byte2 > &other) noexcept
 Copy constructor. Available if Byte2* is convertible to Byte*
 
+ + + + +

+Static Public Member Functions

+static constexpr size_type max_size () noexcept
 Returns max value of SBE length representation.
 
+

Detailed Description

+
template<typename Byte, typename Value, typename Length, endian E>
+class sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >

Represents reference to dynamic arrays used for <data> elements.

+

The general precondition for most functions is that current buffer should be able to hold size() number of elements

Template Parameters
+ + + + + +
Bytebyte type
Valuearray element type
LengthSBE length type
Eschema endianness
+
+
+

Member Function Documentation

+ +

◆ assign_range()

+ +
+
+
+template<typename Byte , typename Value , typename Length , endian E>
+
+template<typename R , typename = enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
+ + + + + +
+ + + + + + + +
constexpr void sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >::assign_range (R && r) const
+
+inlineconstexpr
+
+ +

Assigns range.

+
Parameters
+ + +
rrange to assign. In C++20, required to satisfy std::ranges::range, or std::begin(r)/std::end(r) as valid expressions for older C++ versions
+
+
+ +
+
+ +

◆ assign_string()

+ +
+
+
+template<typename Byte , typename Value , typename Length , endian E>
+
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
+ + + + + +
+ + + + + + + +
constexpr void sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >::assign_string (const char * str) const
+
+inlineconstexprnoexcept
+
+ +

Assigns null-terminated string.

+
Parameters
+ + +
strnull-terminated string
+
+
+
Precondition
str != nullptr
+ +
+
+ +

◆ back()

+ +
+
+
+template<typename Byte , typename Value , typename Length , endian E>
+ + + + + +
+ + + + + + + +
constexpr reference sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >::back () const
+
+inlineconstexprnoexcept
+
+ +

Access the last element.

+
Precondition
!empty()
+ +
+
+ +

◆ data()

+ +
+
+
+template<typename Byte , typename Value , typename Length , endian E>
+ + + + + +
+ + + + + + + +
constexpr pointer sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >::data () const
+
+inlineconstexprnoexcept
+
+ +

Direct access to the underlying array.

+

The pointer is such that range [data(), data() + size()) is always a valid range, even if the container is empty (data() is not dereferenceable in that case).

+ +
+
+ +

◆ front()

+ +
+
+
+template<typename Byte , typename Value , typename Length , endian E>
+ + + + + +
+ + + + + + + +
constexpr reference sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >::front () const
+
+inlineconstexprnoexcept
+
+ +

Access the first element.

+
Precondition
!empty()
+ +
+
+ +

◆ operator[]()

+ +
+
+
+template<typename Byte , typename Value , typename Length , endian E>
+ + + + + +
+ + + + + + + +
constexpr reference sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >::operator[] (size_type pos) const
+
+inlineconstexprnoexcept
+
+ +

Access element at pos

+
Precondition
pos < size()
+ +
+
+ +

◆ raw()

+ +
+
+
+template<typename Byte , typename Value , typename Length , endian E>
+ + + + + +
+ + + + + + + +
constexpr dynamic_array_ref< Byte, detail::remove_cv_t< Byte >, Length, E > sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >::raw () const
+
+inlineconstexprnoexcept
+
+ +

Returns dynamic_array_ref<Byte, Byte, Length, E>.

+

Useful in constexpr context to modify an array which has different Byte and Value types. For example see static_array_ref::raw()

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.js b/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.js new file mode 100644 index 0000000..e5acbc6 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.js @@ -0,0 +1,41 @@ +var classsbepp_1_1detail_1_1dynamic__array__ref = +[ + [ "difference_type", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a606fc50eef4c1567f50d162b2736cf1e", null ], + [ "element_type", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a804f54c1b44a6575009a6a3fdad78cd9", null ], + [ "iterator", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a0e1063af74b2710ec9a18ae34832daaa", null ], + [ "pointer", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a3413afbfd1448e9cd5d05df3212ee9fd", null ], + [ "reference", "classsbepp_1_1detail_1_1dynamic__array__ref.html#afa5a54e3b16075a9ba43c4cb647b7693", null ], + [ "reverse_iterator", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a1318d664c45a0249cb895d346f524d0e", null ], + [ "sbe_size_type", "classsbepp_1_1detail_1_1dynamic__array__ref.html#af701043211176147f5bdd947535bb0bd", null ], + [ "size_type", "classsbepp_1_1detail_1_1dynamic__array__ref.html#af495aef49ae6275054220d3591fc3846", null ], + [ "value_type", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a67a2ca78d220b51c46c08b41549f136c", null ], + [ "assign", "classsbepp_1_1detail_1_1dynamic__array__ref.html#ad08611247f13c99807af0368180861f5", null ], + [ "assign", "classsbepp_1_1detail_1_1dynamic__array__ref.html#ab0bc4620ab86a21f2ddbfe18406eca1c", null ], + [ "assign", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a2cb21d19a322367df856b3fdf1243cf6", null ], + [ "assign_range", "classsbepp_1_1detail_1_1dynamic__array__ref.html#aa9373ed8d2dbb0c7f755531074356a24", null ], + [ "assign_string", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a27476f9cf708075e344b509d3e7772e2", null ], + [ "back", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a2d1259db5d27d8d7db07a1683f475f1d", null ], + [ "begin", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a84298bef272e521a534e5c399facd85a", null ], + [ "clear", "classsbepp_1_1detail_1_1dynamic__array__ref.html#ab5ad7952ef0fe9926a1d9491896e167e", null ], + [ "data", "classsbepp_1_1detail_1_1dynamic__array__ref.html#ab19b5f01fb457ad735e8eb94576f1f42", null ], + [ "empty", "classsbepp_1_1detail_1_1dynamic__array__ref.html#ac948e0b6d31263575513a2083829930c", null ], + [ "end", "classsbepp_1_1detail_1_1dynamic__array__ref.html#ad4b1146091b6f8d85ab25381b501f31a", null ], + [ "erase", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a260941a7ccfcde104b5617538c447518", null ], + [ "erase", "classsbepp_1_1detail_1_1dynamic__array__ref.html#ab4d76c7225c80d6e5158a7c9873ae8eb", null ], + [ "front", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a5d8e4d81aeee24786ae87d13a53dc1f6", null ], + [ "insert", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a3b88bd1349617074c0beb63f8101fe4d", null ], + [ "insert", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a2c7b02230aefe0868d499dd14c1e5ddb", null ], + [ "insert", "classsbepp_1_1detail_1_1dynamic__array__ref.html#aab4c4ae63150590096af465fb4092561", null ], + [ "insert", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a171445816ec7beca2131820fe1a4a568", null ], + [ "operator[]", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a45cda3ca15223a4fabafa0cdb27506a5", null ], + [ "pop_back", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a61607728d5839f4ed2b8e5090916e148", null ], + [ "push_back", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a34a7c75fb59e285879bd953c98c7565e", null ], + [ "raw", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a6e11538c6bd06b459ff444685889ef01", null ], + [ "rbegin", "classsbepp_1_1detail_1_1dynamic__array__ref.html#acb59720cd29ea9ad42732b3e49fb7fdd", null ], + [ "rend", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a1f7852f3d0e1d562c399260497637abc", null ], + [ "resize", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a45d0b3c8fa6597bf6c3c75d9a1904c25", null ], + [ "resize", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a3308cbc7befca03a7fd13d726c46ba57", null ], + [ "resize", "classsbepp_1_1detail_1_1dynamic__array__ref.html#acbf9ea93f6c0d94e2fe077c04b25c137", null ], + [ "sbe_size", "classsbepp_1_1detail_1_1dynamic__array__ref.html#a07c3fc7ac3fe8f8900d30d6905f3ebb9", null ], + [ "size", "classsbepp_1_1detail_1_1dynamic__array__ref.html#ae1c72d67c5fdc3d34fae96e5bb9637b2", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.png b/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.png new file mode 100644 index 0000000..27ca76f Binary files /dev/null and b/1.4.1/classsbepp_1_1detail_1_1dynamic__array__ref.png differ diff --git a/1.4.1/classsbepp_1_1detail_1_1entry__base-members.html b/1.4.1/classsbepp_1_1detail_1_1entry__base-members.html new file mode 100644 index 0000000..22b263d --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1entry__base-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::entry_base< Byte, BlockLengthType > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::entry_base< Byte, BlockLengthType >, including all inherited members.

+ + + + + + + + + + +
byte_range()=defaultsbepp::detail::byte_range< Byte >
byte_range(Byte *begin, Byte *end) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(Byte *ptr, const std::size_t size) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(const byte_range< Byte2 > &other) noexceptsbepp::detail::byte_range< Byte >inline
entry_base()=defaultsbepp::detail::entry_base< Byte, BlockLengthType >
entry_base(Byte *ptr, Byte *end, BlockLengthType block_length) noexceptsbepp::detail::entry_base< Byte, BlockLengthType >inline
entry_base(Byte *ptr, const std::size_t size, const BlockLengthType block_length) noexceptsbepp::detail::entry_base< Byte, BlockLengthType >inline
entry_base(cursor< Byte2 > &c, Byte *end_ptr, BlockLengthType block_length) noexceptsbepp::detail::entry_base< Byte, BlockLengthType >inline
entry_base(const entry_base< Byte2, BlockLengthType > &other) noexceptsbepp::detail::entry_base< Byte, BlockLengthType >inline
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1entry__base.html b/1.4.1/classsbepp_1_1detail_1_1entry__base.html new file mode 100644 index 0000000..9bc448e --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1entry__base.html @@ -0,0 +1,184 @@ + + + + + + + + +sbepp: sbepp::detail::entry_base< Byte, BlockLengthType > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::entry_base< Byte, BlockLengthType > Class Template Reference
+
+
+ +

Base class for group entries. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::detail::entry_base< Byte, BlockLengthType >:
+
+
+ + +sbepp::detail::byte_range< Byte > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

entry_base ()=default
 Constructs using nullptr
 
+constexpr entry_base (Byte *ptr, Byte *end, BlockLengthType block_length) noexcept
 Constructs from two pointers.
 
+constexpr entry_base (Byte *ptr, const std::size_t size, const BlockLengthType block_length) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr entry_base (cursor< Byte2 > &c, Byte *end_ptr, BlockLengthType block_length) noexcept
 Constructs from cursor.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr entry_base (const entry_base< Byte2, BlockLengthType > &other) noexcept
 Constructs from entry_base of compatible byte type. Available if Byte2* is convertible to Byte*
 
- Public Member Functions inherited from sbepp::detail::byte_range< Byte >
byte_range ()=default
 Initializes to nullptr
 
+constexpr byte_range (Byte *begin, Byte *end) noexcept
 Constructs from a pair of pointers.
 
+constexpr byte_range (Byte *ptr, const std::size_t size) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr byte_range (const byte_range< Byte2 > &other) noexcept
 Copy constructor. Available if Byte2* is convertible to Byte*
 
+

Detailed Description

+
template<typename Byte, typename BlockLengthType>
+class sbepp::detail::entry_base< Byte, BlockLengthType >

Base class for group entries.

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1entry__base.js b/1.4.1/classsbepp_1_1detail_1_1entry__base.js new file mode 100644 index 0000000..123ea61 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1entry__base.js @@ -0,0 +1,8 @@ +var classsbepp_1_1detail_1_1entry__base = +[ + [ "entry_base", "classsbepp_1_1detail_1_1entry__base.html#adab221bc15ccc3c6f7ba29d08a3285f5", null ], + [ "entry_base", "classsbepp_1_1detail_1_1entry__base.html#addf46369040007b8511ae531c1865138", null ], + [ "entry_base", "classsbepp_1_1detail_1_1entry__base.html#ab00082644814254f9a62b430c5a3df3c", null ], + [ "entry_base", "classsbepp_1_1detail_1_1entry__base.html#a86dad2a468f1760a655cec07fd3e101b", null ], + [ "entry_base", "classsbepp_1_1detail_1_1entry__base.html#a86f9881d33a8021e5f4a828411c425ec", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1entry__base.png b/1.4.1/classsbepp_1_1detail_1_1entry__base.png new file mode 100644 index 0000000..ddee3a5 Binary files /dev/null and b/1.4.1/classsbepp_1_1detail_1_1entry__base.png differ diff --git a/1.4.1/classsbepp_1_1detail_1_1flat__group__base-members.html b/1.4.1/classsbepp_1_1detail_1_1flat__group__base-members.html new file mode 100644 index 0000000..46a8d20 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1flat__group__base-members.html @@ -0,0 +1,147 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::flat_group_base< Byte, Entry, Dimension > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::flat_group_base< Byte, Entry, Dimension >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
back() const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
begin() const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
byte_range()=defaultsbepp::detail::byte_range< Byte >
byte_range(Byte *begin, Byte *end) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(Byte *ptr, const std::size_t size) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(const byte_range< Byte2 > &other) noexceptsbepp::detail::byte_range< Byte >inline
clear() const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
cursor_begin(cursor< Byte2 > &c) const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
cursor_end(cursor< Byte2 > &c) const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
cursor_iterator typedefsbepp::detail::flat_group_base< Byte, Entry, Dimension >
cursor_range(cursor< Byte2 > &c) const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
cursor_range_t typedefsbepp::detail::flat_group_base< Byte, Entry, Dimension >
cursor_subrange(cursor< Byte2 > &c, const size_type pos) const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
cursor_subrange(cursor< Byte2 > &c, const size_type pos, const size_type count) const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
difference_type typedefsbepp::detail::flat_group_base< Byte, Entry, Dimension >
empty() const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
end() const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
front() const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
iterator typedefsbepp::detail::flat_group_base< Byte, Entry, Dimension >
max_size() noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inlinestatic
operator[](size_type pos) const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
reference typedefsbepp::detail::flat_group_base< Byte, Entry, Dimension >
resize(const size_type count) const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
sbe_size() const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
sbe_size_type typedefsbepp::detail::flat_group_base< Byte, Entry, Dimension >
size() const noexceptsbepp::detail::flat_group_base< Byte, Entry, Dimension >inline
size_type typedefsbepp::detail::flat_group_base< Byte, Entry, Dimension >
value_type typedefsbepp::detail::flat_group_base< Byte, Entry, Dimension >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1flat__group__base.html b/1.4.1/classsbepp_1_1detail_1_1flat__group__base.html new file mode 100644 index 0000000..609e670 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1flat__group__base.html @@ -0,0 +1,467 @@ + + + + + + + + +sbepp: sbepp::detail::flat_group_base< Byte, Entry, Dimension > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::flat_group_base< Byte, Entry, Dimension > Class Template Reference
+
+
+ +

Base class for a flat group. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::detail::flat_group_base< Byte, Entry, Dimension >:
+
+
+ + +sbepp::detail::byte_range< Byte > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using value_type = Entry
 Entry type.
 
+using reference = value_type
 value_type
 
+using sbe_size_type
 numInGroup value type
 
+using size_type = typename sbe_size_type::value_type
 Raw size type.
 
+using difference_type = typename std::make_signed<size_type>::type
 signed size_type
 
+using iterator
 Random access iterator to value_type. Satisfies std::random_access_iterator
 
+template<typename Byte2 >
using cursor_range_t
 Type of a cursor range. Satisfies std::ranges::input_range
 
+template<typename Byte2 >
using cursor_iterator = typename cursor_range_t<Byte2>::iterator
 cursor_range_t::iterator. Satisfies std::input_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+constexpr sbe_size_type sbe_size () const noexcept
 Returns header's numInGroup
 
+constexpr size_type size () const noexcept
 Returns raw size.
 
+constexpr void resize (const size_type count) const noexcept
 Sets numInGroup to count
 
+constexpr bool empty () const noexcept
 Checks if size() == 0
 
+constexpr iterator begin () const noexcept
 Returns an iterator to the beginning.
 
+constexpr iterator end () const noexcept
 Returns an iterator to the end.
 
constexpr reference operator[] (size_type pos) const noexcept
 Access group entry at pos
 
constexpr reference front () const noexcept
 Returns the first entry.
 
constexpr reference back () const noexcept
 Returns the last entry.
 
constexpr void clear () const noexcept
 Resizes to 0
 
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_range_t< Byte2 > cursor_range (cursor< Byte2 > &c) const noexcept
 Returns cursor range to all group entries.
 
template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_range_t< Byte2 > cursor_subrange (cursor< Byte2 > &c, const size_type pos) const noexcept
 Returns cursor range to [pos; size()) entries.
 
template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_range_t< Byte2 > cursor_subrange (cursor< Byte2 > &c, const size_type pos, const size_type count) const noexcept
 Returns cursor range to [pos; pos+count) entries.
 
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_iterator< Byte2 > cursor_begin (cursor< Byte2 > &c) const noexcept
 Returns cursor iterator to the beginning.
 
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_iterator< Byte2 > cursor_end (cursor< Byte2 > &c) const noexcept
 Returns cursor iterator to the end.
 
- Public Member Functions inherited from sbepp::detail::byte_range< Byte >
byte_range ()=default
 Initializes to nullptr
 
+constexpr byte_range (Byte *begin, Byte *end) noexcept
 Constructs from a pair of pointers.
 
+constexpr byte_range (Byte *ptr, const std::size_t size) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr byte_range (const byte_range< Byte2 > &other) noexcept
 Copy constructor. Available if Byte2* is convertible to Byte*
 
+ + + + +

+Static Public Member Functions

+static constexpr size_type max_size () noexcept
 Returns numInGroup's maxValue
 
+

Detailed Description

+
template<typename Byte, typename Entry, typename Dimension>
+class sbepp::detail::flat_group_base< Byte, Entry, Dimension >

Base class for a flat group.

+

Member Function Documentation

+ +

◆ back()

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+ + + + + +
+ + + + + + + +
constexpr reference sbepp::detail::flat_group_base< Byte, Entry, Dimension >::back () const
+
+inlineconstexprnoexcept
+
+ +

Returns the last entry.

+
Precondition
!empty()
+ +
+
+ +

◆ clear()

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+ + + + + +
+ + + + + + + +
constexpr void sbepp::detail::flat_group_base< Byte, Entry, Dimension >::clear () const
+
+inlineconstexprnoexcept
+
+ +

Resizes to 0

+
Postcondition
size() == 0
+ +
+
+ +

◆ cursor_subrange() [1/2]

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
+ + + + + +
+ + + + + + + + + + + +
constexpr cursor_range_t< Byte2 > sbepp::detail::flat_group_base< Byte, Entry, Dimension >::cursor_subrange (cursor< Byte2 > & c,
const size_type pos ) const
+
+inlineconstexprnoexcept
+
+ +

Returns cursor range to [pos; size()) entries.

+
Precondition
pos < size()
+ +
+
+ +

◆ cursor_subrange() [2/2]

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
constexpr cursor_range_t< Byte2 > sbepp::detail::flat_group_base< Byte, Entry, Dimension >::cursor_subrange (cursor< Byte2 > & c,
const size_type pos,
const size_type count ) const
+
+inlineconstexprnoexcept
+
+ +

Returns cursor range to [pos; pos+count) entries.

+
Precondition
pos < size()
+
+count <= size() - pos
+ +
+
+ +

◆ front()

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+ + + + + +
+ + + + + + + +
constexpr reference sbepp::detail::flat_group_base< Byte, Entry, Dimension >::front () const
+
+inlineconstexprnoexcept
+
+ +

Returns the first entry.

+
Precondition
!empty()
+ +
+
+ +

◆ operator[]()

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+ + + + + +
+ + + + + + + +
constexpr reference sbepp::detail::flat_group_base< Byte, Entry, Dimension >::operator[] (size_type pos) const
+
+inlineconstexprnoexcept
+
+ +

Access group entry at pos

+
Precondition
pos < size()
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1flat__group__base.js b/1.4.1/classsbepp_1_1detail_1_1flat__group__base.js new file mode 100644 index 0000000..0ec1627 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1flat__group__base.js @@ -0,0 +1,26 @@ +var classsbepp_1_1detail_1_1flat__group__base = +[ + [ "cursor_iterator", "classsbepp_1_1detail_1_1flat__group__base.html#a40c3e55bf1da4101f6de8369e08e89f2", null ], + [ "cursor_range_t", "classsbepp_1_1detail_1_1flat__group__base.html#a64cf8a6a8703a2571c590916e85351de", null ], + [ "difference_type", "classsbepp_1_1detail_1_1flat__group__base.html#adb75944a0e9c5c8ba3a0505fabcef734", null ], + [ "iterator", "classsbepp_1_1detail_1_1flat__group__base.html#a2900e3f41ffa6b356287f026a3cc4634", null ], + [ "reference", "classsbepp_1_1detail_1_1flat__group__base.html#af9193142f2768c49691f7f53a0cd9880", null ], + [ "sbe_size_type", "classsbepp_1_1detail_1_1flat__group__base.html#a6a98e13ea929370e8de257a2d61e7eea", null ], + [ "size_type", "classsbepp_1_1detail_1_1flat__group__base.html#ae400d7c2364f6dce798259374841eb2e", null ], + [ "value_type", "classsbepp_1_1detail_1_1flat__group__base.html#a73d80a5fb9f0a8438ed8ea26b3826bde", null ], + [ "back", "classsbepp_1_1detail_1_1flat__group__base.html#ad29ce8e67aad9180fe3340ba84f73f3f", null ], + [ "begin", "classsbepp_1_1detail_1_1flat__group__base.html#a7e1d6a86257a96bed56bd00fb8b7e609", null ], + [ "clear", "classsbepp_1_1detail_1_1flat__group__base.html#a2c73368a3be5a993f23185cd58320b11", null ], + [ "cursor_begin", "classsbepp_1_1detail_1_1flat__group__base.html#a7fbeff07ceabcd7a3bb835920c13703c", null ], + [ "cursor_end", "classsbepp_1_1detail_1_1flat__group__base.html#ab0865fc30c9182d0d7f4d9b28ed21e7a", null ], + [ "cursor_range", "classsbepp_1_1detail_1_1flat__group__base.html#a86d36b6de40321f5a13bf9b15783b936", null ], + [ "cursor_subrange", "classsbepp_1_1detail_1_1flat__group__base.html#a58ab082a4ed58b06015ace4679d09a80", null ], + [ "cursor_subrange", "classsbepp_1_1detail_1_1flat__group__base.html#ae155f92736a0daf59846125bc138a0ed", null ], + [ "empty", "classsbepp_1_1detail_1_1flat__group__base.html#a8969dd197ca4a509ce61028663f0c117", null ], + [ "end", "classsbepp_1_1detail_1_1flat__group__base.html#a8e7b30b77663460d88f47c70b450ef32", null ], + [ "front", "classsbepp_1_1detail_1_1flat__group__base.html#a42b38f8a35ba8fb8167baa3b7807c459", null ], + [ "operator[]", "classsbepp_1_1detail_1_1flat__group__base.html#a7a631a0c841e3c1bb51a641a3e957238", null ], + [ "resize", "classsbepp_1_1detail_1_1flat__group__base.html#aab30c6ced657b372c6dff349953df862", null ], + [ "sbe_size", "classsbepp_1_1detail_1_1flat__group__base.html#a2d8dc166146702d728af7f12ff8cecb7", null ], + [ "size", "classsbepp_1_1detail_1_1flat__group__base.html#a7e1b0794803482202b68663cb180d2e6", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1flat__group__base.png b/1.4.1/classsbepp_1_1detail_1_1flat__group__base.png new file mode 100644 index 0000000..00feffa Binary files /dev/null and b/1.4.1/classsbepp_1_1detail_1_1flat__group__base.png differ diff --git a/1.4.1/classsbepp_1_1detail_1_1message__base-members.html b/1.4.1/classsbepp_1_1detail_1_1message__base-members.html new file mode 100644 index 0000000..0516530 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1message__base-members.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::message_base< Byte, Header > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::message_base< Byte, Header >, including all inherited members.

+ + + + + +
byte_range()=defaultsbepp::detail::byte_range< Byte >
byte_range(Byte *begin, Byte *end) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(Byte *ptr, const std::size_t size) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(const byte_range< Byte2 > &other) noexceptsbepp::detail::byte_range< Byte >inline
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1message__base.html b/1.4.1/classsbepp_1_1detail_1_1message__base.html new file mode 100644 index 0000000..ecd2fa4 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1message__base.html @@ -0,0 +1,161 @@ + + + + + + + + +sbepp: sbepp::detail::message_base< Byte, Header > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::message_base< Byte, Header > Class Template Reference
+
+
+ +

Base class for messages. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::detail::message_base< Byte, Header >:
+
+
+ + +sbepp::detail::byte_range< Byte > + +
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from sbepp::detail::byte_range< Byte >
byte_range ()=default
 Initializes to nullptr
 
+constexpr byte_range (Byte *begin, Byte *end) noexcept
 Constructs from a pair of pointers.
 
+constexpr byte_range (Byte *ptr, const std::size_t size) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr byte_range (const byte_range< Byte2 > &other) noexcept
 Copy constructor. Available if Byte2* is convertible to Byte*
 
+

Detailed Description

+
template<typename Byte, typename Header>
+class sbepp::detail::message_base< Byte, Header >

Base class for messages.

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1message__base.png b/1.4.1/classsbepp_1_1detail_1_1message__base.png new file mode 100644 index 0000000..980b2cb Binary files /dev/null and b/1.4.1/classsbepp_1_1detail_1_1message__base.png differ diff --git a/1.4.1/classsbepp_1_1detail_1_1nested__group__base-members.html b/1.4.1/classsbepp_1_1detail_1_1nested__group__base-members.html new file mode 100644 index 0000000..534dc60 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1nested__group__base-members.html @@ -0,0 +1,145 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::nested_group_base< Byte, Entry, Dimension > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::nested_group_base< Byte, Entry, Dimension >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
begin() const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
byte_range()=defaultsbepp::detail::byte_range< Byte >
byte_range(Byte *begin, Byte *end) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(Byte *ptr, const std::size_t size) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(const byte_range< Byte2 > &other) noexceptsbepp::detail::byte_range< Byte >inline
clear() const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
cursor_begin(cursor< Byte2 > &c) const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
cursor_end(cursor< Byte2 > &c) const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
cursor_iterator typedefsbepp::detail::nested_group_base< Byte, Entry, Dimension >
cursor_range(cursor< Byte2 > &c) const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
cursor_range_t typedefsbepp::detail::nested_group_base< Byte, Entry, Dimension >
cursor_subrange(cursor< Byte2 > &c, const size_type pos) const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
cursor_subrange(cursor< Byte2 > &c, const size_type pos, const size_type count) const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
difference_type typedefsbepp::detail::nested_group_base< Byte, Entry, Dimension >
empty() const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
end() const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
front() const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
iterator typedefsbepp::detail::nested_group_base< Byte, Entry, Dimension >
max_size() noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inlinestatic
reference typedefsbepp::detail::nested_group_base< Byte, Entry, Dimension >
resize(const size_type count) const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
sbe_size() const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
sbe_size_type typedefsbepp::detail::nested_group_base< Byte, Entry, Dimension >
size() const noexceptsbepp::detail::nested_group_base< Byte, Entry, Dimension >inline
size_type typedefsbepp::detail::nested_group_base< Byte, Entry, Dimension >
value_type typedefsbepp::detail::nested_group_base< Byte, Entry, Dimension >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1nested__group__base.html b/1.4.1/classsbepp_1_1detail_1_1nested__group__base.html new file mode 100644 index 0000000..483d0b5 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1nested__group__base.html @@ -0,0 +1,401 @@ + + + + + + + + +sbepp: sbepp::detail::nested_group_base< Byte, Entry, Dimension > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::nested_group_base< Byte, Entry, Dimension > Class Template Reference
+
+
+ +

Base class for a nested group. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::detail::nested_group_base< Byte, Entry, Dimension >:
+
+
+ + +sbepp::detail::byte_range< Byte > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using value_type = Entry
 entry type
 
+using reference = value_type
 value_type
 
+using sbe_size_type
 numInGroup value type
 
+using size_type = typename sbe_size_type::value_type
 raw size type
 
+using difference_type = typename std::make_signed<size_type>::type
 signed size_type
 
+using iterator
 Forward iterator to value_type. Satisfies std::forward_iterator
 
+template<typename Byte2 >
using cursor_range_t
 Type of a cursor range. Satisfies std::ranges::input_range
 
+template<typename Byte2 >
using cursor_iterator = typename cursor_range_t<Byte2>::iterator
 cursor_range_t::iterator. Satisfies std::input_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+constexpr sbe_size_type sbe_size () const noexcept
 Returns header's numInGroup
 
+constexpr size_type size () const noexcept
 Returns raw size.
 
+constexpr void resize (const size_type count) const noexcept
 Sets numInGroup to count
 
+constexpr bool empty () const noexcept
 Checks if size() == 0
 
+constexpr iterator begin () const noexcept
 Returns an iterator to the beginning.
 
+constexpr iterator end () const noexcept
 Returns an iterator to the end.
 
constexpr reference front () const noexcept
 Returns the first element.
 
constexpr void clear () const noexcept
 Resizes to 0
 
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_range_t< Byte2 > cursor_range (cursor< Byte2 > &c) const noexcept
 Returns cursor range to all group entries.
 
template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_range_t< Byte2 > cursor_subrange (cursor< Byte2 > &c, const size_type pos) const noexcept
 Returns cursor range to [pos; size()) entries.
 
template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_range_t< Byte2 > cursor_subrange (cursor< Byte2 > &c, const size_type pos, const size_type count) const noexcept
 Returns cursor range to [pos; pos+count) entries.
 
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_iterator< Byte2 > cursor_begin (cursor< Byte2 > &c) const noexcept
 Returns cursor iterator to the beginning.
 
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
constexpr cursor_iterator< Byte2 > cursor_end (cursor< Byte2 > &c) const noexcept
 Returns cursor iterator to the end.
 
- Public Member Functions inherited from sbepp::detail::byte_range< Byte >
byte_range ()=default
 Initializes to nullptr
 
+constexpr byte_range (Byte *begin, Byte *end) noexcept
 Constructs from a pair of pointers.
 
+constexpr byte_range (Byte *ptr, const std::size_t size) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr byte_range (const byte_range< Byte2 > &other) noexcept
 Copy constructor. Available if Byte2* is convertible to Byte*
 
+ + + + +

+Static Public Member Functions

+static constexpr size_type max_size () noexcept
 Returns numInGroup's maxValue
 
+

Detailed Description

+
template<typename Byte, typename Entry, typename Dimension>
+class sbepp::detail::nested_group_base< Byte, Entry, Dimension >

Base class for a nested group.

+

Member Function Documentation

+ +

◆ clear()

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+ + + + + +
+ + + + + + + +
constexpr void sbepp::detail::nested_group_base< Byte, Entry, Dimension >::clear () const
+
+inlineconstexprnoexcept
+
+ +

Resizes to 0

+
Postcondition
size() == 0
+ +
+
+ +

◆ cursor_subrange() [1/2]

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
+ + + + + +
+ + + + + + + + + + + +
constexpr cursor_range_t< Byte2 > sbepp::detail::nested_group_base< Byte, Entry, Dimension >::cursor_subrange (cursor< Byte2 > & c,
const size_type pos ) const
+
+inlineconstexprnoexcept
+
+ +

Returns cursor range to [pos; size()) entries.

+
Precondition
pos < size()
+ +
+
+ +

◆ cursor_subrange() [2/2]

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+
+template<typename Byte2 , typename = enable_if_cursor_compatible_t<Byte, Byte2>>
+ + + + + +
+ + + + + + + + + + + + + + + + +
constexpr cursor_range_t< Byte2 > sbepp::detail::nested_group_base< Byte, Entry, Dimension >::cursor_subrange (cursor< Byte2 > & c,
const size_type pos,
const size_type count ) const
+
+inlineconstexprnoexcept
+
+ +

Returns cursor range to [pos; pos+count) entries.

+
Precondition
pos < size()
+
+count <= size() - pos
+ +
+
+ +

◆ front()

+ +
+
+
+template<typename Byte , typename Entry , typename Dimension >
+ + + + + +
+ + + + + + + +
constexpr reference sbepp::detail::nested_group_base< Byte, Entry, Dimension >::front () const
+
+inlineconstexprnoexcept
+
+ +

Returns the first element.

+
Precondition
!empty()
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1nested__group__base.js b/1.4.1/classsbepp_1_1detail_1_1nested__group__base.js new file mode 100644 index 0000000..34caa91 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1nested__group__base.js @@ -0,0 +1,24 @@ +var classsbepp_1_1detail_1_1nested__group__base = +[ + [ "cursor_iterator", "classsbepp_1_1detail_1_1nested__group__base.html#a3b225b6f0f01b59ac75a7a907260b9bc", null ], + [ "cursor_range_t", "classsbepp_1_1detail_1_1nested__group__base.html#a434f06aca0d40628646a873f248a2d57", null ], + [ "difference_type", "classsbepp_1_1detail_1_1nested__group__base.html#a79302913738335822ae1cf37a98a9b8d", null ], + [ "iterator", "classsbepp_1_1detail_1_1nested__group__base.html#acaf482e9995f75fc0d66a2d1f4444f27", null ], + [ "reference", "classsbepp_1_1detail_1_1nested__group__base.html#a3f982f28fc8cc78c6f90f45c62187fd1", null ], + [ "sbe_size_type", "classsbepp_1_1detail_1_1nested__group__base.html#af558ae54f86ff03c5238de86cfb28d49", null ], + [ "size_type", "classsbepp_1_1detail_1_1nested__group__base.html#a5c7d690ff890d61ea56a0207ea02eccb", null ], + [ "value_type", "classsbepp_1_1detail_1_1nested__group__base.html#a2a8c53fdd91117bc3aa24392469d31c4", null ], + [ "begin", "classsbepp_1_1detail_1_1nested__group__base.html#ae7cb7867e43f254ef4ed0f3bee35cdb6", null ], + [ "clear", "classsbepp_1_1detail_1_1nested__group__base.html#abcc1b411ab284958f0b08f49720d0cfa", null ], + [ "cursor_begin", "classsbepp_1_1detail_1_1nested__group__base.html#ac0d4433d69efcc6a6e380522c8abb937", null ], + [ "cursor_end", "classsbepp_1_1detail_1_1nested__group__base.html#ab78dfd70257bda1410e61994a03fe356", null ], + [ "cursor_range", "classsbepp_1_1detail_1_1nested__group__base.html#ada4f73e140660ecf2c28b031f28a9305", null ], + [ "cursor_subrange", "classsbepp_1_1detail_1_1nested__group__base.html#a2187a8faa4c16725a362848fe6788c3c", null ], + [ "cursor_subrange", "classsbepp_1_1detail_1_1nested__group__base.html#ade03dcd0feb2d6eb432cb1d99bf797fe", null ], + [ "empty", "classsbepp_1_1detail_1_1nested__group__base.html#ac4446b7435b0b902c93b3a9d8bf23a97", null ], + [ "end", "classsbepp_1_1detail_1_1nested__group__base.html#a1eea9c4883cd16d7d8a1cf95a126b5ec", null ], + [ "front", "classsbepp_1_1detail_1_1nested__group__base.html#ab1dbdc9532ded2939a7fec25f7366e5d", null ], + [ "resize", "classsbepp_1_1detail_1_1nested__group__base.html#a94d67364c1142558f4646b57f2c14aac", null ], + [ "sbe_size", "classsbepp_1_1detail_1_1nested__group__base.html#a7a5dc3e92cefe05d090c077c2dc21d2d", null ], + [ "size", "classsbepp_1_1detail_1_1nested__group__base.html#a0d7837dce6459b57de4042364c8c5160", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1nested__group__base.png b/1.4.1/classsbepp_1_1detail_1_1nested__group__base.png new file mode 100644 index 0000000..7eca1e2 Binary files /dev/null and b/1.4.1/classsbepp_1_1detail_1_1nested__group__base.png differ diff --git a/1.4.1/classsbepp_1_1detail_1_1optional__base-members.html b/1.4.1/classsbepp_1_1detail_1_1optional__base-members.html new file mode 100644 index 0000000..0b8defd --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1optional__base-members.html @@ -0,0 +1,137 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::optional_base< T, Derived > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::optional_base< T, Derived >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< T, Derived >inline
in_range() const noexceptsbepp::detail::optional_base< T, Derived >inline
operator bool() const noexceptsbepp::detail::optional_base< T, Derived >inlineexplicit
operator!=sbepp::detail::optional_base< T, Derived >friend
operator*() noexceptsbepp::detail::optional_base< T, Derived >inline
operator*() const noexceptsbepp::detail::optional_base< T, Derived >inline
operator<sbepp::detail::optional_base< T, Derived >friend
operator<=sbepp::detail::optional_base< T, Derived >friend
operator<=>sbepp::detail::optional_base< T, Derived >friend
operator==sbepp::detail::optional_base< T, Derived >friend
operator>sbepp::detail::optional_base< T, Derived >friend
operator>=sbepp::detail::optional_base< T, Derived >friend
optional_base()=defaultsbepp::detail::optional_base< T, Derived >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< T, Derived >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< T, Derived >inline
value() const noexceptsbepp::detail::optional_base< T, Derived >inline
value_or(T default_value) const noexceptsbepp::detail::optional_base< T, Derived >inline
value_type typedefsbepp::detail::optional_base< T, Derived >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1optional__base.html b/1.4.1/classsbepp_1_1detail_1_1optional__base.html new file mode 100644 index 0000000..6a894a3 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1optional__base.html @@ -0,0 +1,221 @@ + + + + + + + + +sbepp: sbepp::detail::optional_base< T, Derived > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::optional_base< T, Derived > Class Template Reference
+
+
+ +

Base class for optional types. + More...

+ +

#include <sbepp.hpp>

+ + + + + +

+Public Types

+using value_type = T
 Underlying type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (T default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Friends

Comparisons

The contained values are compared only if both lhs and rhs are not null. Otherwise:

    +
  • lhs is equal to rhs iff both are null
  • +
  • lhs is less than rhs iff rhs is not null and lhs is null
  • +
+
+constexpr friend bool operator== (const optional_base &lhs, const optional_base &rhs) noexcept
 Tests if lhs is equal to rhs
 
+constexpr friend std::strong_ordering operator<=> (const optional_base &lhs, const optional_base &rhs) noexcept
 Available only if SBEPP_HAS_THREE_WAY_COMPARISON == 1.
 
+constexpr friend bool operator!= (const optional_base &lhs, const optional_base &rhs) noexcept
 Tests if lhs is not equal to rhs
 
+constexpr friend bool operator< (const optional_base &lhs, const optional_base &rhs) noexcept
 Tests if lhs is less than rhs
 
+constexpr friend bool operator<= (const optional_base &lhs, const optional_base &rhs) noexcept
 Tests if lhs is less than or equal to rhs
 
+constexpr friend bool operator> (const optional_base &lhs, const optional_base &rhs) noexcept
 Tests if lhs is greater than rhs
 
+constexpr friend bool operator>= (const optional_base &lhs, const optional_base &rhs) noexcept
 Tests if lhs is greater than or equal to rhs
 
+

Detailed Description

+
template<typename T, typename Derived>
+class sbepp::detail::optional_base< T, Derived >

Base class for optional types.

+
Note
in_range() and has_value() checks are not enforced implicitly, it's up to client to apply it.
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1optional__base.js b/1.4.1/classsbepp_1_1detail_1_1optional__base.js new file mode 100644 index 0000000..4bfe370 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1optional__base.js @@ -0,0 +1,21 @@ +var classsbepp_1_1detail_1_1optional__base = +[ + [ "value_type", "classsbepp_1_1detail_1_1optional__base.html#a641442faa106a5fb5446b98e9532796b", null ], + [ "optional_base", "classsbepp_1_1detail_1_1optional__base.html#a5584a3a3f8e074c4b3cb3d6fcfabda3b", null ], + [ "optional_base", "classsbepp_1_1detail_1_1optional__base.html#a448fd0118d8fefec3fe55cc00f918b02", null ], + [ "optional_base", "classsbepp_1_1detail_1_1optional__base.html#ad0e8f5bf65d100e9a42a1834cd6623e0", null ], + [ "has_value", "classsbepp_1_1detail_1_1optional__base.html#ad2a0d48a5f8448e41a65838af24a4269", null ], + [ "in_range", "classsbepp_1_1detail_1_1optional__base.html#ab9eb32c4e62dbb05397486c7ac9fc445", null ], + [ "operator bool", "classsbepp_1_1detail_1_1optional__base.html#a38fedc762cfb05bb0abf25c1abde297a", null ], + [ "operator*", "classsbepp_1_1detail_1_1optional__base.html#ae6762b211da1f64d6c79b71dee8be69b", null ], + [ "operator*", "classsbepp_1_1detail_1_1optional__base.html#aed44c71edcb9d852a154cd63f7131cdc", null ], + [ "value", "classsbepp_1_1detail_1_1optional__base.html#a26c508ad9e9f3285170f5745112a6b0b", null ], + [ "value_or", "classsbepp_1_1detail_1_1optional__base.html#a573de5ba1180952c1493c9e1dd071d06", null ], + [ "operator!=", "classsbepp_1_1detail_1_1optional__base.html#a29c60222da3b2f5ca2cd966c807f448b", null ], + [ "operator<", "classsbepp_1_1detail_1_1optional__base.html#a0321dd26a52eedb9b06600ef8dc9501d", null ], + [ "operator<=", "classsbepp_1_1detail_1_1optional__base.html#a31a03308d5620d572e5745c5e4892d29", null ], + [ "operator<=>", "classsbepp_1_1detail_1_1optional__base.html#af9693d0d4a0c754e6bb111c69333dfec", null ], + [ "operator==", "classsbepp_1_1detail_1_1optional__base.html#af29c05ce41885297bf1851c281b3bcfb", null ], + [ "operator>", "classsbepp_1_1detail_1_1optional__base.html#ae4bd79af6b3ededa779f5995d185b947", null ], + [ "operator>=", "classsbepp_1_1detail_1_1optional__base.html#a5bdb6d4fd37359ab7d45624be2487053", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1required__base-members.html b/1.4.1/classsbepp_1_1detail_1_1required__base-members.html new file mode 100644 index 0000000..e5bf152 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1required__base-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::required_base< T, Derived > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::required_base< T, Derived >, including all inherited members.

+ + + + + + + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< T, Derived >inline
operator!=sbepp::detail::required_base< T, Derived >friend
operator*() noexceptsbepp::detail::required_base< T, Derived >inline
operator*() const noexceptsbepp::detail::required_base< T, Derived >inline
operator<sbepp::detail::required_base< T, Derived >friend
operator<=sbepp::detail::required_base< T, Derived >friend
operator<=>sbepp::detail::required_base< T, Derived >friend
operator==sbepp::detail::required_base< T, Derived >friend
operator>sbepp::detail::required_base< T, Derived >friend
operator>=sbepp::detail::required_base< T, Derived >friend
required_base()=defaultsbepp::detail::required_base< T, Derived >
required_base(value_type val) noexceptsbepp::detail::required_base< T, Derived >inline
value() const noexceptsbepp::detail::required_base< T, Derived >inline
value_type typedefsbepp::detail::required_base< T, Derived >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1required__base.html b/1.4.1/classsbepp_1_1detail_1_1required__base.html new file mode 100644 index 0000000..980afc9 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1required__base.html @@ -0,0 +1,202 @@ + + + + + + + + +sbepp: sbepp::detail::required_base< T, Derived > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::required_base< T, Derived > Class Template Reference
+
+
+ +

Base class for required types. + More...

+ +

#include <sbepp.hpp>

+ + + + + +

+Public Types

+using value_type = T
 Underlying type.
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Friends

Comparisons

Comparisons are performed on underlying values

+
+auto operator<=> (const required_base &, const required_base &)=default
 Available only if SBEPP_HAS_THREE_WAY_COMPARISON == 1.
 
+constexpr friend bool operator== (const required_base &lhs, const required_base &rhs) noexcept
 Tests if lhs is equal to rhs
 
+constexpr friend bool operator!= (const required_base &lhs, const required_base &rhs) noexcept
 Tests if lhs is not equal to rhs
 
+constexpr friend bool operator< (const required_base &lhs, const required_base &rhs) noexcept
 Tests if lhs is less than rhs
 
+constexpr friend bool operator<= (const required_base &lhs, const required_base &rhs) noexcept
 Tests if lhs is less than or equal to rhs
 
+constexpr friend bool operator> (const required_base &lhs, const required_base &rhs) noexcept
 Tests if lhs is greater than rhs
 
+constexpr friend bool operator>= (const required_base &lhs, const required_base &rhs) noexcept
 Tests if lhs is greater than or equal to rhs
 
+

Detailed Description

+
template<typename T, typename Derived>
+class sbepp::detail::required_base< T, Derived >

Base class for required types.

+
Note
in_range() check is not enforced implicitly, it's up to client to apply it
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1required__base.js b/1.4.1/classsbepp_1_1detail_1_1required__base.js new file mode 100644 index 0000000..809a932 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1required__base.js @@ -0,0 +1,17 @@ +var classsbepp_1_1detail_1_1required__base = +[ + [ "value_type", "classsbepp_1_1detail_1_1required__base.html#abb2ddc0f7b35df32f2ab11f803c10229", null ], + [ "required_base", "classsbepp_1_1detail_1_1required__base.html#a8b1e243938cfea876b2ae1ef49c52aee", null ], + [ "required_base", "classsbepp_1_1detail_1_1required__base.html#ae72fc28c0a16383db0c88522e0de14df", null ], + [ "in_range", "classsbepp_1_1detail_1_1required__base.html#aa80bf5f235a4a5dfc01e606ebb883cc3", null ], + [ "operator*", "classsbepp_1_1detail_1_1required__base.html#ac7da1724684e57848793d15a969dc11f", null ], + [ "operator*", "classsbepp_1_1detail_1_1required__base.html#a6615a8b9c2f761fa2051244ba52dac57", null ], + [ "value", "classsbepp_1_1detail_1_1required__base.html#a41b70ceece0da5f77cd12093da043bed", null ], + [ "operator!=", "classsbepp_1_1detail_1_1required__base.html#a5fd1549b7b95017eeb1a6a8886d42ab6", null ], + [ "operator<", "classsbepp_1_1detail_1_1required__base.html#ab2d043a2687ca5a711d53dc96a997fe9", null ], + [ "operator<=", "classsbepp_1_1detail_1_1required__base.html#aca77edb88ade9fe2c734865861c00e3f", null ], + [ "operator<=>", "classsbepp_1_1detail_1_1required__base.html#ae603655d322cdbb43304a9c3fbd25e9c", null ], + [ "operator==", "classsbepp_1_1detail_1_1required__base.html#a706e5340ab700f60a8b8c8280d437380", null ], + [ "operator>", "classsbepp_1_1detail_1_1required__base.html#a0a220179854bc5b4203fba5def9c7626", null ], + [ "operator>=", "classsbepp_1_1detail_1_1required__base.html#a32116c6fa9d0ac885430c13d2c63725f", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1static__array__ref-members.html b/1.4.1/classsbepp_1_1detail_1_1static__array__ref-members.html new file mode 100644 index 0000000..602e15e --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1static__array__ref-members.html @@ -0,0 +1,153 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::detail::static_array_ref< Byte, Value, N, Tag > Member List
+
+
+ +

This is the complete list of members for sbepp::detail::static_array_ref< Byte, Value, N, Tag >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
assign(size_type count, const value_type value) const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
assign(InputIt first, InputIt last) constsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
assign(std::initializer_list< value_type > ilist) const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
assign_range(R &&r) constsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
assign_string(const char *str, const eos_null eos_mode=eos_null::all) const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
assign_string(R &&r, const eos_null eos_mode=eos_null::all) constsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
back() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
begin() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
byte_range()=defaultsbepp::detail::byte_range< Byte >
byte_range(Byte *begin, Byte *end) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(Byte *ptr, const std::size_t size) noexceptsbepp::detail::byte_range< Byte >inline
byte_range(const byte_range< Byte2 > &other) noexceptsbepp::detail::byte_range< Byte >inline
data() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
difference_type typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
element_type typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
empty() noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inlinestatic
end() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
fill(const value_type value) const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
front() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
iterator typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
max_size() noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inlinestatic
operator[](size_type pos) const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
pointer typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
raw() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
rbegin() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
reference typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
rend() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
reverse_iterator typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
size() noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inlinestatic
size_type typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
strlen() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
strlen_r() const noexceptsbepp::detail::static_array_ref< Byte, Value, N, Tag >inline
tag typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
value_type typedefsbepp::detail::static_array_ref< Byte, Value, N, Tag >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1static__array__ref.html b/1.4.1/classsbepp_1_1detail_1_1static__array__ref.html new file mode 100644 index 0000000..1f4285c --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1static__array__ref.html @@ -0,0 +1,706 @@ + + + + + + + + +sbepp: sbepp::detail::static_array_ref< Byte, Value, N, Tag > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::detail::static_array_ref< Byte, Value, N, Tag > Class Template Reference
+
+
+ +

Represents reference to fixed-size array. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::detail::static_array_ref< Byte, Value, N, Tag >:
+
+
+ + +sbepp::detail::byte_range< Byte > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using element_type = detail::apply_cv_qualifiers_t<Byte, Value>
 final element type. value_type with the same cv-qualifiers as Byte
 
+using value_type = Value
 same as Value
 
+using size_type = std::size_t
 std::size_t
 
+using difference_type = std::ptrdiff_t
 std::ptrdiff_t
 
+using reference = element_type&
 element reference type
 
+using pointer = element_type*
 element pointer type
 
+using iterator = pointer
 iterator type. Satisfies std::random_access_iterator
 
+using reverse_iterator = std::reverse_iterator<iterator>
 reverse iterator type
 
+using tag = Tag
 type tag
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

constexpr reference operator[] (size_type pos) const noexcept
 Access element at pos
 
+constexpr reference front () const noexcept
 Access the first element.
 
+constexpr reference back () const noexcept
 Access the last element.
 
+constexpr pointer data () const noexcept
 Direct access to the underlying array.
 
+constexpr iterator begin () const noexcept
 Returns an iterator to the beginning.
 
+constexpr iterator end () const noexcept
 Returns an iterator to the end.
 
+constexpr reverse_iterator rbegin () const noexcept
 Returns a reverse iterator to the beginning.
 
+constexpr reverse_iterator rend () const noexcept
 Returns a reverse iterator to the end.
 
constexpr static_array_ref< Byte, detail::remove_cv_t< Byte >, N, Tag > raw () const noexcept
 Returns static_array_ref<Byte, Byte, N, Tag>.
 
constexpr std::size_t strlen () const noexcept
 Calculates string length from left to right.
 
constexpr std::size_t strlen_r () const noexcept
 Calculates string length from right to left.
 
template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr iterator assign_string (const char *str, const eos_null eos_mode=eos_null::all) const noexcept
 Assigns null-terminated string.
 
template<typename R , typename = enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
constexpr iterator assign_string (R &&r, const eos_null eos_mode=eos_null::all) const
 Assigns string represented by a range.
 
template<typename R , typename = enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
constexpr iterator assign_range (R &&r) const
 Assigns range.
 
template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr void fill (const value_type value) const noexcept
 Assigns value to all elements.
 
template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr iterator assign (size_type count, const value_type value) const noexcept
 Assigns value to first count elements.
 
template<typename InputIt , typename = enable_if_writable_t<Byte, InputIt>>
constexpr iterator assign (InputIt first, InputIt last) const
 Assigns elements from [first; last) range to first elements.
 
template<typename T = void, typename = enable_if_writable_t<Byte, T>>
constexpr iterator assign (std::initializer_list< value_type > ilist) const noexcept
 Assigns initializer list to first elements.
 
- Public Member Functions inherited from sbepp::detail::byte_range< Byte >
byte_range ()=default
 Initializes to nullptr
 
+constexpr byte_range (Byte *begin, Byte *end) noexcept
 Constructs from a pair of pointers.
 
+constexpr byte_range (Byte *ptr, const std::size_t size) noexcept
 Constructs from pointer and size.
 
+template<typename Byte2 , typename = enable_if_convertible_t<Byte2, Byte>>
constexpr byte_range (const byte_range< Byte2 > &other) noexcept
 Copy constructor. Available if Byte2* is convertible to Byte*
 
+ + + + + + + + + + +

+Static Public Member Functions

+static constexpr bool empty () noexcept
 Checks if size() != 0
 
+static constexpr size_type size () noexcept
 Returns N
 
+static constexpr size_type max_size () noexcept
 Returns size()
 
+

Detailed Description

+
template<typename Byte, typename Value, std::size_t N, typename Tag>
+class sbepp::detail::static_array_ref< Byte, Value, N, Tag >

Represents reference to fixed-size array.

+

The general precondition for most functions is that current buffer should be able to hold all elements

Template Parameters
+ + + + + +
Bytebyte type
Valuearray element type from schema
Narray length
Tagtype tag
+
+
+

Member Function Documentation

+ +

◆ assign() [1/3]

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+
+template<typename InputIt , typename = enable_if_writable_t<Byte, InputIt>>
+ + + + + +
+ + + + + + + + + + + +
constexpr iterator sbepp::detail::static_array_ref< Byte, Value, N, Tag >::assign (InputIt first,
InputIt last ) const
+
+inlineconstexpr
+
+ +

Assigns elements from [first; last) range to first elements.

+
Returns
iterator past the last written byte
+
Precondition
std::distance(first, last) <= size()
+ +
+
+ +

◆ assign() [2/3]

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
+ + + + + +
+ + + + + + + + + + + +
constexpr iterator sbepp::detail::static_array_ref< Byte, Value, N, Tag >::assign (size_type count,
const value_type value ) const
+
+inlineconstexprnoexcept
+
+ +

Assigns value to first count elements.

+
Parameters
+ + + +
countnumber of elements to assign to
valuevalue to assign
+
+
+
Returns
iterator past the last written byte
+
Precondition
count <= size()
+ +
+
+ +

◆ assign() [3/3]

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
+ + + + + +
+ + + + + + + +
constexpr iterator sbepp::detail::static_array_ref< Byte, Value, N, Tag >::assign (std::initializer_list< value_type > ilist) const
+
+inlineconstexprnoexcept
+
+ +

Assigns initializer list to first elements.

+
Parameters
+ + +
ilistvalues to assign
+
+
+
Returns
iterator past the last written byte
+
Precondition
ilist.size() <= size()
+ +
+
+ +

◆ assign_range()

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+
+template<typename R , typename = enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
+ + + + + +
+ + + + + + + +
constexpr iterator sbepp::detail::static_array_ref< Byte, Value, N, Tag >::assign_range (R && r) const
+
+inlineconstexpr
+
+ +

Assigns range.

+
Parameters
+ + +
rrange to assign. In C++20, required to satisfy std::ranges::range, or std::begin(r)/std::end(r) as valid expressions for older C++ versions
+
+
+
Returns
iterator past the last written byte
+
Precondition
range_size(r) <= size()
+ +
+
+ +

◆ assign_string() [1/2]

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
+ + + + + +
+ + + + + + + + + + + +
constexpr iterator sbepp::detail::static_array_ref< Byte, Value, N, Tag >::assign_string (const char * str,
const eos_null eos_mode = eos_null::all ) const
+
+inlineconstexprnoexcept
+
+ +

Assigns null-terminated string.

+
Parameters
+ + + +
strnull-terminated string
eos_modedetermines how many null bytes to write after the end-of-string when strlen(str) < size()
+
+
+
Returns
iterator past the last written string character (without null bytes)
+
Precondition
str != nullptr
+
+strlen(str) <= size()
+ +
+
+ +

◆ assign_string() [2/2]

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+
+template<typename R , typename = enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
+ + + + + +
+ + + + + + + + + + + +
constexpr iterator sbepp::detail::static_array_ref< Byte, Value, N, Tag >::assign_string (R && r,
const eos_null eos_mode = eos_null::all ) const
+
+inlineconstexpr
+
+ +

Assigns string represented by a range.

+
Parameters
+ + + +
rstring range to assign. In C++20, required to satisfy std::ranges::range, or std::begin(r)/std::end(r) as valid expressions for older C++ versions
eos_modedetermines how many null bytes to write after the end-of-string when range_size(r) < size()
+
+
+
Returns
iterator past the last written string character (without null bytes)
+
Precondition
range_size(r) <= size()
+ +
+
+ +

◆ fill()

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+
+template<typename T = void, typename = enable_if_writable_t<Byte, T>>
+ + + + + +
+ + + + + + + +
constexpr void sbepp::detail::static_array_ref< Byte, Value, N, Tag >::fill (const value_type value) const
+
+inlineconstexprnoexcept
+
+ +

Assigns value to all elements.

+
Parameters
+ + +
valuevalue to assign
+
+
+ +
+
+ +

◆ operator[]()

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+ + + + + +
+ + + + + + + +
constexpr reference sbepp::detail::static_array_ref< Byte, Value, N, Tag >::operator[] (size_type pos) const
+
+inlineconstexprnoexcept
+
+ +

Access element at pos

+
Precondition
pos < size()
+ +
+
+ +

◆ raw()

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+ + + + + +
+ + + + + + + +
constexpr static_array_ref< Byte, detail::remove_cv_t< Byte >, N, Tag > sbepp::detail::static_array_ref< Byte, Value, N, Tag >::raw () const
+
+inlineconstexprnoexcept
+
+ +

Returns static_array_ref<Byte, Byte, N, Tag>.

+

Useful in constexpr context to modify an array which has different Byte and Value types. Example:

+
a1[0] = 'a'; // error: cannot convert `char` to `std::byte`
+
a1.raw()[0] = std::byte{'a'}; // OK
+
Represents reference to fixed-size array.
Definition sbepp.hpp:2982
+
constexpr static_array_ref< Byte, detail::remove_cv_t< Byte >, N, Tag > raw() const noexcept
Returns static_array_ref<Byte, Byte, N, Tag>.
Definition sbepp.hpp:3099
+
+
+
+ +

◆ strlen()

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+ + + + + +
+ + + + + + + +
constexpr std::size_t sbepp::detail::static_array_ref< Byte, Value, N, Tag >::strlen () const
+
+inlineconstexprnoexcept
+
+ +

Calculates string length from left to right.

+

Calculates stored string length by looking for the first null character from left to right. If not found, returns size().

+ +
+
+ +

◆ strlen_r()

+ +
+
+
+template<typename Byte , typename Value , std::size_t N, typename Tag >
+ + + + + +
+ + + + + + + +
constexpr std::size_t sbepp::detail::static_array_ref< Byte, Value, N, Tag >::strlen_r () const
+
+inlineconstexprnoexcept
+
+ +

Calculates string length from right to left.

+

Calculates stored string length by looking for the first non-null character from right to left. If not found, returns 0.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1detail_1_1static__array__ref.js b/1.4.1/classsbepp_1_1detail_1_1static__array__ref.js new file mode 100644 index 0000000..a581c97 --- /dev/null +++ b/1.4.1/classsbepp_1_1detail_1_1static__array__ref.js @@ -0,0 +1,30 @@ +var classsbepp_1_1detail_1_1static__array__ref = +[ + [ "difference_type", "classsbepp_1_1detail_1_1static__array__ref.html#ae897b6ab0cd2f673d57b625c34734a74", null ], + [ "element_type", "classsbepp_1_1detail_1_1static__array__ref.html#a176748034417a904822fca0e9b7b9de5", null ], + [ "iterator", "classsbepp_1_1detail_1_1static__array__ref.html#a0577190cd9886056a8512fde116c3bd8", null ], + [ "pointer", "classsbepp_1_1detail_1_1static__array__ref.html#aa775677cb577b70b84b0f401ad3c1563", null ], + [ "reference", "classsbepp_1_1detail_1_1static__array__ref.html#a69e247ae253fa7eabf6e4ab9a172f868", null ], + [ "reverse_iterator", "classsbepp_1_1detail_1_1static__array__ref.html#a7a19d2f6a6b3b2256275e7aa13eb5cd0", null ], + [ "size_type", "classsbepp_1_1detail_1_1static__array__ref.html#abb383b2485f0056dc2da7c7abfe25348", null ], + [ "tag", "classsbepp_1_1detail_1_1static__array__ref.html#a8f35529c37c4d55f3a28a73996dfcf68", null ], + [ "value_type", "classsbepp_1_1detail_1_1static__array__ref.html#a8e1cca220f7deac75b4f752714360f0a", null ], + [ "assign", "classsbepp_1_1detail_1_1static__array__ref.html#ae223375ae96f2b4a72cf5002c3ff38ea", null ], + [ "assign", "classsbepp_1_1detail_1_1static__array__ref.html#affc0a2f84dbd5fcc712f1692b7b372e0", null ], + [ "assign", "classsbepp_1_1detail_1_1static__array__ref.html#a65e5c092105176c368e91706e948fca0", null ], + [ "assign_range", "classsbepp_1_1detail_1_1static__array__ref.html#add93caee008d318e2faca8d31986f7f0", null ], + [ "assign_string", "classsbepp_1_1detail_1_1static__array__ref.html#a1f63ff3a5b0cf99df9b632733ff507f3", null ], + [ "assign_string", "classsbepp_1_1detail_1_1static__array__ref.html#acfbcf354ba60eec9135579bf059d93cd", null ], + [ "back", "classsbepp_1_1detail_1_1static__array__ref.html#a8161979b4c364af8280eab33295a846d", null ], + [ "begin", "classsbepp_1_1detail_1_1static__array__ref.html#a52cfd8c882748794a264f46b0e0c713d", null ], + [ "data", "classsbepp_1_1detail_1_1static__array__ref.html#aee2ad1343a3cb7125a0f709823d49ce2", null ], + [ "end", "classsbepp_1_1detail_1_1static__array__ref.html#abebb90c516c364c907bb12866c63d204", null ], + [ "fill", "classsbepp_1_1detail_1_1static__array__ref.html#acfc71a6121767e84db3c226770dab01a", null ], + [ "front", "classsbepp_1_1detail_1_1static__array__ref.html#a286579c340a4b1e83aa172c8663ea4e4", null ], + [ "operator[]", "classsbepp_1_1detail_1_1static__array__ref.html#a1ae586c96a448c07cf689c25b19fd029", null ], + [ "raw", "classsbepp_1_1detail_1_1static__array__ref.html#a5dd21b7f6ea885f1a707ee3da056be14", null ], + [ "rbegin", "classsbepp_1_1detail_1_1static__array__ref.html#addc12c2bc16cb23b01600c3e57d35ac4", null ], + [ "rend", "classsbepp_1_1detail_1_1static__array__ref.html#a08129031f89bb2966ed9c9bac94cd12c", null ], + [ "strlen", "classsbepp_1_1detail_1_1static__array__ref.html#a1e2ded095d44aead9e9d3bb51b19f24f", null ], + [ "strlen_r", "classsbepp_1_1detail_1_1static__array__ref.html#aba31d1b71c89e974a642de24de7c43bb", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1detail_1_1static__array__ref.png b/1.4.1/classsbepp_1_1detail_1_1static__array__ref.png new file mode 100644 index 0000000..c09bab4 Binary files /dev/null and b/1.4.1/classsbepp_1_1detail_1_1static__array__ref.png differ diff --git a/1.4.1/classsbepp_1_1double__opt__t-members.html b/1.4.1/classsbepp_1_1double__opt__t-members.html new file mode 100644 index 0000000..f162969 --- /dev/null +++ b/1.4.1/classsbepp_1_1double__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::double_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::double_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< double, double_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< double, double_opt_t >inline
max_value() noexceptsbepp::double_opt_tinlinestatic
min_value() noexceptsbepp::double_opt_tinlinestatic
null_value() noexceptsbepp::double_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< double, double_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< double, double_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< double, double_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< double, double_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< double, double_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< double, double_opt_t >inline
value() const noexceptsbepp::detail::optional_base< double, double_opt_t >inline
value_or(double default_value) const noexceptsbepp::detail::optional_base< double, double_opt_t >inline
value_type typedefsbepp::detail::optional_base< double, double_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1double__opt__t.html b/1.4.1/classsbepp_1_1double__opt__t.html new file mode 100644 index 0000000..225673f --- /dev/null +++ b/1.4.1/classsbepp_1_1double__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::double_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::double_opt_t Class Reference
+
+
+ +

Built-in double optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::double_opt_t:
+
+
+ + +sbepp::detail::optional_base< double, double_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< double, double_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< double, double_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (double default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in double optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1double__opt__t.png b/1.4.1/classsbepp_1_1double__opt__t.png new file mode 100644 index 0000000..8d70040 Binary files /dev/null and b/1.4.1/classsbepp_1_1double__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1double__t-members.html b/1.4.1/classsbepp_1_1double__t-members.html new file mode 100644 index 0000000..7caa305 --- /dev/null +++ b/1.4.1/classsbepp_1_1double__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::double_t Member List
+
+
+ +

This is the complete list of members for sbepp::double_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< double, double_t >inline
max_value() noexceptsbepp::double_tinlinestatic
min_value() noexceptsbepp::double_tinlinestatic
operator*() noexceptsbepp::detail::required_base< double, double_t >inline
operator*() const noexceptsbepp::detail::required_base< double, double_t >inline
required_base()=defaultsbepp::detail::required_base< double, double_t >
required_base(value_type val) noexceptsbepp::detail::required_base< double, double_t >inline
value() const noexceptsbepp::detail::required_base< double, double_t >inline
value_type typedefsbepp::detail::required_base< double, double_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1double__t.html b/1.4.1/classsbepp_1_1double__t.html new file mode 100644 index 0000000..4e6cac7 --- /dev/null +++ b/1.4.1/classsbepp_1_1double__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::double_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::double_t Class Reference
+
+
+ +

Built-in double required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::double_t:
+
+
+ + +sbepp::detail::required_base< double, double_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< double, double_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< double, double_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in double required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1double__t.png b/1.4.1/classsbepp_1_1double__t.png new file mode 100644 index 0000000..abe8d62 Binary files /dev/null and b/1.4.1/classsbepp_1_1double__t.png differ diff --git a/1.4.1/classsbepp_1_1enum__traits-members.html b/1.4.1/classsbepp_1_1enum__traits-members.html new file mode 100644 index 0000000..3485b36 --- /dev/null +++ b/1.4.1/classsbepp_1_1enum__traits-members.html @@ -0,0 +1,126 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::enum_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::enum_traits< T >, including all inherited members.

+ + + + + + + + +
deprecated() noexceptsbepp::enum_traits< T >static
description() noexceptsbepp::enum_traits< T >static
encoding_type typedefsbepp::enum_traits< T >
name() noexceptsbepp::enum_traits< T >static
offset() noexceptsbepp::enum_traits< T >static
since_version() noexceptsbepp::enum_traits< T >static
value_type typedefsbepp::enum_traits< T >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1enum__traits.html b/1.4.1/classsbepp_1_1enum__traits.html new file mode 100644 index 0000000..28e17a5 --- /dev/null +++ b/1.4.1/classsbepp_1_1enum__traits.html @@ -0,0 +1,172 @@ + + + + + + + + +sbepp: sbepp::enum_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::enum_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of an <enum> element. + More...

+ + + + + + + + +

+Public Types

+using encoding_type = EncodingType
 Underlying type.
 
+using value_type = ScopedEnumType
 Representation type.
 
+ + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr offset_t offset () noexcept
 Returns enum offset. Available only if offset is static, i.e. not available for public enums whose offset is different on each usage.
 
+static constexpr version_t since_version () noexcept
 Returns sinceVersion attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
+

Detailed Description

+
template<typename T>
+class sbepp::enum_traits< T >

Provides various traits/attributes of an <enum> element.

+

For example: sbepp::enum_traits<market_schema::schema::types::enum_name>::name();

+
Template Parameters
+ + +
Tenum tag
+
+
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1enum__traits.js b/1.4.1/classsbepp_1_1enum__traits.js new file mode 100644 index 0000000..691f57f --- /dev/null +++ b/1.4.1/classsbepp_1_1enum__traits.js @@ -0,0 +1,5 @@ +var classsbepp_1_1enum__traits = +[ + [ "encoding_type", "classsbepp_1_1enum__traits.html#a1abfb6d0e32cc25d55af2f7b220b5f29", null ], + [ "value_type", "classsbepp_1_1enum__traits.html#a97d5396e90699ee5006e3171c3d42a50", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1enum__value__traits-members.html b/1.4.1/classsbepp_1_1enum__value__traits-members.html new file mode 100644 index 0000000..fbb4ecd --- /dev/null +++ b/1.4.1/classsbepp_1_1enum__value__traits-members.html @@ -0,0 +1,124 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::enum_value_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::enum_value_traits< T >, including all inherited members.

+ + + + + + +
deprecated() noexceptsbepp::enum_value_traits< T >static
description() noexceptsbepp::enum_value_traits< T >static
name() noexceptsbepp::enum_value_traits< T >static
since_version() noexceptsbepp::enum_value_traits< T >static
value() noexceptsbepp::enum_value_traits< T >static
+
+ + + + diff --git a/1.4.1/classsbepp_1_1enum__value__traits.html b/1.4.1/classsbepp_1_1enum__value__traits.html new file mode 100644 index 0000000..e31335d --- /dev/null +++ b/1.4.1/classsbepp_1_1enum__value__traits.html @@ -0,0 +1,160 @@ + + + + + + + + +sbepp: sbepp::enum_value_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::enum_value_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <validValue> element. + More...

+ + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr version_t since_version () noexcept
 Returns addedSince attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
+static constexpr ScopedEnumType value () noexcept
 Returns enumerator value.
 
+

Detailed Description

+
template<typename T>
+class sbepp::enum_value_traits< T >

Provides various traits/attributes of a <validValue> element.

+

For example: sbepp::enum_value_traits<EnumTag::value_a>::since_version();

+
Template Parameters
+ + +
Tenumerator tag
+
+
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1field__traits-members.html b/1.4.1/classsbepp_1_1field__traits-members.html new file mode 100644 index 0000000..f44d81a --- /dev/null +++ b/1.4.1/classsbepp_1_1field__traits-members.html @@ -0,0 +1,129 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::field_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::field_traits< T >, including all inherited members.

+ + + + + + + + + + + +
deprecated() noexceptsbepp::field_traits< T >static
description() noexceptsbepp::field_traits< T >static
id() noexceptsbepp::field_traits< T >static
name() noexceptsbepp::field_traits< T >static
offset() noexceptsbepp::field_traits< T >static
presence() noexceptsbepp::field_traits< T >static
since_version() noexceptsbepp::field_traits< T >static
value_type typedefsbepp::field_traits< T >
value_type typedefsbepp::field_traits< T >
value_type_tag typedefsbepp::field_traits< T >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1field__traits.html b/1.4.1/classsbepp_1_1field__traits.html new file mode 100644 index 0000000..5e5c692 --- /dev/null +++ b/1.4.1/classsbepp_1_1field__traits.html @@ -0,0 +1,211 @@ + + + + + + + + +sbepp: sbepp::field_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::field_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <field> element. + More...

+ + + + + + + + + + + + +

+Public Types

+using value_type = ValueType
 Representation type.
 
template<typename Byte >
using value_type = Type<Byte>
 Representation type for non-constant arrays or composites.
 
+using value_type_tag = TypeTag
 value_type's tag. Not available for constants of numeric types
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr member_id_t id () noexcept
 Returns id attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr field_presence presence () noexcept
 Returns the actual presence. Note that it can be different from the one provided in schema, for example if field type is required but the field itself is specified as optional.
 
+static constexpr offset_t offset () noexcept
 Returns actual offset.
 
+static constexpr version_t since_version () noexcept
 Returns addedSince attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
+

Detailed Description

+
template<typename T>
+class sbepp::field_traits< T >

Provides various traits/attributes of a <field> element.

+

For example: sbepp::message_traits<message_tag::field_name>::since_version();

+
Template Parameters
+ + +
Tfield tag
+
+
+

Member Typedef Documentation

+ +

◆ value_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::field_traits< T >::value_type = Type<Byte>
+
+ +

Representation type for non-constant arrays or composites.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1field__traits.js b/1.4.1/classsbepp_1_1field__traits.js new file mode 100644 index 0000000..e86a3cc --- /dev/null +++ b/1.4.1/classsbepp_1_1field__traits.js @@ -0,0 +1,6 @@ +var classsbepp_1_1field__traits = +[ + [ "value_type", "classsbepp_1_1field__traits.html#aa9c7c11286357ceff0d7a752b872a4b0", null ], + [ "value_type", "classsbepp_1_1field__traits.html#a78d393a2b7bac944e0aa51d63b6d4a70", null ], + [ "value_type_tag", "classsbepp_1_1field__traits.html#ad4c5e229a263bcd729f91992e4a66abd", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1float__opt__t-members.html b/1.4.1/classsbepp_1_1float__opt__t-members.html new file mode 100644 index 0000000..e1b81b7 --- /dev/null +++ b/1.4.1/classsbepp_1_1float__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::float_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::float_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< float, float_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< float, float_opt_t >inline
max_value() noexceptsbepp::float_opt_tinlinestatic
min_value() noexceptsbepp::float_opt_tinlinestatic
null_value() noexceptsbepp::float_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< float, float_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< float, float_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< float, float_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< float, float_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< float, float_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< float, float_opt_t >inline
value() const noexceptsbepp::detail::optional_base< float, float_opt_t >inline
value_or(float default_value) const noexceptsbepp::detail::optional_base< float, float_opt_t >inline
value_type typedefsbepp::detail::optional_base< float, float_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1float__opt__t.html b/1.4.1/classsbepp_1_1float__opt__t.html new file mode 100644 index 0000000..896ab53 --- /dev/null +++ b/1.4.1/classsbepp_1_1float__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::float_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::float_opt_t Class Reference
+
+
+ +

Built-in float optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::float_opt_t:
+
+
+ + +sbepp::detail::optional_base< float, float_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< float, float_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< float, float_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (float default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in float optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1float__opt__t.png b/1.4.1/classsbepp_1_1float__opt__t.png new file mode 100644 index 0000000..dc9bd18 Binary files /dev/null and b/1.4.1/classsbepp_1_1float__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1float__t-members.html b/1.4.1/classsbepp_1_1float__t-members.html new file mode 100644 index 0000000..7ee1708 --- /dev/null +++ b/1.4.1/classsbepp_1_1float__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::float_t Member List
+
+
+ +

This is the complete list of members for sbepp::float_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< float, float_t >inline
max_value() noexceptsbepp::float_tinlinestatic
min_value() noexceptsbepp::float_tinlinestatic
operator*() noexceptsbepp::detail::required_base< float, float_t >inline
operator*() const noexceptsbepp::detail::required_base< float, float_t >inline
required_base()=defaultsbepp::detail::required_base< float, float_t >
required_base(value_type val) noexceptsbepp::detail::required_base< float, float_t >inline
value() const noexceptsbepp::detail::required_base< float, float_t >inline
value_type typedefsbepp::detail::required_base< float, float_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1float__t.html b/1.4.1/classsbepp_1_1float__t.html new file mode 100644 index 0000000..c9e686b --- /dev/null +++ b/1.4.1/classsbepp_1_1float__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::float_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::float_t Class Reference
+
+
+ +

Built-in float required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::float_t:
+
+
+ + +sbepp::detail::required_base< float, float_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< float, float_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< float, float_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in float required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1float__t.png b/1.4.1/classsbepp_1_1float__t.png new file mode 100644 index 0000000..f810d39 Binary files /dev/null and b/1.4.1/classsbepp_1_1float__t.png differ diff --git a/1.4.1/classsbepp_1_1group__traits-members.html b/1.4.1/classsbepp_1_1group__traits-members.html new file mode 100644 index 0000000..3f8b3b7 --- /dev/null +++ b/1.4.1/classsbepp_1_1group__traits-members.html @@ -0,0 +1,131 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::group_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::group_traits< T >, including all inherited members.

+ + + + + + + + + + + + + +
block_length() noexceptsbepp::group_traits< T >static
deprecated() noexceptsbepp::group_traits< T >static
description() noexceptsbepp::group_traits< T >static
dimension_type typedefsbepp::group_traits< T >
dimension_type_tag typedefsbepp::group_traits< T >
entry_type typedefsbepp::group_traits< T >
id() noexceptsbepp::group_traits< T >static
name() noexceptsbepp::group_traits< T >static
semantic_type() noexceptsbepp::group_traits< T >static
since_version() noexceptsbepp::group_traits< T >static
size_bytes(const NumInGroupType num_in_group,...) noexceptsbepp::group_traits< T >static
value_type typedefsbepp::group_traits< T >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1group__traits.html b/1.4.1/classsbepp_1_1group__traits.html new file mode 100644 index 0000000..c32a048 --- /dev/null +++ b/1.4.1/classsbepp_1_1group__traits.html @@ -0,0 +1,313 @@ + + + + + + + + +sbepp: sbepp::group_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::group_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <group> element. + More...

+ + + + + + + + + + + + + + + + + +

+Public Types

template<typename Byte >
using value_type = GroupType<Byte>
 Representation type.
 
template<typename Byte >
using dimension_type = HeaderType<Byte>
 Group dimension composite type.
 
+using dimension_type_tag = HeaderTag
 Dimension composite tag.
 
template<typename Byte >
using entry_type = EntryType<Byte>
 Group entry type.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr member_id_t id () noexcept
 Returns id attribute.
 
+static constexpr block_length_t block_length () noexcept
 Returns blockLength attribute.
 
+static constexpr const char * semantic_type () noexcept
 Returns semanticType attribute.
 
+static constexpr version_t since_version () noexcept
 Returns addedSince attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
static constexpr std::size_t size_bytes (const NumInGroupType num_in_group,...) noexcept
 Returns number of bytes required to represent the group in given configuration.
 
+

Detailed Description

+
template<typename T>
+class sbepp::group_traits< T >

Provides various traits/attributes of a <group> element.

+

For example: sbepp::group_traits<message_tag::group_name>::since_version();

+
Template Parameters
+ + +
Tgroup tag
+
+
+

Member Typedef Documentation

+ +

◆ dimension_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::group_traits< T >::dimension_type = HeaderType<Byte>
+
+ +

Group dimension composite type.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+ +

◆ entry_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::group_traits< T >::entry_type = EntryType<Byte>
+
+ +

Group entry type.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+ +

◆ value_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::group_traits< T >::value_type = GroupType<Byte>
+
+ +

Representation type.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+

Member Function Documentation

+ +

◆ size_bytes()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + +
static constexpr std::size_t sbepp::group_traits< T >::size_bytes (const NumInGroupType num_in_group,
... )
+
+staticconstexprnoexcept
+
+ +

Returns number of bytes required to represent the group in given configuration.

+
Parameters
+ + + +
num_in_groupnumber of entries in the group
...parameter list depends on the group structure
+
+
+
Returns
size in bytes
+

Check message_traits::size_bytes() to see how trailing parameter list is built.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1group__traits.js b/1.4.1/classsbepp_1_1group__traits.js new file mode 100644 index 0000000..172c882 --- /dev/null +++ b/1.4.1/classsbepp_1_1group__traits.js @@ -0,0 +1,7 @@ +var classsbepp_1_1group__traits = +[ + [ "dimension_type", "classsbepp_1_1group__traits.html#a2c6e9d544f4ba7e1d18fb5eabab81606", null ], + [ "dimension_type_tag", "classsbepp_1_1group__traits.html#a3aea72ccab0f1ffc9451fa06382463f6", null ], + [ "entry_type", "classsbepp_1_1group__traits.html#aa496c3170693537cd48e56a808c5385c", null ], + [ "value_type", "classsbepp_1_1group__traits.html#a9930513918c1e1d15014211e2d54ad72", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1int16__opt__t-members.html b/1.4.1/classsbepp_1_1int16__opt__t-members.html new file mode 100644 index 0000000..809e57c --- /dev/null +++ b/1.4.1/classsbepp_1_1int16__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::int16_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::int16_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inline
max_value() noexceptsbepp::int16_opt_tinlinestatic
min_value() noexceptsbepp::int16_opt_tinlinestatic
null_value() noexceptsbepp::int16_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< std::int16_t, int16_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inline
value() const noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inline
value_or(std::int16_t default_value) const noexceptsbepp::detail::optional_base< std::int16_t, int16_opt_t >inline
value_type typedefsbepp::detail::optional_base< std::int16_t, int16_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int16__opt__t.html b/1.4.1/classsbepp_1_1int16__opt__t.html new file mode 100644 index 0000000..14cc35d --- /dev/null +++ b/1.4.1/classsbepp_1_1int16__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::int16_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::int16_opt_t Class Reference
+
+
+ +

Built-in int16 optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::int16_opt_t:
+
+
+ + +sbepp::detail::optional_base< std::int16_t, int16_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< std::int16_t, int16_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< std::int16_t, int16_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (std::int16_t default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in int16 optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int16__opt__t.png b/1.4.1/classsbepp_1_1int16__opt__t.png new file mode 100644 index 0000000..fde5d3d Binary files /dev/null and b/1.4.1/classsbepp_1_1int16__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1int16__t-members.html b/1.4.1/classsbepp_1_1int16__t-members.html new file mode 100644 index 0000000..5339247 --- /dev/null +++ b/1.4.1/classsbepp_1_1int16__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::int16_t Member List
+
+
+ +

This is the complete list of members for sbepp::int16_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< std::int16_t, int16_t >inline
max_value() noexceptsbepp::int16_tinlinestatic
min_value() noexceptsbepp::int16_tinlinestatic
operator*() noexceptsbepp::detail::required_base< std::int16_t, int16_t >inline
operator*() const noexceptsbepp::detail::required_base< std::int16_t, int16_t >inline
required_base()=defaultsbepp::detail::required_base< std::int16_t, int16_t >
required_base(value_type val) noexceptsbepp::detail::required_base< std::int16_t, int16_t >inline
value() const noexceptsbepp::detail::required_base< std::int16_t, int16_t >inline
value_type typedefsbepp::detail::required_base< std::int16_t, int16_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int16__t.html b/1.4.1/classsbepp_1_1int16__t.html new file mode 100644 index 0000000..64dd1d1 --- /dev/null +++ b/1.4.1/classsbepp_1_1int16__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::int16_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::int16_t Class Reference
+
+
+ +

Built-in int16 required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::int16_t:
+
+
+ + +sbepp::detail::required_base< std::int16_t, int16_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< std::int16_t, int16_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< std::int16_t, int16_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in int16 required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int16__t.png b/1.4.1/classsbepp_1_1int16__t.png new file mode 100644 index 0000000..abdc656 Binary files /dev/null and b/1.4.1/classsbepp_1_1int16__t.png differ diff --git a/1.4.1/classsbepp_1_1int32__opt__t-members.html b/1.4.1/classsbepp_1_1int32__opt__t-members.html new file mode 100644 index 0000000..727b025 --- /dev/null +++ b/1.4.1/classsbepp_1_1int32__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::int32_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::int32_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inline
max_value() noexceptsbepp::int32_opt_tinlinestatic
min_value() noexceptsbepp::int32_opt_tinlinestatic
null_value() noexceptsbepp::int32_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< std::int32_t, int32_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inline
value() const noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inline
value_or(std::int32_t default_value) const noexceptsbepp::detail::optional_base< std::int32_t, int32_opt_t >inline
value_type typedefsbepp::detail::optional_base< std::int32_t, int32_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int32__opt__t.html b/1.4.1/classsbepp_1_1int32__opt__t.html new file mode 100644 index 0000000..59dda59 --- /dev/null +++ b/1.4.1/classsbepp_1_1int32__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::int32_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::int32_opt_t Class Reference
+
+
+ +

Built-in int32 optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::int32_opt_t:
+
+
+ + +sbepp::detail::optional_base< std::int32_t, int32_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< std::int32_t, int32_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< std::int32_t, int32_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (std::int32_t default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in int32 optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int32__opt__t.png b/1.4.1/classsbepp_1_1int32__opt__t.png new file mode 100644 index 0000000..a70b732 Binary files /dev/null and b/1.4.1/classsbepp_1_1int32__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1int32__t-members.html b/1.4.1/classsbepp_1_1int32__t-members.html new file mode 100644 index 0000000..e2d2e97 --- /dev/null +++ b/1.4.1/classsbepp_1_1int32__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::int32_t Member List
+
+
+ +

This is the complete list of members for sbepp::int32_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< std::int32_t, int32_t >inline
max_value() noexceptsbepp::int32_tinlinestatic
min_value() noexceptsbepp::int32_tinlinestatic
operator*() noexceptsbepp::detail::required_base< std::int32_t, int32_t >inline
operator*() const noexceptsbepp::detail::required_base< std::int32_t, int32_t >inline
required_base()=defaultsbepp::detail::required_base< std::int32_t, int32_t >
required_base(value_type val) noexceptsbepp::detail::required_base< std::int32_t, int32_t >inline
value() const noexceptsbepp::detail::required_base< std::int32_t, int32_t >inline
value_type typedefsbepp::detail::required_base< std::int32_t, int32_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int32__t.html b/1.4.1/classsbepp_1_1int32__t.html new file mode 100644 index 0000000..495deb7 --- /dev/null +++ b/1.4.1/classsbepp_1_1int32__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::int32_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::int32_t Class Reference
+
+
+ +

Built-in int32 required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::int32_t:
+
+
+ + +sbepp::detail::required_base< std::int32_t, int32_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< std::int32_t, int32_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< std::int32_t, int32_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in int32 required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int32__t.png b/1.4.1/classsbepp_1_1int32__t.png new file mode 100644 index 0000000..8aa9eab Binary files /dev/null and b/1.4.1/classsbepp_1_1int32__t.png differ diff --git a/1.4.1/classsbepp_1_1int64__opt__t-members.html b/1.4.1/classsbepp_1_1int64__opt__t-members.html new file mode 100644 index 0000000..ecc542f --- /dev/null +++ b/1.4.1/classsbepp_1_1int64__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::int64_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::int64_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inline
max_value() noexceptsbepp::int64_opt_tinlinestatic
min_value() noexceptsbepp::int64_opt_tinlinestatic
null_value() noexceptsbepp::int64_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< std::int64_t, int64_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inline
value() const noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inline
value_or(std::int64_t default_value) const noexceptsbepp::detail::optional_base< std::int64_t, int64_opt_t >inline
value_type typedefsbepp::detail::optional_base< std::int64_t, int64_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int64__opt__t.html b/1.4.1/classsbepp_1_1int64__opt__t.html new file mode 100644 index 0000000..5501197 --- /dev/null +++ b/1.4.1/classsbepp_1_1int64__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::int64_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::int64_opt_t Class Reference
+
+
+ +

Built-in int64 optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::int64_opt_t:
+
+
+ + +sbepp::detail::optional_base< std::int64_t, int64_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< std::int64_t, int64_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< std::int64_t, int64_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (std::int64_t default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in int64 optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int64__opt__t.png b/1.4.1/classsbepp_1_1int64__opt__t.png new file mode 100644 index 0000000..ca36564 Binary files /dev/null and b/1.4.1/classsbepp_1_1int64__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1int64__t-members.html b/1.4.1/classsbepp_1_1int64__t-members.html new file mode 100644 index 0000000..3c62b98 --- /dev/null +++ b/1.4.1/classsbepp_1_1int64__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::int64_t Member List
+
+
+ +

This is the complete list of members for sbepp::int64_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< std::int64_t, int64_t >inline
max_value() noexceptsbepp::int64_tinlinestatic
min_value() noexceptsbepp::int64_tinlinestatic
operator*() noexceptsbepp::detail::required_base< std::int64_t, int64_t >inline
operator*() const noexceptsbepp::detail::required_base< std::int64_t, int64_t >inline
required_base()=defaultsbepp::detail::required_base< std::int64_t, int64_t >
required_base(value_type val) noexceptsbepp::detail::required_base< std::int64_t, int64_t >inline
value() const noexceptsbepp::detail::required_base< std::int64_t, int64_t >inline
value_type typedefsbepp::detail::required_base< std::int64_t, int64_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int64__t.html b/1.4.1/classsbepp_1_1int64__t.html new file mode 100644 index 0000000..ceab489 --- /dev/null +++ b/1.4.1/classsbepp_1_1int64__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::int64_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::int64_t Class Reference
+
+
+ +

Built-in int64 required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::int64_t:
+
+
+ + +sbepp::detail::required_base< std::int64_t, int64_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< std::int64_t, int64_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< std::int64_t, int64_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in int64 required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int64__t.png b/1.4.1/classsbepp_1_1int64__t.png new file mode 100644 index 0000000..dfa82e8 Binary files /dev/null and b/1.4.1/classsbepp_1_1int64__t.png differ diff --git a/1.4.1/classsbepp_1_1int8__opt__t-members.html b/1.4.1/classsbepp_1_1int8__opt__t-members.html new file mode 100644 index 0000000..396b665 --- /dev/null +++ b/1.4.1/classsbepp_1_1int8__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::int8_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::int8_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inline
max_value() noexceptsbepp::int8_opt_tinlinestatic
min_value() noexceptsbepp::int8_opt_tinlinestatic
null_value() noexceptsbepp::int8_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< std::int8_t, int8_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inline
value() const noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inline
value_or(std::int8_t default_value) const noexceptsbepp::detail::optional_base< std::int8_t, int8_opt_t >inline
value_type typedefsbepp::detail::optional_base< std::int8_t, int8_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int8__opt__t.html b/1.4.1/classsbepp_1_1int8__opt__t.html new file mode 100644 index 0000000..2089da3 --- /dev/null +++ b/1.4.1/classsbepp_1_1int8__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::int8_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::int8_opt_t Class Reference
+
+
+ +

Built-in int8 optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::int8_opt_t:
+
+
+ + +sbepp::detail::optional_base< std::int8_t, int8_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< std::int8_t, int8_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< std::int8_t, int8_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (std::int8_t default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in int8 optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int8__opt__t.png b/1.4.1/classsbepp_1_1int8__opt__t.png new file mode 100644 index 0000000..4404d80 Binary files /dev/null and b/1.4.1/classsbepp_1_1int8__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1int8__t-members.html b/1.4.1/classsbepp_1_1int8__t-members.html new file mode 100644 index 0000000..50d5ec3 --- /dev/null +++ b/1.4.1/classsbepp_1_1int8__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::int8_t Member List
+
+
+ +

This is the complete list of members for sbepp::int8_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< std::int8_t, int8_t >inline
max_value() noexceptsbepp::int8_tinlinestatic
min_value() noexceptsbepp::int8_tinlinestatic
operator*() noexceptsbepp::detail::required_base< std::int8_t, int8_t >inline
operator*() const noexceptsbepp::detail::required_base< std::int8_t, int8_t >inline
required_base()=defaultsbepp::detail::required_base< std::int8_t, int8_t >
required_base(value_type val) noexceptsbepp::detail::required_base< std::int8_t, int8_t >inline
value() const noexceptsbepp::detail::required_base< std::int8_t, int8_t >inline
value_type typedefsbepp::detail::required_base< std::int8_t, int8_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int8__t.html b/1.4.1/classsbepp_1_1int8__t.html new file mode 100644 index 0000000..f754a1a --- /dev/null +++ b/1.4.1/classsbepp_1_1int8__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::int8_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::int8_t Class Reference
+
+
+ +

Built-in int8 required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::int8_t:
+
+
+ + +sbepp::detail::required_base< std::int8_t, int8_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< std::int8_t, int8_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< std::int8_t, int8_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in int8 required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1int8__t.png b/1.4.1/classsbepp_1_1int8__t.png new file mode 100644 index 0000000..427ef14 Binary files /dev/null and b/1.4.1/classsbepp_1_1int8__t.png differ diff --git a/1.4.1/classsbepp_1_1message__traits-members.html b/1.4.1/classsbepp_1_1message__traits-members.html new file mode 100644 index 0000000..8db5ccc --- /dev/null +++ b/1.4.1/classsbepp_1_1message__traits-members.html @@ -0,0 +1,129 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::message_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::message_traits< T >, including all inherited members.

+ + + + + + + + + + + +
block_length() noexceptsbepp::message_traits< T >static
deprecated() noexceptsbepp::message_traits< T >static
description() noexceptsbepp::message_traits< T >static
id() noexceptsbepp::message_traits< T >static
name() noexceptsbepp::message_traits< T >static
schema_tag typedefsbepp::message_traits< T >
semantic_type() noexceptsbepp::message_traits< T >static
since_version() noexceptsbepp::message_traits< T >static
size_bytes(...) noexceptsbepp::message_traits< T >static
value_type typedefsbepp::message_traits< T >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1message__traits.html b/1.4.1/classsbepp_1_1message__traits.html new file mode 100644 index 0000000..bee1971 --- /dev/null +++ b/1.4.1/classsbepp_1_1message__traits.html @@ -0,0 +1,301 @@ + + + + + + + + +sbepp: sbepp::message_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::message_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <message> element. + More...

+ + + + + + + + + +

+Public Types

template<typename Byte >
using value_type = MessageType<Byte>
 Representation type.
 
+using schema_tag = SchemaTag
 Schema tag.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr message_id_t id () noexcept
 Returns id attribute.
 
+static constexpr block_length_t block_length () noexcept
 Returns blockLength attribute.
 
+static constexpr const char * semantic_type () noexcept
 Returns semanticType attribute.
 
+static constexpr version_t since_version () noexcept
 Returns addedSince attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
static constexpr std::size_t size_bytes (...) noexcept
 Returns number of bytes required to represent the message in given configuration.
 
+

Detailed Description

+
template<typename T>
+class sbepp::message_traits< T >

Provides various traits/attributes of a <message> element.

+

For example: sbepp::message_traits<market_schema::schema::messages::msg1>::name();

+
Template Parameters
+ + +
Tmessage tag
+
+
+

Member Typedef Documentation

+ +

◆ value_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::message_traits< T >::value_type = MessageType<Byte>
+
+ +

Representation type.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+

Member Function Documentation

+ +

◆ size_bytes()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
static constexpr std::size_t sbepp::message_traits< T >::size_bytes ( ...)
+
+staticconstexprnoexcept
+
+ +

Returns number of bytes required to represent the message in given configuration.

+
Parameters
+ + +
...parameter list depends on the message structure
+
+
+
Returns
size in bytes
+

Parameter list is built as follows:

    +
  • for each <group> within the message, in a top-to-bottom order, there will be a parameter in form of NumInGroupType <group_path>_num_in_group[_<n>] where <group_path> is built like <parent_group_path>_<child_group_name>. Optional _<n> part is added to disambiguate names that otherwise would be the same. This parameter represents the total number of group entries (even if they are spread across multiple enclosing group entries).
  • +
  • if there exists a <data> member on any level within the message, there will be additional std::size_t total_data_size parameter at the end of parameter list, representing the total payload size from all the <data> elements within the message.
  • +
+

Here's the example with different cases:

<!-- size_bytes() -->
+
<sbe:message>
+
<!-- only fields... -->
+
</sbe:message>
+
+
<!-- size_bytes(std::uint32_t group_num_in_group) -->
+
<sbe:message>
+
<group name="group">
+
<!-- only fields... -->
+
</group>
+
</sbe:message>
+
+
<!-- size_bytes(
+
std::uint32_t group_1_num_in_group,
+
std::uint32_t group_2_num_in_group) -->
+
<sbe:message>
+
<group name="group_1">
+
<!-- only fields... -->
+
</group>
+
<group name="group_2">
+
<!-- only fields... -->
+
</group>
+
</sbe:message>
+
+
<!-- size_bytes(
+
std::uint32_t group_1_num_in_group,
+
std::uint32_t group_1_group_2_num_in_group,
+
std::uint32_t group_3_num_in_group) -->
+
<sbe:message>
+
<group name="group_1">
+
<group name="group_2">
+
<!-- only fields... -->
+
</group>
+
</group>
+
<group name="group_3">
+
<!-- only fields... -->
+
</group>
+
</sbe:message>
+
+
<!-- size_bytes(
+
std::uint32_t group_num_in_group,
+
std::size_t total_data_size) -->
+
<sbe:message>
+
<group name="group">
+
<data name="data_1"/>
+
</group>
+
<data name="data_2"/>
+
</sbe:message>
+

For usage example, see Estimating buffer size to encode a message.

+
Warning
This function provides correct results only for the current schema version.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1message__traits.js b/1.4.1/classsbepp_1_1message__traits.js new file mode 100644 index 0000000..30b7554 --- /dev/null +++ b/1.4.1/classsbepp_1_1message__traits.js @@ -0,0 +1,5 @@ +var classsbepp_1_1message__traits = +[ + [ "schema_tag", "classsbepp_1_1message__traits.html#a823e30f08d988fb6ac0b3e9730d8aa93", null ], + [ "value_type", "classsbepp_1_1message__traits.html#adc2fc3fc714037828f2bd6d95c6b8923", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1schema__traits-members.html b/1.4.1/classsbepp_1_1schema__traits-members.html new file mode 100644 index 0000000..5e08874 --- /dev/null +++ b/1.4.1/classsbepp_1_1schema__traits-members.html @@ -0,0 +1,127 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::schema_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::schema_traits< T >, including all inherited members.

+ + + + + + + + + +
byte_order() noexceptsbepp::schema_traits< T >static
description() noexceptsbepp::schema_traits< T >static
header_type typedefsbepp::schema_traits< T >
header_type_tag typedefsbepp::schema_traits< T >
id() noexceptsbepp::schema_traits< T >static
package() noexceptsbepp::schema_traits< T >static
semantic_version() noexceptsbepp::schema_traits< T >static
version() noexceptsbepp::schema_traits< T >static
+
+ + + + diff --git a/1.4.1/classsbepp_1_1schema__traits.html b/1.4.1/classsbepp_1_1schema__traits.html new file mode 100644 index 0000000..0738a71 --- /dev/null +++ b/1.4.1/classsbepp_1_1schema__traits.html @@ -0,0 +1,203 @@ + + + + + + + + +sbepp: sbepp::schema_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::schema_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <messageSchema> element. + More...

+ + + + + + + + + +

+Public Types

template<typename Byte >
using header_type = HeaderComposite<Byte>
 Message header composite type.
 
+using header_type_tag = HeaderTypeTag
 Message header composite tag. Can be used to access its traits.
 
+ + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * package () noexcept
 Returns package attribute.
 
+static constexpr schema_id_t id () noexcept
 Returns id attribute.
 
+static constexpr version_t version () noexcept
 Returns version attribute.
 
+static constexpr const char * semantic_version () noexcept
 Returns semanticVersion attribute.
 
+static constexpr endian byte_order () noexcept
 Returns byteOrder attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+

Detailed Description

+
template<typename T>
+class sbepp::schema_traits< T >

Provides various traits/attributes of a <messageSchema> element.

+

Schema tags are represented using schema_name::schema type. For example: sbepp::schema_traits<market_schema::schema>::id();

+
Template Parameters
+ + +
Tschema tag
+
+
+

Member Typedef Documentation

+ +

◆ header_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::schema_traits< T >::header_type = HeaderComposite<Byte>
+
+ +

Message header composite type.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1schema__traits.js b/1.4.1/classsbepp_1_1schema__traits.js new file mode 100644 index 0000000..1ff04c8 --- /dev/null +++ b/1.4.1/classsbepp_1_1schema__traits.js @@ -0,0 +1,5 @@ +var classsbepp_1_1schema__traits = +[ + [ "header_type", "classsbepp_1_1schema__traits.html#a9a53b31c788e848ac09e89fa4d2bf7c0", null ], + [ "header_type_tag", "classsbepp_1_1schema__traits.html#a2d45acd52784e4ec7bc89f440095bc76", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1set__choice__traits-members.html b/1.4.1/classsbepp_1_1set__choice__traits-members.html new file mode 100644 index 0000000..db965b8 --- /dev/null +++ b/1.4.1/classsbepp_1_1set__choice__traits-members.html @@ -0,0 +1,124 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::set_choice_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::set_choice_traits< T >, including all inherited members.

+ + + + + + +
deprecated() noexceptsbepp::set_choice_traits< T >static
description() noexceptsbepp::set_choice_traits< T >static
index() noexceptsbepp::set_choice_traits< T >static
name() noexceptsbepp::set_choice_traits< T >static
since_version() noexceptsbepp::set_choice_traits< T >static
+
+ + + + diff --git a/1.4.1/classsbepp_1_1set__choice__traits.html b/1.4.1/classsbepp_1_1set__choice__traits.html new file mode 100644 index 0000000..145a787 --- /dev/null +++ b/1.4.1/classsbepp_1_1set__choice__traits.html @@ -0,0 +1,160 @@ + + + + + + + + +sbepp: sbepp::set_choice_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::set_choice_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <choice> element. + More...

+ + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr version_t since_version () noexcept
 Returns addedSince attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
+static constexpr choice_index_t index () noexcept
 Returns choice bit index.
 
+

Detailed Description

+
template<typename T>
+class sbepp::set_choice_traits< T >

Provides various traits/attributes of a <choice> element.

+

For example: sbepp::set_choice_traits<SetTag::choice>::since_version();

+
Template Parameters
+ + +
Tset choice tag
+
+
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1set__traits-members.html b/1.4.1/classsbepp_1_1set__traits-members.html new file mode 100644 index 0000000..852ddb2 --- /dev/null +++ b/1.4.1/classsbepp_1_1set__traits-members.html @@ -0,0 +1,126 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::set_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::set_traits< T >, including all inherited members.

+ + + + + + + + +
deprecated() noexceptsbepp::set_traits< T >static
description() noexceptsbepp::set_traits< T >static
encoding_type typedefsbepp::set_traits< T >
name() noexceptsbepp::set_traits< T >static
offset() noexceptsbepp::set_traits< T >static
since_version() noexceptsbepp::set_traits< T >static
value_type typedefsbepp::set_traits< T >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1set__traits.html b/1.4.1/classsbepp_1_1set__traits.html new file mode 100644 index 0000000..60469af --- /dev/null +++ b/1.4.1/classsbepp_1_1set__traits.html @@ -0,0 +1,172 @@ + + + + + + + + +sbepp: sbepp::set_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::set_traits< T > Class Template Reference
+
+
+ +

Provides various traits/attributes of a <set> element. + More...

+ + + + + + + + +

+Public Types

+using encoding_type = EncodingType
 Underlying type.
 
+using value_type = SetType
 Representation type.
 
+ + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr version_t since_version () noexcept
 Returns addedSince attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
+static constexpr offset_t offset () noexcept
 Returns type offset. Available only if offset is static, i.e. not available for public sets whose offset is different on each usage.
 
+

Detailed Description

+
template<typename T>
+class sbepp::set_traits< T >

Provides various traits/attributes of a <set> element.

+

For example: sbepp::set_traits<market_schema::schema::types::set_name>::since_version();

+
Template Parameters
+ + +
Tset tag
+
+
+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1set__traits.js b/1.4.1/classsbepp_1_1set__traits.js new file mode 100644 index 0000000..2e1777b --- /dev/null +++ b/1.4.1/classsbepp_1_1set__traits.js @@ -0,0 +1,5 @@ +var classsbepp_1_1set__traits = +[ + [ "encoding_type", "classsbepp_1_1set__traits.html#a89c209886332d1f27474c116dad2acd8", null ], + [ "value_type", "classsbepp_1_1set__traits.html#a63df09f2bfc8ed24301e619f235a6fe3", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1type__traits-members.html b/1.4.1/classsbepp_1_1type__traits-members.html new file mode 100644 index 0000000..79b4bd0 --- /dev/null +++ b/1.4.1/classsbepp_1_1type__traits-members.html @@ -0,0 +1,134 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::type_traits< T > Member List
+
+
+ +

This is the complete list of members for sbepp::type_traits< T >, including all inherited members.

+ + + + + + + + + + + + + + + + +
character_encoding() noexceptsbepp::type_traits< T >static
deprecated() noexceptsbepp::type_traits< T >static
description() noexceptsbepp::type_traits< T >static
length() noexceptsbepp::type_traits< T >static
max_value() noexceptsbepp::type_traits< T >static
min_value() noexceptsbepp::type_traits< T >static
name() noexceptsbepp::type_traits< T >static
null_value() noexceptsbepp::type_traits< T >static
offset() noexceptsbepp::type_traits< T >static
presence() noexceptsbepp::type_traits< T >static
primitive_type typedefsbepp::type_traits< T >
semantic_type() noexceptsbepp::type_traits< T >static
since_version() noexceptsbepp::type_traits< T >static
value_type typedefsbepp::type_traits< T >
value_type typedefsbepp::type_traits< T >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1type__traits.html b/1.4.1/classsbepp_1_1type__traits.html new file mode 100644 index 0000000..95b2689 --- /dev/null +++ b/1.4.1/classsbepp_1_1type__traits.html @@ -0,0 +1,231 @@ + + + + + + + + +sbepp: sbepp::type_traits< T > Class Template Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::type_traits< T > Class Template Reference
+
+
+ +

Provides various traits and attributes of a <type> element. + More...

+ + + + + + + + + + + + +

+Public Types

+using primitive_type = PrimitiveType
 Underlying type.
 
+using value_type = ValueType
 Representation type.
 
template<typename Byte >
using value_type = ArrayType<Byte>
 Representation type for non-constant arrays.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static constexpr const char * name () noexcept
 Returns name attribute.
 
+static constexpr const char * description () noexcept
 Returns description attribute.
 
+static constexpr field_presence presence () noexcept
 Returns presence.
 
+static constexpr primitive_type min_value () noexcept
 Returns minValue. Available only if length() == 1 and presence() != field_presence::constant
 
+static constexpr primitive_type max_value () noexcept
 Returns maxValue. Available only if length() == 1 and presence() != field_presence::constant
 
+static constexpr primitive_type null_value () noexcept
 Returns nullValue. Available only if length() == 1 and presence() == field_presence::optional
 
+static constexpr length_t length () noexcept
 Returns length attribute.
 
+static constexpr offset_t offset () noexcept
 Returns type offset. Available only if offset is static, i.e. not available for public types whose offset is different on each usage.
 
+static constexpr const char * semantic_type () noexcept
 Returns semanticType attribute.
 
+static constexpr version_t since_version () noexcept
 Returns sinceVersion attribute.
 
+static constexpr version_t deprecated () noexcept
 Returns deprecated attribute. Available only if provided in schema.
 
+static constexpr const char * character_encoding () noexcept
 Returns characterEncoding attribute.
 
+

Detailed Description

+
template<typename T>
+class sbepp::type_traits< T >

Provides various traits and attributes of a <type> element.

+

For example: sbepp::type_traits<some_schema::schema::types::some_type>::name();

+
Template Parameters
+ + +
Ttype tag
+
+
+

Member Typedef Documentation

+ +

◆ value_type

+ +
+
+
+template<typename T >
+
+template<typename Byte >
+ + + + +
using sbepp::type_traits< T >::value_type = ArrayType<Byte>
+
+ +

Representation type for non-constant arrays.

+
Template Parameters
+ + +
Bytebyte type
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1type__traits.js b/1.4.1/classsbepp_1_1type__traits.js new file mode 100644 index 0000000..556e00f --- /dev/null +++ b/1.4.1/classsbepp_1_1type__traits.js @@ -0,0 +1,6 @@ +var classsbepp_1_1type__traits = +[ + [ "primitive_type", "classsbepp_1_1type__traits.html#a87d3a1110947f28989fd308e5971e88b", null ], + [ "value_type", "classsbepp_1_1type__traits.html#a4dc3777d81e9e0c4336dc6e5bf2cbc44", null ], + [ "value_type", "classsbepp_1_1type__traits.html#a06fc70c0e31a82d714dc4f9a784629ff", null ] +]; \ No newline at end of file diff --git a/1.4.1/classsbepp_1_1uint16__opt__t-members.html b/1.4.1/classsbepp_1_1uint16__opt__t-members.html new file mode 100644 index 0000000..7cc7600 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint16__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::uint16_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::uint16_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inline
max_value() noexceptsbepp::uint16_opt_tinlinestatic
min_value() noexceptsbepp::uint16_opt_tinlinestatic
null_value() noexceptsbepp::uint16_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inline
value() const noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inline
value_or(std::uint16_t default_value) const noexceptsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >inline
value_type typedefsbepp::detail::optional_base< std::uint16_t, uint16_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint16__opt__t.html b/1.4.1/classsbepp_1_1uint16__opt__t.html new file mode 100644 index 0000000..8f36a6e --- /dev/null +++ b/1.4.1/classsbepp_1_1uint16__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::uint16_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::uint16_opt_t Class Reference
+
+
+ +

Built-in uint16 optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::uint16_opt_t:
+
+
+ + +sbepp::detail::optional_base< std::uint16_t, uint16_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< std::uint16_t, uint16_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< std::uint16_t, uint16_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (std::uint16_t default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in uint16 optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint16__opt__t.png b/1.4.1/classsbepp_1_1uint16__opt__t.png new file mode 100644 index 0000000..6c5233f Binary files /dev/null and b/1.4.1/classsbepp_1_1uint16__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1uint16__t-members.html b/1.4.1/classsbepp_1_1uint16__t-members.html new file mode 100644 index 0000000..aeb3a62 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint16__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::uint16_t Member List
+
+
+ +

This is the complete list of members for sbepp::uint16_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< std::uint16_t, uint16_t >inline
max_value() noexceptsbepp::uint16_tinlinestatic
min_value() noexceptsbepp::uint16_tinlinestatic
operator*() noexceptsbepp::detail::required_base< std::uint16_t, uint16_t >inline
operator*() const noexceptsbepp::detail::required_base< std::uint16_t, uint16_t >inline
required_base()=defaultsbepp::detail::required_base< std::uint16_t, uint16_t >
required_base(value_type val) noexceptsbepp::detail::required_base< std::uint16_t, uint16_t >inline
value() const noexceptsbepp::detail::required_base< std::uint16_t, uint16_t >inline
value_type typedefsbepp::detail::required_base< std::uint16_t, uint16_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint16__t.html b/1.4.1/classsbepp_1_1uint16__t.html new file mode 100644 index 0000000..04d0e1c --- /dev/null +++ b/1.4.1/classsbepp_1_1uint16__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::uint16_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::uint16_t Class Reference
+
+
+ +

Built-in uint16 required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::uint16_t:
+
+
+ + +sbepp::detail::required_base< std::uint16_t, uint16_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< std::uint16_t, uint16_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< std::uint16_t, uint16_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in uint16 required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint16__t.png b/1.4.1/classsbepp_1_1uint16__t.png new file mode 100644 index 0000000..9149e0d Binary files /dev/null and b/1.4.1/classsbepp_1_1uint16__t.png differ diff --git a/1.4.1/classsbepp_1_1uint32__opt__t-members.html b/1.4.1/classsbepp_1_1uint32__opt__t-members.html new file mode 100644 index 0000000..e7307a4 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint32__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::uint32_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::uint32_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inline
max_value() noexceptsbepp::uint32_opt_tinlinestatic
min_value() noexceptsbepp::uint32_opt_tinlinestatic
null_value() noexceptsbepp::uint32_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inline
value() const noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inline
value_or(std::uint32_t default_value) const noexceptsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >inline
value_type typedefsbepp::detail::optional_base< std::uint32_t, uint32_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint32__opt__t.html b/1.4.1/classsbepp_1_1uint32__opt__t.html new file mode 100644 index 0000000..cdd5add --- /dev/null +++ b/1.4.1/classsbepp_1_1uint32__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::uint32_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::uint32_opt_t Class Reference
+
+
+ +

Built-in uint32 optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::uint32_opt_t:
+
+
+ + +sbepp::detail::optional_base< std::uint32_t, uint32_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< std::uint32_t, uint32_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< std::uint32_t, uint32_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (std::uint32_t default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in uint32 optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint32__opt__t.png b/1.4.1/classsbepp_1_1uint32__opt__t.png new file mode 100644 index 0000000..9439464 Binary files /dev/null and b/1.4.1/classsbepp_1_1uint32__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1uint32__t-members.html b/1.4.1/classsbepp_1_1uint32__t-members.html new file mode 100644 index 0000000..20b8ec1 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint32__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::uint32_t Member List
+
+
+ +

This is the complete list of members for sbepp::uint32_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< std::uint32_t, uint32_t >inline
max_value() noexceptsbepp::uint32_tinlinestatic
min_value() noexceptsbepp::uint32_tinlinestatic
operator*() noexceptsbepp::detail::required_base< std::uint32_t, uint32_t >inline
operator*() const noexceptsbepp::detail::required_base< std::uint32_t, uint32_t >inline
required_base()=defaultsbepp::detail::required_base< std::uint32_t, uint32_t >
required_base(value_type val) noexceptsbepp::detail::required_base< std::uint32_t, uint32_t >inline
value() const noexceptsbepp::detail::required_base< std::uint32_t, uint32_t >inline
value_type typedefsbepp::detail::required_base< std::uint32_t, uint32_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint32__t.html b/1.4.1/classsbepp_1_1uint32__t.html new file mode 100644 index 0000000..466b799 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint32__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::uint32_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::uint32_t Class Reference
+
+
+ +

Built-in uint32 required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::uint32_t:
+
+
+ + +sbepp::detail::required_base< std::uint32_t, uint32_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< std::uint32_t, uint32_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< std::uint32_t, uint32_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in uint32 required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint32__t.png b/1.4.1/classsbepp_1_1uint32__t.png new file mode 100644 index 0000000..96078b2 Binary files /dev/null and b/1.4.1/classsbepp_1_1uint32__t.png differ diff --git a/1.4.1/classsbepp_1_1uint64__opt__t-members.html b/1.4.1/classsbepp_1_1uint64__opt__t-members.html new file mode 100644 index 0000000..e4769e7 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint64__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::uint64_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::uint64_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inline
max_value() noexceptsbepp::uint64_opt_tinlinestatic
min_value() noexceptsbepp::uint64_opt_tinlinestatic
null_value() noexceptsbepp::uint64_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inline
value() const noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inline
value_or(std::uint64_t default_value) const noexceptsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >inline
value_type typedefsbepp::detail::optional_base< std::uint64_t, uint64_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint64__opt__t.html b/1.4.1/classsbepp_1_1uint64__opt__t.html new file mode 100644 index 0000000..ae64768 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint64__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::uint64_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::uint64_opt_t Class Reference
+
+
+ +

Built-in uint64 optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::uint64_opt_t:
+
+
+ + +sbepp::detail::optional_base< std::uint64_t, uint64_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< std::uint64_t, uint64_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< std::uint64_t, uint64_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (std::uint64_t default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in uint64 optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint64__opt__t.png b/1.4.1/classsbepp_1_1uint64__opt__t.png new file mode 100644 index 0000000..e412844 Binary files /dev/null and b/1.4.1/classsbepp_1_1uint64__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1uint64__t-members.html b/1.4.1/classsbepp_1_1uint64__t-members.html new file mode 100644 index 0000000..0fbe8ef --- /dev/null +++ b/1.4.1/classsbepp_1_1uint64__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::uint64_t Member List
+
+
+ +

This is the complete list of members for sbepp::uint64_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< std::uint64_t, uint64_t >inline
max_value() noexceptsbepp::uint64_tinlinestatic
min_value() noexceptsbepp::uint64_tinlinestatic
operator*() noexceptsbepp::detail::required_base< std::uint64_t, uint64_t >inline
operator*() const noexceptsbepp::detail::required_base< std::uint64_t, uint64_t >inline
required_base()=defaultsbepp::detail::required_base< std::uint64_t, uint64_t >
required_base(value_type val) noexceptsbepp::detail::required_base< std::uint64_t, uint64_t >inline
value() const noexceptsbepp::detail::required_base< std::uint64_t, uint64_t >inline
value_type typedefsbepp::detail::required_base< std::uint64_t, uint64_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint64__t.html b/1.4.1/classsbepp_1_1uint64__t.html new file mode 100644 index 0000000..d5901d4 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint64__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::uint64_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::uint64_t Class Reference
+
+
+ +

Built-in uint64 required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::uint64_t:
+
+
+ + +sbepp::detail::required_base< std::uint64_t, uint64_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< std::uint64_t, uint64_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< std::uint64_t, uint64_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in uint64 required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint64__t.png b/1.4.1/classsbepp_1_1uint64__t.png new file mode 100644 index 0000000..e9c2390 Binary files /dev/null and b/1.4.1/classsbepp_1_1uint64__t.png differ diff --git a/1.4.1/classsbepp_1_1uint8__opt__t-members.html b/1.4.1/classsbepp_1_1uint8__opt__t-members.html new file mode 100644 index 0000000..d36f51c --- /dev/null +++ b/1.4.1/classsbepp_1_1uint8__opt__t-members.html @@ -0,0 +1,133 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::uint8_opt_t Member List
+
+
+ +

This is the complete list of members for sbepp::uint8_opt_t, including all inherited members.

+ + + + + + + + + + + + + + + +
has_value() const noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inline
in_range() const noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inline
max_value() noexceptsbepp::uint8_opt_tinlinestatic
min_value() noexceptsbepp::uint8_opt_tinlinestatic
null_value() noexceptsbepp::uint8_opt_tinlinestatic
operator bool() const noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inlineexplicit
operator*() noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inline
operator*() const noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inline
optional_base()=defaultsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >
optional_base(nullopt_t) noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inline
optional_base(value_type val) noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inline
value() const noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inline
value_or(std::uint8_t default_value) const noexceptsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >inline
value_type typedefsbepp::detail::optional_base< std::uint8_t, uint8_opt_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint8__opt__t.html b/1.4.1/classsbepp_1_1uint8__opt__t.html new file mode 100644 index 0000000..f30b460 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint8__opt__t.html @@ -0,0 +1,205 @@ + + + + + + + + +sbepp: sbepp::uint8_opt_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::uint8_opt_t Class Reference
+
+
+ +

Built-in uint8 optional type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::uint8_opt_t:
+
+
+ + +sbepp::detail::optional_base< std::uint8_t, uint8_opt_t > + +
+ + + + + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+static constexpr value_type null_value () noexcept
 Returns nullValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::optional_base< std::uint8_t, uint8_opt_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::optional_base< std::uint8_t, uint8_opt_t >
optional_base ()=default
 Constructs null object.
 
+constexpr optional_base (nullopt_t) noexcept
 Constructs null object.
 
+constexpr optional_base (value_type val) noexcept
 Constructs object from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+constexpr value_type value_or (std::uint8_t default_value) const noexcept
 Returns value if not null, default_value otherwise.
 
+constexpr bool has_value () const noexcept
 Checks if has value.
 
+constexpr operator bool () const noexcept
 Checks if has value.
 
+

Detailed Description

+

Built-in uint8 optional type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint8__opt__t.png b/1.4.1/classsbepp_1_1uint8__opt__t.png new file mode 100644 index 0000000..1ffc7aa Binary files /dev/null and b/1.4.1/classsbepp_1_1uint8__opt__t.png differ diff --git a/1.4.1/classsbepp_1_1uint8__t-members.html b/1.4.1/classsbepp_1_1uint8__t-members.html new file mode 100644 index 0000000..790600f --- /dev/null +++ b/1.4.1/classsbepp_1_1uint8__t-members.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::uint8_t Member List
+
+
+ +

This is the complete list of members for sbepp::uint8_t, including all inherited members.

+ + + + + + + + + + +
in_range() const noexceptsbepp::detail::required_base< std::uint8_t, uint8_t >inline
max_value() noexceptsbepp::uint8_tinlinestatic
min_value() noexceptsbepp::uint8_tinlinestatic
operator*() noexceptsbepp::detail::required_base< std::uint8_t, uint8_t >inline
operator*() const noexceptsbepp::detail::required_base< std::uint8_t, uint8_t >inline
required_base()=defaultsbepp::detail::required_base< std::uint8_t, uint8_t >
required_base(value_type val) noexceptsbepp::detail::required_base< std::uint8_t, uint8_t >inline
value() const noexceptsbepp::detail::required_base< std::uint8_t, uint8_t >inline
value_type typedefsbepp::detail::required_base< std::uint8_t, uint8_t >
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint8__t.html b/1.4.1/classsbepp_1_1uint8__t.html new file mode 100644 index 0000000..878f639 --- /dev/null +++ b/1.4.1/classsbepp_1_1uint8__t.html @@ -0,0 +1,185 @@ + + + + + + + + +sbepp: sbepp::uint8_t Class Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
sbepp::uint8_t Class Reference
+
+
+ +

Built-in uint8 required type. + More...

+ +

#include <sbepp.hpp>

+
+Inheritance diagram for sbepp::uint8_t:
+
+
+ + +sbepp::detail::required_base< std::uint8_t, uint8_t > + +
+ + + + + + + + +

+Static Public Member Functions

+static constexpr value_type min_value () noexcept
 Returns minValue attribute.
 
+static constexpr value_type max_value () noexcept
 Returns maxValue attribute.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from sbepp::detail::required_base< std::uint8_t, uint8_t >
+using value_type
 Underlying type.
 
- Public Member Functions inherited from sbepp::detail::required_base< std::uint8_t, uint8_t >
required_base ()=default
 Default constructor. Constructs value-initialized object.
 
+constexpr required_base (value_type val) noexcept
 Constructs from given value.
 
+constexpr value_type value () const noexcept
 Returns underlying value.
 
+constexpr value_typeoperator* () noexcept
 Returns reference to underlying value.
 
+constexpr value_type operator* () const noexcept
 Returns underlying value.
 
+constexpr bool in_range () const noexcept
 Checks if value is in [Derived::min_value(); Derived::max_value()] range.
 
+

Detailed Description

+

Built-in uint8 required type.

+

Also works as a tag for its traits

+

The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/1.4.1/classsbepp_1_1uint8__t.png b/1.4.1/classsbepp_1_1uint8__t.png new file mode 100644 index 0000000..e8b901c Binary files /dev/null and b/1.4.1/classsbepp_1_1uint8__t.png differ diff --git a/1.4.1/clipboard.js b/1.4.1/clipboard.js new file mode 100644 index 0000000..42c1fb0 --- /dev/null +++ b/1.4.1/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/1.4.1/closed.png b/1.4.1/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/1.4.1/closed.png differ diff --git a/1.4.1/concepts.html b/1.4.1/concepts.html new file mode 100644 index 0000000..5ac83be --- /dev/null +++ b/1.4.1/concepts.html @@ -0,0 +1,134 @@ + + + + + + + + +sbepp: Concept List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Concept List
+
+
+
Here is a list of all documented concepts with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + +
 NsbeppThe main sbepp namespace
 Rarray_typeConcept for sbepp::is_array_type<T>::value
 Rrequired_typeConcept for sbepp::is_required_type<T>::value
 Roptional_typeConcept for sbepp::is_optional_type<T>::value
 Rnon_array_typeConcept for sbepp::is_non_array_type<T>::value
 RtypeConcept for sbepp::is_type<T>::value
 RenumerationConcept for sbepp::is_enum<T>::value
 RsetConcept for sbepp::is_set<T>::value
 RcompositeConcept for sbepp::is_composite<T>::value
 RmessageConcept for sbepp::is_message<T>::value
 Rflat_groupConcept for sbepp::is_flat_group<T>::value
 Rnested_groupConcept for sbepp::is_nested_group<T>::value
 RgroupConcept for sbepp::is_group<T>::value
 RdataConcept for sbepp::is_data<T>::value
+
+
+
+ + + + diff --git a/1.4.1/concepts.js b/1.4.1/concepts.js new file mode 100644 index 0000000..061f99a --- /dev/null +++ b/1.4.1/concepts.js @@ -0,0 +1,18 @@ +var concepts = +[ + [ "sbepp", "namespacesbepp.html", [ + [ "array_type", "conceptsbepp_1_1array__type.html", null ], + [ "required_type", "conceptsbepp_1_1required__type.html", null ], + [ "optional_type", "conceptsbepp_1_1optional__type.html", null ], + [ "non_array_type", "conceptsbepp_1_1non__array__type.html", null ], + [ "type", "conceptsbepp_1_1type.html", null ], + [ "enumeration", "conceptsbepp_1_1enumeration.html", null ], + [ "set", "conceptsbepp_1_1set.html", null ], + [ "composite", "conceptsbepp_1_1composite.html", null ], + [ "message", "conceptsbepp_1_1message.html", null ], + [ "flat_group", "conceptsbepp_1_1flat__group.html", null ], + [ "nested_group", "conceptsbepp_1_1nested__group.html", null ], + [ "group", "conceptsbepp_1_1group.html", null ], + [ "data", "conceptsbepp_1_1data.html", null ] + ] ] +]; \ No newline at end of file diff --git a/1.4.1/conceptsbepp_1_1array__type.html b/1.4.1/conceptsbepp_1_1array__type.html new file mode 100644 index 0000000..2caef2f --- /dev/null +++ b/1.4.1/conceptsbepp_1_1array__type.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::array_type Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::array_type Concept Reference
+
+
+ +

Concept for sbepp::is_array_type<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::array_type = is_array_type_v<T>
+
Concept for sbepp::is_array_type<T>::value
Definition sbepp.hpp:5122
+

Detailed Description

+

Concept for sbepp::is_array_type<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1composite.html b/1.4.1/conceptsbepp_1_1composite.html new file mode 100644 index 0000000..def8d62 --- /dev/null +++ b/1.4.1/conceptsbepp_1_1composite.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::composite Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::composite Concept Reference
+
+
+ +

Concept for sbepp::is_composite<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::composite = is_composite_v<T>
+
Concept for sbepp::is_composite<T>::value
Definition sbepp.hpp:5150
+

Detailed Description

+

Concept for sbepp::is_composite<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1data.html b/1.4.1/conceptsbepp_1_1data.html new file mode 100644 index 0000000..59938ef --- /dev/null +++ b/1.4.1/conceptsbepp_1_1data.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::data Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::data Concept Reference
+
+
+ +

Concept for sbepp::is_data<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::data = is_data_v<T>
+
Concept for sbepp::is_data<T>::value
Definition sbepp.hpp:5170
+

Detailed Description

+

Concept for sbepp::is_data<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1enumeration.html b/1.4.1/conceptsbepp_1_1enumeration.html new file mode 100644 index 0000000..555fcaa --- /dev/null +++ b/1.4.1/conceptsbepp_1_1enumeration.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::enumeration Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::enumeration Concept Reference
+
+
+ +

Concept for sbepp::is_enum<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::enumeration = is_enum_v<T>
+
Concept for sbepp::is_enum<T>::value
Definition sbepp.hpp:5142
+

Detailed Description

+

Concept for sbepp::is_enum<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1flat__group.html b/1.4.1/conceptsbepp_1_1flat__group.html new file mode 100644 index 0000000..b6ea9d8 --- /dev/null +++ b/1.4.1/conceptsbepp_1_1flat__group.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::flat_group Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::flat_group Concept Reference
+
+
+ +

Concept for sbepp::is_flat_group<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::flat_group = is_flat_group_v<T>
+
Concept for sbepp::is_flat_group<T>::value
Definition sbepp.hpp:5158
+

Detailed Description

+

Concept for sbepp::is_flat_group<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1group.html b/1.4.1/conceptsbepp_1_1group.html new file mode 100644 index 0000000..86319ac --- /dev/null +++ b/1.4.1/conceptsbepp_1_1group.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::group Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::group Concept Reference
+
+
+ +

Concept for sbepp::is_group<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::group = is_group_v<T>
+
Concept for sbepp::is_group<T>::value
Definition sbepp.hpp:5166
+

Detailed Description

+

Concept for sbepp::is_group<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1message.html b/1.4.1/conceptsbepp_1_1message.html new file mode 100644 index 0000000..edc53b7 --- /dev/null +++ b/1.4.1/conceptsbepp_1_1message.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::message Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::message Concept Reference
+
+
+ +

Concept for sbepp::is_message<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::message = is_message_v<T>
+
Concept for sbepp::is_message<T>::value
Definition sbepp.hpp:5154
+

Detailed Description

+

Concept for sbepp::is_message<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1nested__group.html b/1.4.1/conceptsbepp_1_1nested__group.html new file mode 100644 index 0000000..71e7ed1 --- /dev/null +++ b/1.4.1/conceptsbepp_1_1nested__group.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::nested_group Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::nested_group Concept Reference
+
+
+ +

Concept for sbepp::is_nested_group<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::nested_group = is_nested_group_v<T>
+
Concept for sbepp::is_nested_group<T>::value
Definition sbepp.hpp:5162
+

Detailed Description

+

Concept for sbepp::is_nested_group<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1non__array__type.html b/1.4.1/conceptsbepp_1_1non__array__type.html new file mode 100644 index 0000000..e4d776d --- /dev/null +++ b/1.4.1/conceptsbepp_1_1non__array__type.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::non_array_type Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::non_array_type Concept Reference
+
+
+ +

Concept for sbepp::is_non_array_type<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::non_array_type = is_non_array_type_v<T>
+
Concept for sbepp::is_non_array_type<T>::value
Definition sbepp.hpp:5134
+

Detailed Description

+

Concept for sbepp::is_non_array_type<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1optional__type.html b/1.4.1/conceptsbepp_1_1optional__type.html new file mode 100644 index 0000000..262218a --- /dev/null +++ b/1.4.1/conceptsbepp_1_1optional__type.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::optional_type Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::optional_type Concept Reference
+
+
+ +

Concept for sbepp::is_optional_type<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::optional_type = is_optional_type_v<T>
+
Concept for sbepp::is_optional_type<T>::value
Definition sbepp.hpp:5130
+

Detailed Description

+

Concept for sbepp::is_optional_type<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1required__type.html b/1.4.1/conceptsbepp_1_1required__type.html new file mode 100644 index 0000000..77ed5d1 --- /dev/null +++ b/1.4.1/conceptsbepp_1_1required__type.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::required_type Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::required_type Concept Reference
+
+
+ +

Concept for sbepp::is_required_type<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::required_type = is_required_type_v<T>
+
Concept for sbepp::is_required_type<T>::value
Definition sbepp.hpp:5126
+

Detailed Description

+

Concept for sbepp::is_required_type<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1set.html b/1.4.1/conceptsbepp_1_1set.html new file mode 100644 index 0000000..3333a20 --- /dev/null +++ b/1.4.1/conceptsbepp_1_1set.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::set Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::set Concept Reference
+
+
+ +

Concept for sbepp::is_set<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::set = is_set_v<T>
+
Concept for sbepp::is_set<T>::value
Definition sbepp.hpp:5146
+

Detailed Description

+

Concept for sbepp::is_set<T>::value

+
+
+ + + + diff --git a/1.4.1/conceptsbepp_1_1type.html b/1.4.1/conceptsbepp_1_1type.html new file mode 100644 index 0000000..b119e73 --- /dev/null +++ b/1.4.1/conceptsbepp_1_1type.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::type Concept Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sbepp::type Concept Reference
+
+
+ +

Concept for sbepp::is_type<T>::value +More...

+ +

#include <sbepp.hpp>

+

Concept definition

+
template<typename T>
+
concept sbepp::type = is_type_v<T>
+
Concept for sbepp::is_type<T>::value
Definition sbepp.hpp:5138
+

Detailed Description

+

Concept for sbepp::is_type<T>::value

+
+
+ + + + diff --git a/1.4.1/cookie.js b/1.4.1/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/1.4.1/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/1.4.1/deprecated.html b/1.4.1/deprecated.html new file mode 100644 index 0000000..1abb1fb --- /dev/null +++ b/1.4.1/deprecated.html @@ -0,0 +1,125 @@ + + + + + + + + +sbepp: Deprecated List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Deprecated List
+
+
+
+
Member sbepp::enum_to_string (const E e) noexcept
+
Deprecated in favor of sbepp::visit, will be removed in the next major update.
+
Member sbepp::visit_set (const Set s, Visitor &&visitor) noexcept -> decltype(s(detail::visit_set_tag{}, std::forward< Visitor >(visitor)))
+
Deprecated in favor of sbepp::visit, will be removed in the next major update.
+
Page Stringification primitives
+
Functionality described on this page is deprecated in favor of more generic sbepp::visit. You can find up-to-date stringification example here.
+
+
+
+
+ + + + diff --git a/1.4.1/dir_e68e8157741866f444e17edd764ebbae.html b/1.4.1/dir_e68e8157741866f444e17edd764ebbae.html new file mode 100644 index 0000000..1affe9f --- /dev/null +++ b/1.4.1/dir_e68e8157741866f444e17edd764ebbae.html @@ -0,0 +1,117 @@ + + + + + + + + +sbepp: /home/runner/work/sbepp/sbepp/doc Directory Reference + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
doc Directory Reference
+
+
+
+
+ + + + diff --git a/1.4.1/doc.svg b/1.4.1/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/1.4.1/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/1.4.1/docd.svg b/1.4.1/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/1.4.1/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/1.4.1/doxygen-awesome-darkmode-toggle.js b/1.4.1/doxygen-awesome-darkmode-toggle.js new file mode 100644 index 0000000..40fe2d3 --- /dev/null +++ b/1.4.1/doxygen-awesome-darkmode-toggle.js @@ -0,0 +1,157 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeDarkModeToggle extends HTMLElement { + // SVG icons from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static lightModeIcon = `` + static darkModeIcon = `` + static title = "Toggle Light/Dark Mode" + + static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" + static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" + + static _staticConstructor = function() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference) + // Update the color scheme when the browsers preference changes + // without user interaction on the website. + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + }) + // Update the color scheme when the tab is made visible again. + // It is possible that the appearance was changed in another tab + // while this tab was in the background. + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + } + }); + }() + + static init() { + $(function() { + $(document).ready(function() { + const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle') + toggleButton.title = DoxygenAwesomeDarkModeToggle.title + toggleButton.updateIcon() + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + toggleButton.updateIcon() + }) + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + toggleButton.updateIcon() + } + }); + + $(document).ready(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + $(window).resize(function(){ + document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + }) + }) + }) + } + + constructor() { + super(); + this.onclick=this.toggleDarkMode + } + + /** + * @returns `true` for dark-mode, `false` for light-mode system preference + */ + static get systemPreference() { + return window.matchMedia('(prefers-color-scheme: dark)').matches + } + + /** + * @returns `true` for dark-mode, `false` for light-mode user preference + */ + static get userPreference() { + return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) || + (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) + } + + static set userPreference(userPreference) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference + if(!userPreference) { + if(DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) + } + } else { + if(!DoxygenAwesomeDarkModeToggle.systemPreference) { + localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true) + } else { + localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) + } + } + DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged() + } + + static enableDarkMode(enable) { + if(enable) { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = true + document.documentElement.classList.add("dark-mode") + document.documentElement.classList.remove("light-mode") + } else { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = false + document.documentElement.classList.remove("dark-mode") + document.documentElement.classList.add("light-mode") + } + } + + static onSystemPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + static onUserPreferenceChanged() { + DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + } + + toggleDarkMode() { + DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference + this.updateIcon() + } + + updateIcon() { + if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) { + this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon + } else { + this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon + } + } +} + +customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle); diff --git a/1.4.1/doxygen-awesome-interactive-toc.js b/1.4.1/doxygen-awesome-interactive-toc.js new file mode 100644 index 0000000..20a9669 --- /dev/null +++ b/1.4.1/doxygen-awesome-interactive-toc.js @@ -0,0 +1,81 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeInteractiveToc { + static topOffset = 38 + static hideMobileMenu = true + static headers = [] + + static init() { + window.addEventListener("load", () => { + let toc = document.querySelector(".contents > .toc") + if(toc) { + toc.classList.add("interactive") + if(!DoxygenAwesomeInteractiveToc.hideMobileMenu) { + toc.classList.add("open") + } + document.querySelector(".contents > .toc > h3")?.addEventListener("click", () => { + if(toc.classList.contains("open")) { + toc.classList.remove("open") + } else { + toc.classList.add("open") + } + }) + + document.querySelectorAll(".contents > .toc > ul a").forEach((node) => { + let id = node.getAttribute("href").substring(1) + DoxygenAwesomeInteractiveToc.headers.push({ + node: node, + headerNode: document.getElementById(id) + }) + + document.getElementById("doc-content")?.addEventListener("scroll", () => { + DoxygenAwesomeInteractiveToc.update() + }) + }) + DoxygenAwesomeInteractiveToc.update() + } + }) + } + + static update() { + let active = DoxygenAwesomeInteractiveToc.headers[0]?.node + DoxygenAwesomeInteractiveToc.headers.forEach((header) => { + let position = header.headerNode.getBoundingClientRect().top + header.node.classList.remove("active") + header.node.classList.remove("aboveActive") + if(position < DoxygenAwesomeInteractiveToc.topOffset) { + active = header.node + active?.classList.add("aboveActive") + } + }) + active?.classList.add("active") + active?.classList.remove("aboveActive") + } +} \ No newline at end of file diff --git a/1.4.1/doxygen-awesome-paragraph-link.js b/1.4.1/doxygen-awesome-paragraph-link.js new file mode 100644 index 0000000..e53d132 --- /dev/null +++ b/1.4.1/doxygen-awesome-paragraph-link.js @@ -0,0 +1,51 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeParagraphLink { + // Icon from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static icon = `` + static title = "Permanent Link" + static init() { + $(function() { + $(document).ready(function() { + document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => { + let anchorlink = document.createElement("a") + anchorlink.setAttribute("href", `#${node.getAttribute("id")}`) + anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title) + anchorlink.classList.add("anchorlink") + node.classList.add("anchor") + anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon + node.parentElement.appendChild(anchorlink) + }) + }) + }) + } +} diff --git a/1.4.1/doxygen-awesome.css b/1.4.1/doxygen-awesome.css new file mode 100644 index 0000000..a2715e2 --- /dev/null +++ b/1.4.1/doxygen-awesome.css @@ -0,0 +1,2677 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname, .paramname em { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: var(--page-background-color); + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 var(--separator-color), + -100px 0 var(--separator-color), + 500px 0 var(--separator-color), + -500px 0 var(--separator-color), + 900px 0 var(--separator-color), + -900px 0 var(--separator-color), + 1400px 0 var(--separator-color), + -1400px 0 var(--separator-color), + 1900px 0 var(--separator-color), + -1900px 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} diff --git a/1.4.1/doxygen.css b/1.4.1/doxygen.css new file mode 100644 index 0000000..b4fc124 --- /dev/null +++ b/1.4.1/doxygen.css @@ -0,0 +1,1819 @@ +/* The standard CSS for doxygen 1.10.0*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #F9FAFC; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #C4CFE5; + border-radius: 4px; + background-color: #FBFCFD; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: black; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#283A5D; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #2A3D61; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt { + color: #b61825; +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/1.4.1/doxygen.svg b/1.4.1/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/1.4.1/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.4.1/doxygen_crawl.html b/1.4.1/doxygen_crawl.html new file mode 100644 index 0000000..fe80f0c --- /dev/null +++ b/1.4.1/doxygen_crawl.html @@ -0,0 +1,244 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.4.1/dynsections.js b/1.4.1/dynsections.js new file mode 100644 index 0000000..8012854 --- /dev/null +++ b/1.4.1/dynsections.js @@ -0,0 +1,194 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/1.4.1/examples.html b/1.4.1/examples.html new file mode 100644 index 0000000..0113af7 --- /dev/null +++ b/1.4.1/examples.html @@ -0,0 +1,674 @@ + + + + + + + + +sbepp: Examples + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Examples
+
+
+ +

+

This pages shows some simple examples, most of things they demostrate are also shown on other pages.

+

Here's the schema:

+
<?xml version="1.0" encoding="UTF-8"?>
+
<sbe:messageSchema package="market" id="1" version="0" byteOrder="littleEndian">
+
<types>
+
<composite name="messageHeader">
+
<type name="blockLength" primitiveType="uint16"/>
+
<type name="templateId" primitiveType="uint16"/>
+
<type name="schemaId" primitiveType="uint16"/>
+
<type name="version" primitiveType="uint16"/>
+
</composite>
+
+
<composite name="groupSizeEncoding">
+
<type name="blockLength" primitiveType="uint16"/>
+
<type name="numInGroup" primitiveType="uint16"/>
+
</composite>
+
+
<composite name="varDataEncoding">
+
<type name="length" primitiveType="uint32"/>
+
<type name="varData" primitiveType="uint8" length="0"/>
+
</composite>
+
+
<type name="uint32_opt" primitiveType="uint32" presence="optional"/>
+
+
<enum name="numbers" encodingType="uint8">
+
<validValue name="One">1</validValue>
+
<validValue name="Two">2</validValue>
+
</enum>
+
+
<set name="options" encodingType="uint8">
+
<choice name="A">0</choice>
+
<choice name="B">2</choice>
+
</set>
+
</types>
+
+
<sbe:message name="msg" id="1">
+
<field name="field" id="1" type="uint32_opt"/>
+
<field name="number" id="2" type="numbers"/>
+
<field name="option" id="3" type="options"/>
+
+
<group name="group" id="4">
+
<field name="field" id="1" type="uint32"/>
+
</group>
+
+
<data name="data" id="5" type="varDataEncoding"/>
+
</sbe:message>
+
</sbe:messageSchema>
+

+

+Encoding a message using normal accessors

+
// note: it's up to client to provide sufficient buffer
+
std::array<char, 1024> buf{};
+
+
auto m = sbepp::make_view<market::messages::msg>(buf.data(), buf.size());
+ +
+
// note: order doesn't matter, it's mixed for demo purpose
+
m.option(market::types::options{}.B(true));
+
m.field(3);
+
m.number(market::types::numbers::Two);
+
+
auto d = m.data();
+
d.assign_string("hi!");
+
+
auto g = m.group();
+ +
g.resize(2);
+
for(const auto entry : g)
+
{
+
entry.field(1);
+
}
+
+
// note: size_bytes is O(1) in this case because group is flat
+
const auto msg_size = sbepp::size_bytes(m);
+
send(sbepp::addressof(m), msg_size);
+
constexpr auto fill_message_header(Message m) noexcept -> decltype(m(detail::fill_message_header_tag{}))
Fill message header.
Definition sbepp.hpp:3990
+
constexpr auto fill_group_header(Group g, Size num_in_group) noexcept -> decltype(g(detail::fill_group_header_tag{}, num_in_group))
Fill group header.
Definition sbepp.hpp:4010
+
constexpr auto addressof(T v) noexcept -> decltype(v(detail::addressof_tag{}))
Returns pointer to the underlying data referenced by a view.
Definition sbepp.hpp:1619
+
constexpr std::size_t size_bytes(T v) noexcept
Returns the size of the underlying data represented by message/group/entry/data/composite view,...
Definition sbepp.hpp:1580
+

+

+Encoding a message using cursor-based accessors

+
// note: it's up to client to provide sufficient buffer
+
std::array<char, 1024> buf{};
+
+
auto m = sbepp::make_view<market::messages::msg>(buf.data(), buf.size());
+
auto c = sbepp::init_cursor(m);
+ +
+
// note: order must be preserved for cursor-based accessors
+
m.field(1, c);
+
m.number(market::types::numbers::Two, c);
+
m.option(market::types::options{}.B(true), c);
+
+
auto g = m.group(c);
+ +
for(const auto entry : g.cursor_range(c))
+
{
+
entry.field(1, c);
+
}
+
+
// note: don't move cursor yet
+
auto d = m.data(sbepp::cursor_ops::dont_move(c));
+
d.assign_string("hi!");
+
// ok, now just skip it
+ +
+
// size_bytes here is a no-op because cursor is already at the end
+
const auto msg_size = sbepp::size_bytes(m, c);
+
send(sbepp::addressof(m), msg_size);
+
constexpr detail::skip_cursor_wrapper< Byte > skip(cursor< Byte > &c) noexcept
Returns a wrapper which moves the cursor to the end of field/group/data without returning the accesse...
Definition sbepp.hpp:1728
+
constexpr detail::dont_move_cursor_wrapper< Byte > dont_move(cursor< Byte > &c) noexcept
Returns a wrapper which doesn't advance the cursor when it's used.
Definition sbepp.hpp:1694
+
constexpr cursor< byte_type_t< View > > init_cursor(View view) noexcept
Initializes cursor from a message/group view with the same byte type.
Definition sbepp.hpp:2846
+

+

+Decoding a message using normal accessors

+
std::array<char, 1024> buf{};
+
auto header = sbepp::make_const_view<
+ +
buf.data(), buf.size());
+
if(*header.templateId()
+ +
{
+
std::cerr << "unknown message id: " << *header.templateId() << '\n';
+
return;
+
}
+
+
auto m = sbepp::make_const_view<market::messages::msg>(buf.data(), buf.size());
+
+
// let's pretend we got this buffer from an untrusted network and want to be
+
// sure that the message is fully contained within given buffer.
+
auto checked_size = sbepp::size_bytes_checked(m, buf.size());
+
if(!checked_size.valid)
+
{
+
std::cerr << "bad message\n";
+
return;
+
}
+
+
// note: order doesn't matter, it's mixed for demo purpose
+
auto d = m.data();
+
std::cout.write(d.data(), d.size());
+
+
const auto field = m.field();
+
if(field.has_value())
+
{
+
if(field.in_range())
+
{
+
std::cout << *field << '\n';
+
}
+
else
+
{
+
std::cout << "field value is out of range \n";
+
}
+
}
+
else
+
{
+
std::cout << "field is null\n";
+
}
+
+
std::cout << *m.option() << '\n';
+
std::cout << sbepp::to_underlying(m.number()) << '\n';
+
+
auto g = m.group();
+
std::cout << "group size: " << g.size() << '\n';
+
for(const auto entry : g)
+
{
+
std::cout << *entry.field() << '\n';
+
}
+
static constexpr message_id_t id() noexcept
Returns id attribute.
+
HeaderComposite< Byte > header_type
Message header composite type.
Definition sbepp.hpp:4136
+
constexpr std::underlying_type< Enum >::type to_underlying(Enum e) noexcept
Converts an enumeration to its underlying type. Equivalent to C++23 std::to_underlying()
Definition sbepp.hpp:2827
+
constexpr size_bytes_checked_result size_bytes_checked(View view, std::size_t size) noexcept
Calculate view size with additional safety checks.
Definition sbepp.hpp:5526
+
constexpr View< typename std::add_const< Byte >::type > make_const_view(Byte *ptr, const std::size_t size) noexcept
Construct read-only view from memory buffer.
Definition sbepp.hpp:4922
+

+

+Decoding a message using cursor-based accessors

+
std::array<char, 1024> buf{};
+
auto m = sbepp::make_const_view<market::messages::msg>(buf.data(), buf.size());
+
// there's nothing wrong in creation of a "wrong" message view
+
if(*sbepp::get_header(m).templateId()
+ +
{
+
std::cerr << "not a `market::messages::msg`" << '\n';
+
return;
+
}
+
+
auto c = sbepp::init_cursor(m);
+
+
// note: order must be preserved for cursor-based accessors
+
const auto field = m.field(c);
+
if(field.has_value())
+
{
+
if(field.in_range())
+
{
+
std::cout << *field << '\n';
+
}
+
else
+
{
+
std::cout << "field value is out of range \n";
+
}
+
}
+
else
+
{
+
std::cout << "field is null\n";
+
}
+
+
std::cout << sbepp::to_underlying(m.number(c)) << '\n';
+
std::cout << *m.option(c) << '\n';
+
+
auto g = m.group(c);
+
std::cout << "group size: " << g.size() << '\n';
+
for(const auto entry : g.cursor_range(c))
+
{
+
std::cout << *entry.field(c) << '\n';
+
}
+
+
auto d = m.data(c);
+
std::cout.write(d.data(), d.size());
+
Provides various traits/attributes of a <message> element.
Definition sbepp.hpp:4334
+
constexpr auto get_header(T v) noexcept -> decltype(v(detail::get_header_tag{}))
Returns the header of a message/group.
Definition sbepp.hpp:1607
+

+

+Decoding message header

+

There are couple of ways to decode message header from an incoming data.

+
    +
  1. Using sbepp::schema_traits::header_type to get header type:

    +
    // `make_view` works as well
    +
    auto header = sbepp::make_const_view<
    + +
    buf.data(), buf.size());
    +
  2. +
  3. Using hardcoded header type(messageHeader here):

    +
    auto header = sbepp::make_const_view<market::types::messageHeader>(
    +
    buf.data(), buf.size());
    +
  4. +
  5. And finally, when one knows for sure what schema they're working with, it's legal to create any message view from that schema and use sbepp::get_header() to get the header. This works because header is the same for all messages within the schema. Of course access anything beyond the header still requires message type check.

    +
    // works even if `buf` represents a different message from `market` schema
    +
    auto m = sbepp::make_const_view<market::messages::msg>(
    +
    buf.data(), buf.size());
    +
    auto header = sbepp::get_header(m);
    +
  6. +
+
+

+Estimating buffer size to encode a message

+

It is possible to estimate how much memory is required to represent encoded message using sbepp::message_traits::size_bytes(). To do this, one needs to know message structure details, the number of entries for each group and the total size of <data> element(s) payload. Here's how it can be done at compile-time:

+
// specify max parameters
+
constexpr auto max_group_entries = 5;
+
constexpr auto max_data_size = 256;
+
+
constexpr auto max_msg_size = sbepp::message_traits<
+
market::schema::messages:msg>::size_bytes(
+
max_group_entries, max_data_size);
+
+
std::array<char, max_msg_size> buf{};
+
+
auto m = sbepp::make_view<market::messages::msg>(buf.data(), buf.size());
+
// encode message as usual but be sure not to exceed `max_group_entries` and
+
// `max_data_size`
+

or at run-time:

+
void make_msg(
+
const std::vector<std::uint32_t>& group_entries,
+
const std::vector<std::uint8_t>& data_payload)
+
{
+
// calculate buffer size required to store `group_entries` in `msg::group`
+
// and `data_payload` in `msg::data`
+
const auto msg_size = sbepp::message_traits<
+
market::schema::messages:msg>::size_bytes(
+
group_entries.size(), max_data_size.size());
+
+
std::vector<char> buf;
+
buf.resize(msg_size);
+
+
auto m = sbepp::make_view<market::messages::msg>(buf.data(), buf.size());
+
// encode message as usual...
+
}
+

+

+Stringification

+

Here's an example of how to build stringification visitor using fmt and Visit API (you can find the full example in stringification.test.cpp):

+
class to_string_visitor
+
{
+
public:
+
template<typename T, typename Cursor, typename Tag>
+
void on_message(T m, Cursor& c, Tag)
+
{
+
append_line("message: {}", sbepp::message_traits<Tag>::name());
+ +
append_line("content: ");
+
indentation++;
+
sbepp::visit_children(m, c, *this);
+
indentation--;
+
}
+
+
template<typename T, typename Cursor, typename Tag>
+
bool on_group(T g, Cursor& c, Tag)
+
{
+
append_line("{}:", sbepp::group_traits<Tag>::name());
+
indentation++;
+
sbepp::visit_children(g, c, *this);
+
indentation--;
+
+
return {};
+
}
+
+
template<typename T, typename Cursor>
+
bool on_entry(T entry, Cursor& c)
+
{
+
append_line("entry:");
+
indentation++;
+
sbepp::visit_children(entry, c, *this);
+
indentation--;
+
+
return {};
+
}
+
+
template<typename T, typename Tag>
+
bool on_data(T d, Tag)
+
{
+ +
return {};
+
}
+
+
template<typename T, typename Tag>
+
bool on_field(T f, Tag)
+
{
+
on_encoding(f, sbepp::field_traits<Tag>::name());
+
return {};
+
}
+
+
template<typename T, typename Tag>
+
bool on_type(T t, Tag)
+
{
+
on_encoding(t, sbepp::type_traits<Tag>::name());
+
return {};
+
}
+
+
template<typename T, typename Tag>
+
bool on_enum(T e, Tag)
+
{
+
on_encoding(e, sbepp::enum_traits<Tag>::name());
+
return {};
+
}
+
+
template<typename T, typename Tag>
+
bool on_set(T s, Tag)
+
{
+
on_encoding(s, sbepp::set_traits<Tag>::name());
+
return {};
+
}
+
+
template<typename T, typename Tag>
+
bool on_composite(T c, Tag)
+
{
+ +
return {};
+
}
+
+
template<typename Tag>
+
void on_enum_value(auto /*e*/, Tag)
+
{
+ +
}
+
+
void on_enum_value(auto e, sbepp::unknown_enum_value_tag)
+
{
+
append("unknown({})\n", sbepp::to_underlying(e));
+
}
+
+
template<typename Tag>
+
void on_set_choice(const bool value, Tag)
+
{
+
if(value)
+
{
+
if(!is_first_choice)
+
{
+
append(", ");
+
}
+
is_first_choice = false;
+ +
}
+
}
+
+
const std::string& str() const
+
{
+
return res;
+
}
+
+
private:
+
std::string res;
+
std::size_t indentation{};
+
bool is_first_choice{};
+
+
void indent()
+
{
+
fmt::format_to(std::back_inserter(res), "{:{}}", "", indentation * 4);
+
}
+
+
template<typename... Args>
+
void append(fmt::format_string<Args...> fmt, Args&&... args)
+
{
+
fmt::format_to(
+
std::back_inserter(res), fmt, std::forward<Args>(args)...);
+
}
+
+
template<typename... Args>
+
void append_line(fmt::format_string<Args...> fmt, Args&&... args)
+
{
+
indent();
+
append(fmt, std::forward<Args>(args)...);
+
res.push_back('\n');
+
}
+
+
void on_encoding(sbepp::required_type auto t, const char* name)
+
{
+
append_line("{}: {}", name, *t);
+
}
+
+
void on_encoding(sbepp::optional_type auto t, const char* name)
+
{
+
if(t)
+
{
+
append_line("{}: {}", name, *t);
+
}
+
else
+
{
+
append_line("{}: null", name);
+
}
+
}
+
+
void on_encoding(sbepp::array_type auto a, const char* name)
+
{
+
on_array(a, name);
+
}
+
+
template<typename T>
+
void on_array(T a, const char* name)
+
{
+
if constexpr(std::is_same_v<typename T::value_type, char>)
+
{
+
// output char arrays as C-strings. Keep in mind that they are not
+
// required to be null-terminated so pass size explicitly
+
append_line("{}: {:.{}}", name, a.data(), a.size());
+
}
+
else
+
{
+
// use standard range-formatter
+
append_line("{}: {}", name, a);
+
}
+
}
+
+
void on_encoding(sbepp::enumeration auto e, const char* name)
+
{
+
indent();
+
append("{}: ", name);
+
sbepp::visit(e, *this);
+
}
+
+
void on_encoding(sbepp::set auto s, const char* name)
+
{
+
indent();
+
append("{}: (", name);
+
is_first_choice = true;
+
sbepp::visit(s, *this);
+
append(")\n");
+
}
+
+
void on_encoding(sbepp::composite auto c, const char* name)
+
{
+
append_line("{}:", name);
+
indentation++;
+ +
indentation--;
+
}
+
};
+
+
// usage:
+
auto res = sbepp::visit<to_string_visitor>(message);
+
fmt::print("{}", res.str());
+
Provides various traits/attributes of a <composite> element.
Definition sbepp.hpp:4290
+
Provides various traits/attributes of a <data> element.
Definition sbepp.hpp:4575
+
Provides various traits/attributes of an <enum> element.
Definition sbepp.hpp:4156
+
Provides various traits/attributes of a <validValue> element.
Definition sbepp.hpp:4193
+
Provides various traits/attributes of a <field> element.
Definition sbepp.hpp:4456
+
Provides various traits/attributes of a <group> element.
Definition sbepp.hpp:4505
+
Provides various traits/attributes of a <choice> element.
Definition sbepp.hpp:4260
+
Provides various traits/attributes of a <set> element.
Definition sbepp.hpp:4223
+
Provides various traits and attributes of a <type> element.
Definition sbepp.hpp:4035
+
Concept for sbepp::is_array_type<T>::value
Definition sbepp.hpp:5122
+
Concept for sbepp::is_composite<T>::value
Definition sbepp.hpp:5150
+
Concept for sbepp::is_enum<T>::value
Definition sbepp.hpp:5142
+
Concept for sbepp::is_optional_type<T>::value
Definition sbepp.hpp:5130
+
Concept for sbepp::is_required_type<T>::value
Definition sbepp.hpp:5126
+
Concept for sbepp::is_set<T>::value
Definition sbepp.hpp:5146
+
constexpr Visitor && visit_children(View view, Cursor &c, Visitor &&visitor={})
Visit view's children using provided cursor.
Definition sbepp.hpp:5301
+
constexpr Visitor && visit(View view, Cursor &c, Visitor &&visitor={})
Visit a view using given cursor.
Definition sbepp.hpp:5199
+
Tag for unknown enum values.
Definition sbepp.hpp:4934
+

Now, for a message like:

+
<enum name="numbers_enum" encodingType="uint8">
+
<validValue name="One">1</validValue>
+
<validValue name="Two">2</validValue>
+
</enum>
+
+
<set name="options_set" encodingType="uint8">
+
<choice name="A">0</choice>
+
<choice name="B">2</choice>
+
</set>
+
+
<sbe:message name="msg28" id="28">
+
<field name="required" id="1" type="uint32"/>
+
<field name="optional1" id="2" type="uint32_opt"/>
+
<field name="optional2" id="3" type="uint32_opt"/>
+
<field name="number" id="4" type="numbers_enum"/>
+
<field name="option" id="5" type="options_set"/>
+
<field name="string" id="6" type="str128"/>
+
<field name="array" id="7" type="arr8"/>
+
+
<group name="group" id="8">
+
<field name="number" id="1" type="uint32"/>
+
</group>
+
+
<data name="varData" id="9" type="varDataEncoding"/>
+
<data name="varStr" id="10" type="varStrEncoding"/>
+
</sbe:message>
+

we can get the following output:

+
message: msg28
+
messageHeader:
+
blockLength: 150
+
templateId: 28
+
schemaId: 1
+
version: 0
+
content:
+
required: 1
+
optional1: 2
+
optional2: null
+
number: One
+
option: (A, B)
+
string: hi
+
array: [1, 0, 2, 0, 0, 0, 0, 0]
+
group:
+
entry:
+
number: 1
+
entry:
+
number: 2
+
varData: [1, 2]
+
varStr: ab
+
+
+
+ + + + diff --git a/1.4.1/files.html b/1.4.1/files.html new file mode 100644 index 0000000..89b1753 --- /dev/null +++ b/1.4.1/files.html @@ -0,0 +1,121 @@ + + + + + + + + +sbepp: File List + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+ + +
 sbepp.hppContains various utilities and implementation details which are required for generated schema headers
+
+
+
+ + + + diff --git a/1.4.1/files_dup.js b/1.4.1/files_dup.js new file mode 100644 index 0000000..4be87f4 --- /dev/null +++ b/1.4.1/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "sbepp.hpp", "sbepp_8hpp.html", "sbepp_8hpp" ] +]; \ No newline at end of file diff --git a/1.4.1/folderclosed.svg b/1.4.1/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/1.4.1/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/1.4.1/folderclosedd.svg b/1.4.1/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/1.4.1/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/1.4.1/folderopen.svg b/1.4.1/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/1.4.1/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/1.4.1/folderopend.svg b/1.4.1/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/1.4.1/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/1.4.1/functions.html b/1.4.1/functions.html new file mode 100644 index 0000000..15385bc --- /dev/null +++ b/1.4.1/functions.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+
+ + + + diff --git a/1.4.1/functions_b.html b/1.4.1/functions_b.html new file mode 100644 index 0000000..5fe765c --- /dev/null +++ b/1.4.1/functions_b.html @@ -0,0 +1,124 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+
+ + + + diff --git a/1.4.1/functions_c.html b/1.4.1/functions_c.html new file mode 100644 index 0000000..0ad9665 --- /dev/null +++ b/1.4.1/functions_c.html @@ -0,0 +1,126 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+
+ + + + diff --git a/1.4.1/functions_d.html b/1.4.1/functions_d.html new file mode 100644 index 0000000..8ee26e0 --- /dev/null +++ b/1.4.1/functions_d.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+
+ + + + diff --git a/1.4.1/functions_dup.js b/1.4.1/functions_dup.js new file mode 100644 index 0000000..85a90e8 --- /dev/null +++ b/1.4.1/functions_dup.js @@ -0,0 +1,20 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "b", "functions_b.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "f", "functions_f.html", null ], + [ "h", "functions_h.html", null ], + [ "i", "functions_i.html", null ], + [ "l", "functions_l.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "o", "functions_o.html", null ], + [ "p", "functions_p.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "t", "functions_t.html", null ], + [ "v", "functions_v.html", null ] +]; \ No newline at end of file diff --git a/1.4.1/functions_e.html b/1.4.1/functions_e.html new file mode 100644 index 0000000..0800238 --- /dev/null +++ b/1.4.1/functions_e.html @@ -0,0 +1,124 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+
+ + + + diff --git a/1.4.1/functions_f.html b/1.4.1/functions_f.html new file mode 100644 index 0000000..b064e4c --- /dev/null +++ b/1.4.1/functions_f.html @@ -0,0 +1,119 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+
+ + + + diff --git a/1.4.1/functions_func.html b/1.4.1/functions_func.html new file mode 100644 index 0000000..773ef99 --- /dev/null +++ b/1.4.1/functions_func.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+
+
+ + + + diff --git a/1.4.1/functions_func.js b/1.4.1/functions_func.js new file mode 100644 index 0000000..f4c36b3 --- /dev/null +++ b/1.4.1/functions_func.js @@ -0,0 +1,19 @@ +var functions_func = +[ + [ "a", "functions_func.html", null ], + [ "b", "functions_func_b.html", null ], + [ "c", "functions_func_c.html", null ], + [ "d", "functions_func_d.html", null ], + [ "e", "functions_func_e.html", null ], + [ "f", "functions_func_f.html", null ], + [ "h", "functions_func_h.html", null ], + [ "i", "functions_func_i.html", null ], + [ "l", "functions_func_l.html", null ], + [ "m", "functions_func_m.html", null ], + [ "n", "functions_func_n.html", null ], + [ "o", "functions_func_o.html", null ], + [ "p", "functions_func_p.html", null ], + [ "r", "functions_func_r.html", null ], + [ "s", "functions_func_s.html", null ], + [ "v", "functions_func_v.html", null ] +]; \ No newline at end of file diff --git a/1.4.1/functions_func_b.html b/1.4.1/functions_func_b.html new file mode 100644 index 0000000..0062f1c --- /dev/null +++ b/1.4.1/functions_func_b.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- b -

+
+
+ + + + diff --git a/1.4.1/functions_func_c.html b/1.4.1/functions_func_c.html new file mode 100644 index 0000000..212db11 --- /dev/null +++ b/1.4.1/functions_func_c.html @@ -0,0 +1,124 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- c -

+
+
+ + + + diff --git a/1.4.1/functions_func_d.html b/1.4.1/functions_func_d.html new file mode 100644 index 0000000..b74d014 --- /dev/null +++ b/1.4.1/functions_func_d.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- d -

+
+
+ + + + diff --git a/1.4.1/functions_func_e.html b/1.4.1/functions_func_e.html new file mode 100644 index 0000000..b6ff2f1 --- /dev/null +++ b/1.4.1/functions_func_e.html @@ -0,0 +1,121 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- e -

+
+
+ + + + diff --git a/1.4.1/functions_func_f.html b/1.4.1/functions_func_f.html new file mode 100644 index 0000000..5da115b --- /dev/null +++ b/1.4.1/functions_func_f.html @@ -0,0 +1,119 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- f -

+
+
+ + + + diff --git a/1.4.1/functions_func_h.html b/1.4.1/functions_func_h.html new file mode 100644 index 0000000..14345a3 --- /dev/null +++ b/1.4.1/functions_func_h.html @@ -0,0 +1,118 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- h -

+
+
+ + + + diff --git a/1.4.1/functions_func_i.html b/1.4.1/functions_func_i.html new file mode 100644 index 0000000..f988900 --- /dev/null +++ b/1.4.1/functions_func_i.html @@ -0,0 +1,121 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- i -

+
+
+ + + + diff --git a/1.4.1/functions_func_l.html b/1.4.1/functions_func_l.html new file mode 100644 index 0000000..5bb9571 --- /dev/null +++ b/1.4.1/functions_func_l.html @@ -0,0 +1,118 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- l -

+
+
+ + + + diff --git a/1.4.1/functions_func_m.html b/1.4.1/functions_func_m.html new file mode 100644 index 0000000..0dc25c1 --- /dev/null +++ b/1.4.1/functions_func_m.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- m -

+
+
+ + + + diff --git a/1.4.1/functions_func_n.html b/1.4.1/functions_func_n.html new file mode 100644 index 0000000..604f9e8 --- /dev/null +++ b/1.4.1/functions_func_n.html @@ -0,0 +1,119 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- n -

+
+
+ + + + diff --git a/1.4.1/functions_func_o.html b/1.4.1/functions_func_o.html new file mode 100644 index 0000000..6290893 --- /dev/null +++ b/1.4.1/functions_func_o.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- o -

+
+
+ + + + diff --git a/1.4.1/functions_func_p.html b/1.4.1/functions_func_p.html new file mode 100644 index 0000000..6bd5891 --- /dev/null +++ b/1.4.1/functions_func_p.html @@ -0,0 +1,122 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- p -

+
+
+ + + + diff --git a/1.4.1/functions_func_r.html b/1.4.1/functions_func_r.html new file mode 100644 index 0000000..29e03ed --- /dev/null +++ b/1.4.1/functions_func_r.html @@ -0,0 +1,122 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- r -

+
+
+ + + + diff --git a/1.4.1/functions_func_s.html b/1.4.1/functions_func_s.html new file mode 100644 index 0000000..39ae6d1 --- /dev/null +++ b/1.4.1/functions_func_s.html @@ -0,0 +1,125 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- s -

+
+
+ + + + diff --git a/1.4.1/functions_func_v.html b/1.4.1/functions_func_v.html new file mode 100644 index 0000000..ec12966 --- /dev/null +++ b/1.4.1/functions_func_v.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Class Members - Functions + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- v -

+
+
+ + + + diff --git a/1.4.1/functions_h.html b/1.4.1/functions_h.html new file mode 100644 index 0000000..59e9c89 --- /dev/null +++ b/1.4.1/functions_h.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+
+ + + + diff --git a/1.4.1/functions_i.html b/1.4.1/functions_i.html new file mode 100644 index 0000000..a6444ae --- /dev/null +++ b/1.4.1/functions_i.html @@ -0,0 +1,122 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+
+ + + + diff --git a/1.4.1/functions_l.html b/1.4.1/functions_l.html new file mode 100644 index 0000000..54a5456 --- /dev/null +++ b/1.4.1/functions_l.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+
+ + + + diff --git a/1.4.1/functions_m.html b/1.4.1/functions_m.html new file mode 100644 index 0000000..a4ed78c --- /dev/null +++ b/1.4.1/functions_m.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+
+ + + + diff --git a/1.4.1/functions_n.html b/1.4.1/functions_n.html new file mode 100644 index 0000000..7c3cf1e --- /dev/null +++ b/1.4.1/functions_n.html @@ -0,0 +1,119 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+
+ + + + diff --git a/1.4.1/functions_o.html b/1.4.1/functions_o.html new file mode 100644 index 0000000..3680b78 --- /dev/null +++ b/1.4.1/functions_o.html @@ -0,0 +1,130 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+
+ + + + diff --git a/1.4.1/functions_p.html b/1.4.1/functions_p.html new file mode 100644 index 0000000..47a44db --- /dev/null +++ b/1.4.1/functions_p.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+
+ + + + diff --git a/1.4.1/functions_r.html b/1.4.1/functions_r.html new file mode 100644 index 0000000..02814d9 --- /dev/null +++ b/1.4.1/functions_r.html @@ -0,0 +1,124 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+
+ + + + diff --git a/1.4.1/functions_rela.html b/1.4.1/functions_rela.html new file mode 100644 index 0000000..b5530b4 --- /dev/null +++ b/1.4.1/functions_rela.html @@ -0,0 +1,122 @@ + + + + + + + + +sbepp: Class Members - Related Symbols + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented related symbols with links to the class documentation for each member:
+
+
+ + + + diff --git a/1.4.1/functions_s.html b/1.4.1/functions_s.html new file mode 100644 index 0000000..0486129 --- /dev/null +++ b/1.4.1/functions_s.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+
+ + + + diff --git a/1.4.1/functions_t.html b/1.4.1/functions_t.html new file mode 100644 index 0000000..3eb5cb7 --- /dev/null +++ b/1.4.1/functions_t.html @@ -0,0 +1,119 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+
+ + + + diff --git a/1.4.1/functions_type.html b/1.4.1/functions_type.html new file mode 100644 index 0000000..5206e24 --- /dev/null +++ b/1.4.1/functions_type.html @@ -0,0 +1,186 @@ + + + + + + + + +sbepp: Class Members - Typedefs + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented typedefs with links to the class documentation for each member:
+ +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+
+
+ + + + diff --git a/1.4.1/functions_v.html b/1.4.1/functions_v.html new file mode 100644 index 0000000..a24f6c5 --- /dev/null +++ b/1.4.1/functions_v.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Class Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+
+ + + + diff --git a/1.4.1/functions_vars.html b/1.4.1/functions_vars.html new file mode 100644 index 0000000..6188412 --- /dev/null +++ b/1.4.1/functions_vars.html @@ -0,0 +1,117 @@ + + + + + + + + +sbepp: Class Members - Variables + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+
+
+ + + + diff --git a/1.4.1/globals.html b/1.4.1/globals.html new file mode 100644 index 0000000..1ac5e87 --- /dev/null +++ b/1.4.1/globals.html @@ -0,0 +1,127 @@ + + + + + + + + +sbepp: File Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented file members with links to the documentation:
+
+
+ + + + diff --git a/1.4.1/globals_defs.html b/1.4.1/globals_defs.html new file mode 100644 index 0000000..10f2efe --- /dev/null +++ b/1.4.1/globals_defs.html @@ -0,0 +1,127 @@ + + + + + + + + +sbepp: File Members + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+
+
+ + + + diff --git a/1.4.1/group__compiler-features.html b/1.4.1/group__compiler-features.html new file mode 100644 index 0000000..4f98722 --- /dev/null +++ b/1.4.1/group__compiler-features.html @@ -0,0 +1,174 @@ + + + + + + + + +sbepp: Compiler features + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Compiler features
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

+#define SBEPP_HAS_THREE_WAY_COMPARISON   0
 1 if compiler supports three-way comparison, 0 otherwise
 
#define SBEPP_HAS_ENDIAN   0
 1 if compiler supports concepts, 0 otherwise
 
+#define SBEPP_HAS_BITCAST   0
 1 if compiler supports std::bitcast, 0 otherwise
 
+#define SBEPP_HAS_BYTESWAP   0
 1 if compiler supports std::byteswap, 0 otherwise
 
+#define SBEPP_HAS_CONSTEXPR_ALGORITHMS   0
 1 if compiler supports constexpr std algorithms, 0 otherwise
 
+#define SBEPP_HAS_CONSTEXPR_ACCESSORS   0
 1 if constexpr accessors are supported, 0 otherwise
 
+#define SBEPP_HAS_RANGES   0
 1 if compiler supports ranges, 0 otherwise
 
+#define SBEPP_HAS_IS_CONSTANT_EVALUATED   0
 1 if compiler supports std::is_constant_evaluated(), 0 otherwise
 
+

Detailed Description

+

The list of configuration macros, if necessary, their values can be enforced by client.

+

Macro Definition Documentation

+ +

◆ SBEPP_HAS_ENDIAN

+ +
+
+ + + + +
#define SBEPP_HAS_ENDIAN   0
+
+ +

1 if compiler supports concepts, 0 otherwise

+

1 is compiler supports inline variables, 0 otherwise

+

1 if compiler supports std::endian, 0 otherwise

+ +
+
+
+
+ + + + diff --git a/1.4.1/group__traits-list.html b/1.4.1/group__traits-list.html new file mode 100644 index 0000000..1de2eca --- /dev/null +++ b/1.4.1/group__traits-list.html @@ -0,0 +1,157 @@ + + + + + + + + +sbepp: Traits list + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Traits list
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  sbepp::type_traits< T >
 Provides various traits and attributes of a <type> element. More...
 
class  sbepp::schema_traits< T >
 Provides various traits/attributes of a <messageSchema> element. More...
 
class  sbepp::enum_traits< T >
 Provides various traits/attributes of an <enum> element. More...
 
class  sbepp::enum_value_traits< T >
 Provides various traits/attributes of a <validValue> element. More...
 
class  sbepp::set_traits< T >
 Provides various traits/attributes of a <set> element. More...
 
class  sbepp::set_choice_traits< T >
 Provides various traits/attributes of a <choice> element. More...
 
class  sbepp::composite_traits< T >
 Provides various traits/attributes of a <composite> element. More...
 
class  sbepp::message_traits< T >
 Provides various traits/attributes of a <message> element. More...
 
class  sbepp::field_traits< T >
 Provides various traits/attributes of a <field> element. More...
 
class  sbepp::group_traits< T >
 Provides various traits/attributes of a <group> element. More...
 
class  sbepp::data_traits< T >
 Provides various traits/attributes of a <data> element. More...
 
+

Detailed Description

+

The list of available traits. For more details see Traits

+
+
+ + + + diff --git a/1.4.1/hierarchy.html b/1.4.1/hierarchy.html new file mode 100644 index 0000000..f1c5975 --- /dev/null +++ b/1.4.1/hierarchy.html @@ -0,0 +1,194 @@ + + + + + + + + +sbepp: Class Hierarchy + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Csbepp::detail::bitset_base< T >Base class for bitsets
 Csbepp::detail::byte_range< Byte >Base class for all reference semantics types
 Csbepp::detail::composite_base< Byte >Base class for composites
 Csbepp::detail::dynamic_array_ref< Byte, Value, Length, E >Represents reference to dynamic arrays used for <data> elements
 Csbepp::detail::entry_base< Byte, BlockLengthType >Base class for group entries
 Csbepp::detail::flat_group_base< Byte, Entry, Dimension >Base class for a flat group
 Csbepp::detail::message_base< Byte, Header >Base class for messages
 Csbepp::detail::nested_group_base< Byte, Entry, Dimension >Base class for a nested group
 Csbepp::detail::static_array_ref< Byte, Value, N, Tag >Represents reference to fixed-size array
 Csbepp::byte_type< View >Trait to get view's byte type
 Csbepp::composite_traits< T >Provides various traits/attributes of a <composite> element
 Csbepp::cursor< Byte >Represents cursor which is used in cursor-based API. Clients should not use undocumented methods
 Csbepp::data_traits< T >Provides various traits/attributes of a <data> element
 Csbepp::default_init_tTag for dynamic_array_ref::resize(). Used to skip value initialization
 Csbepp::enum_traits< T >Provides various traits/attributes of an <enum> element
 Csbepp::enum_value_traits< T >Provides various traits/attributes of a <validValue> element
 Csbepp::field_traits< T >Provides various traits/attributes of a <field> element
 Csbepp::group_traits< T >Provides various traits/attributes of a <group> element
 Csbepp::is_enum< T, typename >Checks if T is an enumeration
 Csbepp::message_traits< T >Provides various traits/attributes of a <message> element
 Csbepp::nullopt_tTag type used to initialize optional types with null value
 Csbepp::detail::optional_base< T, Derived >Base class for optional types
 Csbepp::detail::optional_base< char, char_opt_t >
 Csbepp::char_opt_tBuilt-in char optional type
 Csbepp::detail::optional_base< double, double_opt_t >
 Csbepp::double_opt_tBuilt-in double optional type
 Csbepp::detail::optional_base< float, float_opt_t >
 Csbepp::float_opt_tBuilt-in float optional type
 Csbepp::detail::optional_base< std::int16_t, int16_opt_t >
 Csbepp::int16_opt_tBuilt-in int16 optional type
 Csbepp::detail::optional_base< std::int32_t, int32_opt_t >
 Csbepp::int32_opt_tBuilt-in int32 optional type
 Csbepp::detail::optional_base< std::int64_t, int64_opt_t >
 Csbepp::int64_opt_tBuilt-in int64 optional type
 Csbepp::detail::optional_base< std::int8_t, int8_opt_t >
 Csbepp::int8_opt_tBuilt-in int8 optional type
 Csbepp::detail::optional_base< std::uint16_t, uint16_opt_t >
 Csbepp::uint16_opt_tBuilt-in uint16 optional type
 Csbepp::detail::optional_base< std::uint32_t, uint32_opt_t >
 Csbepp::uint32_opt_tBuilt-in uint32 optional type
 Csbepp::detail::optional_base< std::uint64_t, uint64_opt_t >
 Csbepp::uint64_opt_tBuilt-in uint64 optional type
 Csbepp::detail::optional_base< std::uint8_t, uint8_opt_t >
 Csbepp::uint8_opt_tBuilt-in uint8 optional type
 Csbepp::detail::required_base< T, Derived >Base class for required types
 Csbepp::detail::required_base< char, char_t >
 Csbepp::char_tBuilt-in char required type
 Csbepp::detail::required_base< double, double_t >
 Csbepp::double_tBuilt-in double required type
 Csbepp::detail::required_base< float, float_t >
 Csbepp::float_tBuilt-in float required type
 Csbepp::detail::required_base< std::int16_t, int16_t >
 Csbepp::int16_tBuilt-in int16 required type
 Csbepp::detail::required_base< std::int32_t, int32_t >
 Csbepp::int32_tBuilt-in int32 required type
 Csbepp::detail::required_base< std::int64_t, int64_t >
 Csbepp::int64_tBuilt-in int64 required type
 Csbepp::detail::required_base< std::int8_t, int8_t >
 Csbepp::int8_tBuilt-in int8 required type
 Csbepp::detail::required_base< std::uint16_t, uint16_t >
 Csbepp::uint16_tBuilt-in uint16 required type
 Csbepp::detail::required_base< std::uint32_t, uint32_t >
 Csbepp::uint32_tBuilt-in uint32 required type
 Csbepp::detail::required_base< std::uint64_t, uint64_t >
 Csbepp::uint64_tBuilt-in uint64 required type
 Csbepp::detail::required_base< std::uint8_t, uint8_t >
 Csbepp::uint8_tBuilt-in uint8 required type
 Csbepp::schema_traits< T >Provides various traits/attributes of a <messageSchema> element
 Csbepp::set_choice_traits< T >Provides various traits/attributes of a <choice> element
 Csbepp::set_traits< T >Provides various traits/attributes of a <set> element
 Csbepp::size_bytes_checked_resultResult type of size_bytes_checked
 Csbepp::traits_tag< ValueType >Maps representation type to its tag
 Csbepp::type_traits< T >Provides various traits and attributes of a <type> element
 Csbepp::unknown_enum_value_tagTag for unknown enum values
+
+
+
+ + + + diff --git a/1.4.1/hierarchy.js b/1.4.1/hierarchy.js new file mode 100644 index 0000000..6aedb04 --- /dev/null +++ b/1.4.1/hierarchy.js @@ -0,0 +1,100 @@ +var hierarchy = +[ + [ "sbepp::detail::bitset_base< T >", "classsbepp_1_1detail_1_1bitset__base.html", null ], + [ "sbepp::detail::byte_range< Byte >", "classsbepp_1_1detail_1_1byte__range.html", [ + [ "sbepp::detail::composite_base< Byte >", "classsbepp_1_1detail_1_1composite__base.html", null ], + [ "sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >", "classsbepp_1_1detail_1_1dynamic__array__ref.html", null ], + [ "sbepp::detail::entry_base< Byte, BlockLengthType >", "classsbepp_1_1detail_1_1entry__base.html", null ], + [ "sbepp::detail::flat_group_base< Byte, Entry, Dimension >", "classsbepp_1_1detail_1_1flat__group__base.html", null ], + [ "sbepp::detail::message_base< Byte, Header >", "classsbepp_1_1detail_1_1message__base.html", null ], + [ "sbepp::detail::nested_group_base< Byte, Entry, Dimension >", "classsbepp_1_1detail_1_1nested__group__base.html", null ], + [ "sbepp::detail::static_array_ref< Byte, Value, N, Tag >", "classsbepp_1_1detail_1_1static__array__ref.html", null ] + ] ], + [ "sbepp::byte_type< View >", "structsbepp_1_1byte__type.html", null ], + [ "sbepp::composite_traits< T >", "classsbepp_1_1composite__traits.html", null ], + [ "sbepp::cursor< Byte >", "classsbepp_1_1cursor.html", null ], + [ "sbepp::data_traits< T >", "classsbepp_1_1data__traits.html", null ], + [ "sbepp::default_init_t", "structsbepp_1_1default__init__t.html", null ], + [ "sbepp::enum_traits< T >", "classsbepp_1_1enum__traits.html", null ], + [ "sbepp::enum_value_traits< T >", "classsbepp_1_1enum__value__traits.html", null ], + [ "sbepp::field_traits< T >", "classsbepp_1_1field__traits.html", null ], + [ "sbepp::group_traits< T >", "classsbepp_1_1group__traits.html", null ], + [ "sbepp::is_enum< T, typename >", "structsbepp_1_1is__enum.html", null ], + [ "sbepp::message_traits< T >", "classsbepp_1_1message__traits.html", null ], + [ "sbepp::nullopt_t", "structsbepp_1_1nullopt__t.html", null ], + [ "sbepp::detail::optional_base< T, Derived >", "classsbepp_1_1detail_1_1optional__base.html", null ], + [ "sbepp::detail::optional_base< char, char_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::char_opt_t", "classsbepp_1_1char__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< double, double_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::double_opt_t", "classsbepp_1_1double__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< float, float_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::float_opt_t", "classsbepp_1_1float__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< std::int16_t, int16_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::int16_opt_t", "classsbepp_1_1int16__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< std::int32_t, int32_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::int32_opt_t", "classsbepp_1_1int32__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< std::int64_t, int64_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::int64_opt_t", "classsbepp_1_1int64__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< std::int8_t, int8_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::int8_opt_t", "classsbepp_1_1int8__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< std::uint16_t, uint16_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::uint16_opt_t", "classsbepp_1_1uint16__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< std::uint32_t, uint32_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::uint32_opt_t", "classsbepp_1_1uint32__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< std::uint64_t, uint64_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::uint64_opt_t", "classsbepp_1_1uint64__opt__t.html", null ] + ] ], + [ "sbepp::detail::optional_base< std::uint8_t, uint8_opt_t >", "classsbepp_1_1detail_1_1optional__base.html", [ + [ "sbepp::uint8_opt_t", "classsbepp_1_1uint8__opt__t.html", null ] + ] ], + [ "sbepp::detail::required_base< T, Derived >", "classsbepp_1_1detail_1_1required__base.html", null ], + [ "sbepp::detail::required_base< char, char_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::char_t", "classsbepp_1_1char__t.html", null ] + ] ], + [ "sbepp::detail::required_base< double, double_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::double_t", "classsbepp_1_1double__t.html", null ] + ] ], + [ "sbepp::detail::required_base< float, float_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::float_t", "classsbepp_1_1float__t.html", null ] + ] ], + [ "sbepp::detail::required_base< std::int16_t, int16_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::int16_t", "classsbepp_1_1int16__t.html", null ] + ] ], + [ "sbepp::detail::required_base< std::int32_t, int32_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::int32_t", "classsbepp_1_1int32__t.html", null ] + ] ], + [ "sbepp::detail::required_base< std::int64_t, int64_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::int64_t", "classsbepp_1_1int64__t.html", null ] + ] ], + [ "sbepp::detail::required_base< std::int8_t, int8_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::int8_t", "classsbepp_1_1int8__t.html", null ] + ] ], + [ "sbepp::detail::required_base< std::uint16_t, uint16_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::uint16_t", "classsbepp_1_1uint16__t.html", null ] + ] ], + [ "sbepp::detail::required_base< std::uint32_t, uint32_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::uint32_t", "classsbepp_1_1uint32__t.html", null ] + ] ], + [ "sbepp::detail::required_base< std::uint64_t, uint64_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::uint64_t", "classsbepp_1_1uint64__t.html", null ] + ] ], + [ "sbepp::detail::required_base< std::uint8_t, uint8_t >", "classsbepp_1_1detail_1_1required__base.html", [ + [ "sbepp::uint8_t", "classsbepp_1_1uint8__t.html", null ] + ] ], + [ "sbepp::schema_traits< T >", "classsbepp_1_1schema__traits.html", null ], + [ "sbepp::set_choice_traits< T >", "classsbepp_1_1set__choice__traits.html", null ], + [ "sbepp::set_traits< T >", "classsbepp_1_1set__traits.html", null ], + [ "sbepp::size_bytes_checked_result", "structsbepp_1_1size__bytes__checked__result.html", null ], + [ "sbepp::traits_tag< ValueType >", "structsbepp_1_1traits__tag.html", null ], + [ "sbepp::type_traits< T >", "classsbepp_1_1type__traits.html", null ], + [ "sbepp::unknown_enum_value_tag", "structsbepp_1_1unknown__enum__value__tag.html", null ] +]; \ No newline at end of file diff --git a/1.4.1/index.html b/1.4.1/index.html new file mode 100644 index 0000000..46c1ac7 --- /dev/null +++ b/1.4.1/index.html @@ -0,0 +1,149 @@ + + + + + + + + +sbepp: Overview + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Overview
+
+
+

sbepp is a zero-overhead C++ implementation of Simple Binary Encoding (SBE). It consists of two parts:

    +
  • sbeppc, schema compiler which generates header-only C++ code
  • +
  • sbepp, header-only supporting library
  • +
+

+How it works

+
    +
  1. Compile SBE schema using sbeppc to get C++ headers.
  2. +
  3. Integrate them into your project.
  4. +
  5. Link to sbepp::sbepp library.
  6. +
  7. Use it!
  8. +
+

sbepp has two main goals:

    +
  • provide fast, direct access to SBE data
  • +
  • provide convenient representation of SBE entities like types, messages, etc.
  • +
+

As a result, almost all types in sbepp are reference semantics wrappers over memory buffer. They never manage underlying memory in any way, only treat the data according to SBE standard. The idea was to provide a thing similar to plain struct with getters/setters and leave rest to a client. The only thing which is handled implicitly is a schema extension mechanism, everything else must be done by a client. For a boiler-plate things like header filling sbepp provides helper utilities. Basically, all it does under the hood is offset calculation and memory read/write.

+

It's worth mentioning that at the moment sbepp cannot generate schema representation at run-time like other similar software.

+

+How it compares to RealLogic

+

RealLogic is more like a platform rather than a simple tool. It can generate code in different languages, load schema at run-time, validate XML, etc. sbepp is focused solely on generating C++ code.

+

Both tools generate view-like classes which don't manage memory. However, RealLogic requires non-const char* buffer even for decoding, while sbepp takes byte type as a template parameter and provides read-only access when it's const-qualified.

+

The performance of the code generated by both tools is quite similar, at least in my benchmarks I don't see a significant difference. In compiler-explorer experiments I found that in some cases RealLogic's code results in a noticeably more assembly lines while the code generated by sbepp is nearly identical to the assembly of a hand-written code.

+

RealLogic requires forward-only access when one needs to touch each field either by reading or skipping it with explicit call. sbepp provides both, random and forward-only access. Since most messages have simple structure, random access performs just as well for them.

+

RealLogic has inconvenient 2-step process for message creation. sbepp needs only a single line to create a message wrapper and one more call to fill message header in case of encoding.

+

In general, RealLogic provides poor C++ abstractions for SBE types and mixes various helper functions with getters/setters. This results in message interface being polluted with methods like field_nameId(), field_nameEncodingOffset(), field_nameNullValue() along with field accessors. sbepp provides convenient STL-like wrappers for each SBE entity and never mixes accessors with internal methods so auto-suggestion in IDE shows you only schema names and nothing else. This interface problem holds for group and fixed/variable length array interfaces. They just don't work in a C++ way.

+

RealLogic uses exceptions to report boundary check violations (if checks are enabled). sbepp uses assertions and they are supposed to be enabled only in Debug mode.

+

RealLogic provides iostream-based operator<< with fixed formatting. sbepp provides only stringification primitives and Visit API which allows clients to build their own to_string() with desired format and output mechanism.

+

+License

+

Distributed under the MIT license.

+
+ +
+
+ + + + diff --git a/1.4.1/index.js b/1.4.1/index.js new file mode 100644 index 0000000..4659a04 --- /dev/null +++ b/1.4.1/index.js @@ -0,0 +1,6 @@ +var index = +[ + [ "How it works", "index.html#autotoc_md0", null ], + [ "How it compares to RealLogic", "index.html#autotoc_md1", null ], + [ "License", "index.html#autotoc_md2", null ] +]; \ No newline at end of file diff --git a/1.4.1/installation.html b/1.4.1/installation.html new file mode 100644 index 0000000..efe751b --- /dev/null +++ b/1.4.1/installation.html @@ -0,0 +1,144 @@ + + + + + + + + +sbepp: Installation + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Installation
+
+
+

+

+CMake

+

Use classic CMake approach:

+
mkdir build
+
cd build
+
cmake ..
+
cmake --build .
+
cmake --install .
+

After the build/installation, there'll be 2 CMake targets: sbepp::sbeppc and sbepp::sbepp, check out the Integration section to see how they can be used.

+

sbepp is a C++11 header-only library which depends only on the STL.

+

sbeppc requires C++17. It depends on:

+

Available CMake options (name = default_value):

+
    +
  • SBEPP_BUILD_SBEPPC = ON, controls whether sbeppc should be built
  • +
  • SBEPP_DEV_MODE = OFF, enables developer mode.
  • +
  • SBEPP_BUILD_BENCHMARK = OFF, requires SBEPP_DEV_MODE=ON, controls whether benchmarks should be built. If ON, requires benchmark
  • +
  • SBEPP_BUILD_TESTS = OFF, requires SBEPP_DEV_MODE=ON, controls whether tests should be built. If ON, requires googletest and fmt
  • +
  • SBEPP_BUILD_DOCS = OFF, controls whether documentation should be built. If ON requires Doxygen
  • +
+

There's a conanfile.txt which can be used to simplify dependency management.

+

+Conan package

+

Now available in ConanCenter. Use with_sbeppc Conan option to enable/disable sbeppc building (defaults to True).

+
+
+
+ + + + diff --git a/1.4.1/integration.html b/1.4.1/integration.html new file mode 100644 index 0000000..cb3acea --- /dev/null +++ b/1.4.1/integration.html @@ -0,0 +1,239 @@ + + + + + + + + +sbepp: Integration into your project + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
sbepp +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Integration into your project
+
+
+ +

+

After schema compilation, the only thing you need to use it is to include generated files into your project and link to sbepp::sbepp CMake target.

+
+

+Compiling schema on-the-fly

+

The most simple way is to compile schema on-the-fly, that is, to store only schema XML in your source tree and generate C++ headers from it during the build process.

+
+

+CMake helpers

+

sbepp provides a couple of helpers to make on-the-fly schema compilation as easy as possible.

+

sbeppc_compile_schema - creates INTERFACE library that compiles SBE schema using sbeppc.
+ Parameters:

    +
  • SCHEMA_FILE, the path to schema XML file.
  • +
  • TARGET_NAME, the name of the generated INTERFACE library. Same target can be used to compile multiple schemas.
  • +
  • OUTPUT_DIR, optional, the directory in which sbeppc will generate headers. Defaults to ${CMAKE_BINARY_DIR}/sbeppc_generated.
  • +
  • SCHEMA_NAME, optional, overrides schema name from XML.
  • +
  • SBEPPC_PATH, optional, the path to sbeppc binary, uses sbepp::sbeppc CMake target by default.
  • +
+

This function creates custom target using sbeppc_make_schema_target (described below) and then creates INTERFACE library on top of it. This library carries all necessary dependencies and settings so there's a minimal amount of work left to user:

+
sbeppc_compile_schema(
+
TARGET_NAME compiled_schemas
+
SCHEMA_FILE "schema1.xml"
+
)
+
+
sbeppc_compile_schema(
+
# note that we can use the same target name for many schemas
+
TARGET_NAME compiled_schemas
+
SCHEMA_FILE "schema2.xml"
+
)
+
+
add_executable(exe)
+
# generated target carries all necessary dependencies, just link to it
+
target_link_libraries(exe PRIVATE compiled_schemas)
+

+

sbeppc_make_schema_target - creates a custom target that compiles SBE schema using sbeppc.
+ Parameters:

    +
  • SCHEMA_FILE, the path to schema XML file.
  • +
  • TARGET_NAME, the name of generated custom target. Same target can be used to compile multiple schemas.
  • +
  • OUTPUT_DIR, the directory in which sbeppc will generate headers.
  • +
  • SCHEMA_NAME, optional, overrides schema name from XML.
  • +
  • SBEPPC_PATH, optional, the path to sbeppc binary, uses sbepp::sbeppc CMake target by default.
  • +
+

This is a lower-level function than sbeppc_compile_schema. It only creates a custom command and a custom target to compile the schema leaving the rest of work up to user. When SCHEMA_NAME is not provided, it also creates a special empty anchor file with a name like <HASH>.anchor for a schema. This file is indirectly included into all generated headers and required for CMake and underlying build systems to establish correct dependency graph and enforce automatic recompilation of consumers of this target when either schema XML or sbeppc itself changes.

+

Example:

+
sbeppc_make_schema_target(
+
SCHEMA_FILE "schema1.xml"
+
TARGET_NAME compiled_schemas
+
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
+
)
+
+
sbeppc_make_schema_target(
+
SCHEMA_FILE "schema2.xml"
+
TARGET_NAME compiled_schemas
+
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
+
)
+
+
add_executable(exe)
+
add_dependencies(exe compiled_schemas)
+
target_include_directories(exe SYSTEM PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
+
target_link_libraries(exe PRIVATE sbepp::sbepp)
+

+

+Manual schema compilation

+

Here's an example of how to implement the above functionality by-hand:

+
set(schema "schema_name")
+
set(schema_path "${CMAKE_CURRENT_LIST_DIR}/schemas/${schema}.xml")
+
+
# mention one of the output files
+
set(output_file "${CMAKE_CURRENT_BINARY_DIR}/${schema}/${schema}.hpp")
+
+
# add a command which compiles the schema
+
add_custom_command(
+
OUTPUT ${output_file}
+
COMMAND $<TARGET_FILE:sbepp::sbeppc> "${schema_path}"
+
DEPENDS "${schema_path}"
+
)
+
+
# add a custom target which depends on the above
+
add_custom_target(compile_schema
+
DEPENDS ${output_file}
+
)
+
+
# add it to dependencies of your target
+
add_executable(my_project)
+
add_dependencies(my_project compile_schema)
+
+
# add CMAKE_CURRENT_BINARY_DIR to be able to access generated headers
+
target_include_directories(my_project
+
SYSTEM PRIVATE # Note `SYSTEM`
+
${CMAKE_CURRENT_BINARY_DIR}
+
)
+
+
# link to sbepp::sbepp
+
target_link_libraries(my_project
+
PRIVATE
+
sbepp::sbepp
+
)
+

+

+Using pre-compiled schema

+

Another approach is to use pre-compiled schema headers, that is, generate headers once and store them in the source tree. This might be useful when it's not desired/possible to build/install sbeppc in developer environment (e.g. if C++17 required for sbeppc is not available). It requires building sbeppc once somewhere, generating schema headers using it and pushing them to the source tree to be used by others. In this case care should be taken to keep once-generated headers compatible with sbepp if it's installed automatically via some dependency management mechanism.

+
Note
Check out SBEPP_BUILD_SBEPPC and with_sbeppc options to see how to disable sbeppc building for such cases.
+

Also, since it's a third-party code, it's recommended to mark include path for generated headers as SYSTEM to hide potential warnings.

+
+

+Versioning and compatibility

+

sbepp uses SemVer that is defined in terms of public API, its users and its changes. sbepp defines public API as:

    +
  • sbepp::sbeppc schema compiler
  • +
  • public parts of sbepp::sbepp supporting library
  • +
  • public parts of generated headers
  • +
+

The most important consequence from this definition is that whether a change is compatible/incompatible depends only on how it affects user's code, not the generated one. In practice it means that headers generated by sbepp::sbeppc version 1.2.3 might not be compatible with sbepp::sbepp version 1.3.0 and even with 1.2.4. Such incompatibility requires schema recompilation but not the user's code change (only MAJOR update will require that).

+

To summarize, the advised strategy is to use the same version of sbepp::sbeppc and sbepp::sbepp to generate and use headers. Types from the detail namespace should never be mentioned/used explicitly, they can be affected even by the PATCH version change.

+
+
+
+ + + + diff --git a/1.4.1/jquery.js b/1.4.1/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/1.4.1/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/1.4.1/menu.js b/1.4.1/menu.js new file mode 100644 index 0000000..717761d --- /dev/null +++ b/1.4.1/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/1.4.1/menudata.js b/1.4.1/menudata.js new file mode 100644 index 0000000..2d0ca97 --- /dev/null +++ b/1.4.1/menudata.js @@ -0,0 +1,120 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Installation",url:"installation.html"}, +{text:"Using the schema compiler",url:"sbeppc.html"}, +{text:"Using generated code",url:"usergroup0.html",children:[ +{text:"Integration into your project",url:"integration.html"}, +{text:"Schema representation",url:"representation.html"}, +{text:"Traits",url:"traits.html"}, +{text:"Visit API",url:"visit-api.html"}, +{text:"Stringification primitives",url:"stringification.html"}]}, +{text:"Benchmarks",url:"benchmarks.html"}, +{text:"Examples",url:"examples.html"}, +{text:"API Reference",url:"usergroup1.html",children:[ +{text:"Namespace List",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"a",url:"namespacemembers.html#index_a"}, +{text:"b",url:"namespacemembers.html#index_b"}, +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"d",url:"namespacemembers.html#index_d"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"f",url:"namespacemembers.html#index_f"}, +{text:"g",url:"namespacemembers.html#index_g"}, +{text:"i",url:"namespacemembers.html#index_i"}, +{text:"l",url:"namespacemembers.html#index_l"}, +{text:"m",url:"namespacemembers.html#index_m"}, +{text:"n",url:"namespacemembers.html#index_n"}, +{text:"o",url:"namespacemembers.html#index_o"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"t",url:"namespacemembers.html#index_t"}, +{text:"v",url:"namespacemembers.html#index_v"}]}, +{text:"Functions",url:"namespacemembers_func.html"}, +{text:"Variables",url:"namespacemembers_vars.html"}, +{text:"Typedefs",url:"namespacemembers_type.html"}, +{text:"Enumerations",url:"namespacemembers_enum.html"}]}]}, +{text:"Concept List",url:"concepts.html"}, +{text:"Class List",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"v",url:"functions_v.html#index_v"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func_b.html#index_b"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"d",url:"functions_func_d.html#index_d"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"f",url:"functions_func_f.html#index_f"}, +{text:"h",url:"functions_func_h.html#index_h"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"m",url:"functions_func_m.html#index_m"}, +{text:"n",url:"functions_func_n.html#index_n"}, +{text:"o",url:"functions_func_o.html#index_o"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"v",url:"functions_func_v.html#index_v"}]}, +{text:"Variables",url:"functions_vars.html"}, +{text:"Typedefs",url:"functions_type.html",children:[ +{text:"b",url:"functions_type.html#index_b"}, +{text:"c",url:"functions_type.html#index_c"}, +{text:"d",url:"functions_type.html#index_d"}, +{text:"e",url:"functions_type.html#index_e"}, +{text:"h",url:"functions_type.html#index_h"}, +{text:"i",url:"functions_type.html#index_i"}, +{text:"l",url:"functions_type.html#index_l"}, +{text:"p",url:"functions_type.html#index_p"}, +{text:"r",url:"functions_type.html#index_r"}, +{text:"s",url:"functions_type.html#index_s"}, +{text:"t",url:"functions_type.html#index_t"}, +{text:"v",url:"functions_type.html#index_v"}]}, +{text:"Related Symbols",url:"functions_rela.html"}]}]}, +{text:"File List",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]}]} diff --git a/1.4.1/minus.svg b/1.4.1/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/1.4.1/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/1.4.1/minusd.svg b/1.4.1/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/1.4.1/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/1.4.1/namespacemembers.html b/1.4.1/namespacemembers.html new file mode 100644 index 0000000..ed6e4de --- /dev/null +++ b/1.4.1/namespacemembers.html @@ -0,0 +1,234 @@ + + + + + + + + +sbepp: Namespace Members + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - a -

      +
    • addressof() : sbepp
    • +
    • assertion_failed() : sbepp
    • +
    + + +

    - b -

      +
    • block_length_t : sbepp
    • +
    • byte_type_t : sbepp
    • +
    + + +

    - c -

      +
    • choice_index_t : sbepp
    • +
    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

      +
    • field_presence : sbepp
    • +
    • fill_group_header() : sbepp
    • +
    • fill_message_header() : sbepp
    • +
    + + +

    - g -

      +
    • get_header() : sbepp
    • +
    + + +

    - i -

    + + +

    - l -

    + + +

    - m -

      +
    • make_const_view() : sbepp
    • +
    • make_view() : sbepp
    • +
    • member_id_t : sbepp
    • +
    • message_id_t : sbepp
    • +
    + + +

    - n -

    + + +

    - o -

    + + +

    - s -

    + + +

    - t -

      +
    • to_underlying() : sbepp
    • +
    • traits_tag_t : sbepp
    • +
    + + +

    - v -

    +
    +
    + + + + diff --git a/1.4.1/namespacemembers_enum.html b/1.4.1/namespacemembers_enum.html new file mode 100644 index 0000000..5c50128 --- /dev/null +++ b/1.4.1/namespacemembers_enum.html @@ -0,0 +1,118 @@ + + + + + + + + +sbepp: Namespace Members + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace enums with links to the namespaces they belong to:
    +
    +
    + + + + diff --git a/1.4.1/namespacemembers_func.html b/1.4.1/namespacemembers_func.html new file mode 100644 index 0000000..29e165f --- /dev/null +++ b/1.4.1/namespacemembers_func.html @@ -0,0 +1,135 @@ + + + + + + + + +sbepp: Namespace Members + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace functions with links to the namespaces they belong to:
    +
    +
    + + + + diff --git a/1.4.1/namespacemembers_type.html b/1.4.1/namespacemembers_type.html new file mode 100644 index 0000000..689e3c3 --- /dev/null +++ b/1.4.1/namespacemembers_type.html @@ -0,0 +1,138 @@ + + + + + + + + +sbepp: Namespace Members + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace typedefs with links to the namespaces they belong to:
    +
    +
    + + + + diff --git a/1.4.1/namespacemembers_vars.html b/1.4.1/namespacemembers_vars.html new file mode 100644 index 0000000..5cd0d64 --- /dev/null +++ b/1.4.1/namespacemembers_vars.html @@ -0,0 +1,130 @@ + + + + + + + + +sbepp: Namespace Members + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace variables with links to the namespaces they belong to:
    +
    +
    + + + + diff --git a/1.4.1/namespaces.html b/1.4.1/namespaces.html new file mode 100644 index 0000000..695ba30 --- /dev/null +++ b/1.4.1/namespaces.html @@ -0,0 +1,188 @@ + + + + + + + + +sbepp: Namespace List + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NsbeppThe main sbepp namespace
     Ncursor_opsContains cursor wrappers which allow more precise control over its position
     NdetailNamespace for various implementation details. Should not be used directly
     Cbitset_baseBase class for bitsets
     Cbyte_rangeBase class for all reference semantics types
     Ccomposite_baseBase class for composites
     Cdynamic_array_refRepresents reference to dynamic arrays used for <data> elements
     Centry_baseBase class for group entries
     Cflat_group_baseBase class for a flat group
     Cmessage_baseBase class for messages
     Cnested_group_baseBase class for a nested group
     Coptional_baseBase class for optional types
     Crequired_baseBase class for required types
     Cstatic_array_refRepresents reference to fixed-size array
     Cbyte_typeTrait to get view's byte type
     Cchar_opt_tBuilt-in char optional type
     Cchar_tBuilt-in char required type
     Ccomposite_traitsProvides various traits/attributes of a <composite> element
     CcursorRepresents cursor which is used in cursor-based API. Clients should not use undocumented methods
     Cdata_traitsProvides various traits/attributes of a <data> element
     Cdefault_init_tTag for dynamic_array_ref::resize(). Used to skip value initialization
     Cdouble_opt_tBuilt-in double optional type
     Cdouble_tBuilt-in double required type
     Cenum_traitsProvides various traits/attributes of an <enum> element
     Cenum_value_traitsProvides various traits/attributes of a <validValue> element
     Cfield_traitsProvides various traits/attributes of a <field> element
     Cfloat_opt_tBuilt-in float optional type
     Cfloat_tBuilt-in float required type
     Cgroup_traitsProvides various traits/attributes of a <group> element
     Cint16_opt_tBuilt-in int16 optional type
     Cint16_tBuilt-in int16 required type
     Cint32_opt_tBuilt-in int32 optional type
     Cint32_tBuilt-in int32 required type
     Cint64_opt_tBuilt-in int64 optional type
     Cint64_tBuilt-in int64 required type
     Cint8_opt_tBuilt-in int8 optional type
     Cint8_tBuilt-in int8 required type
     Cis_enumChecks if T is an enumeration
     Cmessage_traitsProvides various traits/attributes of a <message> element
     Cnullopt_tTag type used to initialize optional types with null value
     Cschema_traitsProvides various traits/attributes of a <messageSchema> element
     Cset_choice_traitsProvides various traits/attributes of a <choice> element
     Cset_traitsProvides various traits/attributes of a <set> element
     Csize_bytes_checked_resultResult type of size_bytes_checked
     Ctraits_tagMaps representation type to its tag
     Ctype_traitsProvides various traits and attributes of a <type> element
     Cuint16_opt_tBuilt-in uint16 optional type
     Cuint16_tBuilt-in uint16 required type
     Cuint32_opt_tBuilt-in uint32 optional type
     Cuint32_tBuilt-in uint32 required type
     Cuint64_opt_tBuilt-in uint64 optional type
     Cuint64_tBuilt-in uint64 required type
     Cuint8_opt_tBuilt-in uint8 optional type
     Cuint8_tBuilt-in uint8 required type
     Cunknown_enum_value_tagTag for unknown enum values
     Rarray_typeConcept for sbepp::is_array_type<T>::value
     Rrequired_typeConcept for sbepp::is_required_type<T>::value
     Roptional_typeConcept for sbepp::is_optional_type<T>::value
     Rnon_array_typeConcept for sbepp::is_non_array_type<T>::value
     RtypeConcept for sbepp::is_type<T>::value
     RenumerationConcept for sbepp::is_enum<T>::value
     RsetConcept for sbepp::is_set<T>::value
     RcompositeConcept for sbepp::is_composite<T>::value
     RmessageConcept for sbepp::is_message<T>::value
     Rflat_groupConcept for sbepp::is_flat_group<T>::value
     Rnested_groupConcept for sbepp::is_nested_group<T>::value
     RgroupConcept for sbepp::is_group<T>::value
     RdataConcept for sbepp::is_data<T>::value
    +
    +
    +
    + + + + diff --git a/1.4.1/namespaces_dup.js b/1.4.1/namespaces_dup.js new file mode 100644 index 0000000..b066285 --- /dev/null +++ b/1.4.1/namespaces_dup.js @@ -0,0 +1,4 @@ +var namespaces_dup = +[ + [ "sbepp", "namespacesbepp.html", "namespacesbepp" ] +]; \ No newline at end of file diff --git a/1.4.1/namespacesbepp.html b/1.4.1/namespacesbepp.html new file mode 100644 index 0000000..f041f73 --- /dev/null +++ b/1.4.1/namespacesbepp.html @@ -0,0 +1,1678 @@ + + + + + + + + +sbepp: sbepp Namespace Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp Namespace Reference
    +
    +
    + +

    The main sbepp namespace. +More...

    + + + + + + + + +

    +Namespaces

    namespace  cursor_ops
     Contains cursor wrappers which allow more precise control over its position.
     
    namespace  detail
     Namespace for various implementation details. Should not be used directly.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    struct  byte_type
     Trait to get view's byte type. More...
     
    class  char_opt_t
     Built-in char optional type. More...
     
    class  char_t
     Built-in char required type. More...
     
    class  composite_traits
     Provides various traits/attributes of a <composite> element. More...
     
    class  cursor
     Represents cursor which is used in cursor-based API. Clients should not use undocumented methods. More...
     
    class  data_traits
     Provides various traits/attributes of a <data> element. More...
     
    struct  default_init_t
     tag for dynamic_array_ref::resize(). Used to skip value initialization. More...
     
    class  double_opt_t
     Built-in double optional type. More...
     
    class  double_t
     Built-in double required type. More...
     
    class  enum_traits
     Provides various traits/attributes of an <enum> element. More...
     
    class  enum_value_traits
     Provides various traits/attributes of a <validValue> element. More...
     
    class  field_traits
     Provides various traits/attributes of a <field> element. More...
     
    class  float_opt_t
     Built-in float optional type. More...
     
    class  float_t
     Built-in float required type. More...
     
    class  group_traits
     Provides various traits/attributes of a <group> element. More...
     
    class  int16_opt_t
     Built-in int16 optional type. More...
     
    class  int16_t
     Built-in int16 required type. More...
     
    class  int32_opt_t
     Built-in int32 optional type. More...
     
    class  int32_t
     Built-in int32 required type. More...
     
    class  int64_opt_t
     Built-in int64 optional type. More...
     
    class  int64_t
     Built-in int64 required type. More...
     
    class  int8_opt_t
     Built-in int8 optional type. More...
     
    class  int8_t
     Built-in int8 required type. More...
     
    struct  is_enum
     Checks if T is an enumeration. More...
     
    class  message_traits
     Provides various traits/attributes of a <message> element. More...
     
    struct  nullopt_t
     Tag type used to initialize optional types with null value. More...
     
    class  schema_traits
     Provides various traits/attributes of a <messageSchema> element. More...
     
    class  set_choice_traits
     Provides various traits/attributes of a <choice> element. More...
     
    class  set_traits
     Provides various traits/attributes of a <set> element. More...
     
    struct  size_bytes_checked_result
     Result type of size_bytes_checked More...
     
    struct  traits_tag
     Maps representation type to its tag. More...
     
    class  type_traits
     Provides various traits and attributes of a <type> element. More...
     
    class  uint16_opt_t
     Built-in uint16 optional type. More...
     
    class  uint16_t
     Built-in uint16 required type. More...
     
    class  uint32_opt_t
     Built-in uint32 optional type. More...
     
    class  uint32_t
     Built-in uint32 required type. More...
     
    class  uint64_opt_t
     Built-in uint64 optional type. More...
     
    class  uint64_t
     Built-in uint64 required type. More...
     
    class  uint8_opt_t
     Built-in uint8 optional type. More...
     
    class  uint8_t
     Built-in uint8 required type. More...
     
    struct  unknown_enum_value_tag
     Tag for unknown enum values. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Concepts

    concept  array_type
     Concept for sbepp::is_array_type<T>::value
     
    concept  required_type
     Concept for sbepp::is_required_type<T>::value
     
    concept  optional_type
     Concept for sbepp::is_optional_type<T>::value
     
    concept  non_array_type
     Concept for sbepp::is_non_array_type<T>::value
     
    concept  type
     Concept for sbepp::is_type<T>::value
     
    concept  enumeration
     Concept for sbepp::is_enum<T>::value
     
    concept  set
     Concept for sbepp::is_set<T>::value
     
    concept  composite
     Concept for sbepp::is_composite<T>::value
     
    concept  message
     Concept for sbepp::is_message<T>::value
     
    concept  flat_group
     Concept for sbepp::is_flat_group<T>::value
     
    concept  nested_group
     Concept for sbepp::is_nested_group<T>::value
     
    concept  group
     Concept for sbepp::is_group<T>::value
     
    concept  data
     Concept for sbepp::is_data<T>::value
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using length_t = std::uint64_t
     Represents type_traits::length() value type.
     
    +using offset_t = std::uint64_t
     Represents offset trait value type, e.g. type_traits::offset()
     
    +using version_t = std::uint64_t
     Represents version trait value type, e.g. type_traits::since_version()
     
    +using schema_id_t = std::uint32_t
     Represents schema_traits::id() value type.
     
    +using message_id_t = std::uint32_t
     Represents message_traits::id() value type.
     
    +using block_length_t = std::uint64_t
     Represents block_length trait value type, e.g. message_traits::block_length()
     
    +using member_id_t = std::uint16_t
     Represents id trait value type, e.g. field_traits::id()
     
    +using choice_index_t = std::uint8_t
     Represents set_choice_traits::index() value type.
     
    +template<typename View >
    using byte_type_t = typename byte_type<View>::type
     Shortcut for byte_type<T>::type
     
    +template<typename ValueType >
    using traits_tag_t = typename traits_tag<ValueType>::type
     Shorthand for sbepp::traits_tag<T>::type
     
    +template<typename T >
    using is_array_type = typename detail::is_array_type_impl<T>::type
     Checks is T is an array type.
     
    +template<typename T >
    using is_required_type = detail::is_base_of_tmp<detail::required_base, T>
     Checks if T is a non-array required type.
     
    +template<typename T >
    using is_optional_type = detail::is_base_of_tmp<detail::optional_base, T>
     Checks if T is a non-array optional type.
     
    +template<typename T >
    using is_non_array_type
     Checks if T is a non-array type.
     
    +template<typename T >
    using is_type
     Checks if T is a type of any kind.
     
    +template<typename T >
    using is_set = detail::is_base_of_tmp<detail::bitset_base, T>
     Checks if T is a set.
     
    +template<typename T >
    using is_composite = detail::is_base_of_tmp<detail::composite_base, T>
     Checks if T is a composite.
     
    +template<typename T >
    using is_message = detail::is_base_of_tmp<detail::message_base, T>
     Checks if T is a message.
     
    +template<typename T >
    using is_flat_group = detail::is_base_of_tmp<detail::flat_group_base, T>
     Checks if T is a flat group.
     
    +template<typename T >
    using is_nested_group = detail::is_base_of_tmp<detail::nested_group_base, T>
     Checks if T is a nested group.
     
    +template<typename T >
    using is_group
     Checks if T is a group of any kind.
     
    +template<typename T >
    using is_group_entry = detail::is_base_of_tmp<detail::entry_base, T>
     Checks if T is a group entry.
     
    +template<typename T >
    using is_data = typename detail::is_data_impl<T>::type
     Checks if T is a data.
     
    + + + + + + + + + + +

    +Enumerations

    enum class  field_presence { required +, optional +, constant + }
     Represents presence trait value type, e.g. type_traits::presence() More...
     
    enum class  endian { little +, big +, native + }
     Represents schema_traits::byte_order() value type. When SBEPP_HAS_ENDIAN is 1, it's just an alias to std::endian. Requires SBEPP_BYTE_ORDER to be defined if endianness is not detected automatically. More...
     
    enum class  eos_null { none +, single +, all + }
     Represents number of null bytes that can be added after the end-of-string by detail::static_array_ref::assign_string() More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void assertion_failed (char const *expr, char const *function, char const *file, long line)
     When SBEPP_ASSERT_HANDLER or SBEPP_ENABLE_ASSERTS_WITH_HANDLER is defined, this function is called for failed assertions. Must be defined by the client.
     
    template<typename T >
    constexpr std::size_t size_bytes (T v) noexcept
     Returns the size of the underlying data represented by message/group/entry/data/composite view, including headers.
     
    template<typename T , typename Byte >
    constexpr std::size_t size_bytes (T v, cursor< Byte > c) noexcept
     Similar to sbepp::size_bytes but has constant complexity because it expects c to be set at the end of v. Useful to read the whole message and then get its size in constant time. Not applicable to composites.
     
    template<typename T >
    constexpr auto get_header (T v) noexcept -> decltype(v(detail::get_header_tag{}))
     Returns the header of a message/group.
     
    template<typename T >
    constexpr auto addressof (T v) noexcept -> decltype(v(detail::addressof_tag{}))
     Returns pointer to the underlying data referenced by a view.
     
    template<typename Enum >
    constexpr std::underlying_type< Enum >::type to_underlying (Enum e) noexcept
     Converts an enumeration to its underlying type. Equivalent to C++23 std::to_underlying()
     
    template<typename View >
    constexpr cursor< byte_type_t< View > > init_cursor (View view) noexcept
     Initializes cursor from a message/group view with the same byte type.
     
    template<typename View >
    constexpr cursor< typename std::add_const< byte_type_t< View > >::type > init_const_cursor (View view) noexcept
     Initializes cursor from a message/group view with const byte type.
     
    template<typename Message >
    constexpr auto fill_message_header (Message m) noexcept -> decltype(m(detail::fill_message_header_tag{}))
     Fill message header.
     
    template<typename Group , typename Size >
    constexpr auto fill_group_header (Group g, Size num_in_group) noexcept -> decltype(g(detail::fill_group_header_tag{}, num_in_group))
     Fill group header.
     
    template<template< typename > class View, typename Byte >
    constexpr View< Byte > make_view (Byte *ptr, const std::size_t size) noexcept
     Construct view from memory buffer.
     
    template<template< typename > class View, typename Byte >
    constexpr View< typename std::add_const< Byte >::type > make_const_view (Byte *ptr, const std::size_t size) noexcept
     Construct read-only view from memory buffer.
     
    template<typename Visitor , typename View , typename Cursor , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    constexpr Visitor && visit (View view, Cursor &c, Visitor &&visitor={})
     Visit a view using given cursor.
     
    template<typename Visitor , typename View , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    constexpr Visitor && visit (View view, Visitor &&visitor={})
     Visits a view.
     
    template<typename Visitor , typename Set >
    constexpr Visitor && visit (Set s, Visitor &&visitor={})
     Visits set choices.
     
    template<typename Visitor , typename Enum >
    constexpr Visitor && visit (Enum e, Visitor &&visitor={})
     Visits enum value.
     
    template<typename Visitor , typename View , typename Cursor , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    constexpr Visitor && visit_children (View view, Cursor &c, Visitor &&visitor={})
     Visit view's children using provided cursor.
     
    template<typename Visitor , typename View , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    constexpr Visitor && visit_children (View view, Visitor &&visitor={})
     Visit view's children.
     
    template<typename E , typename = detail::enable_if_t<is_enum<E>::value>>
    constexpr const char * enum_to_string (const E e) noexcept
     Converts enum to string.
     
    template<typename Set , typename Visitor >
    constexpr auto visit_set (const Set s, Visitor &&visitor) noexcept -> decltype(s(detail::visit_set_tag{}, std::forward< Visitor >(visitor)))
     Visits set choices in order of their declaration.
     
    template<typename View >
    constexpr size_bytes_checked_result size_bytes_checked (View view, std::size_t size) noexcept
     Calculate view size with additional safety checks.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    constexpr default_init_t default_init {}
     helper to pass default_init_t to dynamic_array_ref::resize().
     
    constexpr nullopt_t nullopt {0}
     Helper constant used to initialize optional types with null value.
     
    +template<typename T >
    constexpr auto is_array_type_v = is_array_type<T>::value
     Shorthand for sbepp::is_array_type<T>::value
     
    +template<typename T >
    constexpr auto is_required_type_v = is_required_type<T>::value
     Shorthand for sbepp::is_required_type<T>::value
     
    +template<typename T >
    constexpr auto is_optional_type_v = is_optional_type<T>::value
     Shorthand for sbepp::is_optional_type<T>::value
     
    +template<typename T >
    constexpr auto is_non_array_type_v = is_non_array_type<T>::value
     Shorthand for sbepp::is_non_array_type<T>::value
     
    +template<typename T >
    constexpr auto is_type_v = is_type<T>::value
     Shorthand for sbepp::is_type<T>::value
     
    +template<typename T >
    constexpr auto is_enum_v = is_enum<T>::value
     Shorthand for sbepp::is_enum<T>::value
     
    +template<typename T >
    constexpr auto is_set_v = is_set<T>::value
     Shorthand for sbepp::is_set<T>::value
     
    +template<typename T >
    constexpr auto is_composite_v = is_composite<T>::value
     Shorthand for sbepp::is_composite<T>::value
     
    +template<typename T >
    constexpr auto is_message_v = is_message<T>::value
     Shorthand for sbepp::is_message<T>::value
     
    +template<typename T >
    constexpr auto is_flat_group_v = is_flat_group<T>::value
     Shorthand for sbepp::is_flat_group<T>::value
     
    +template<typename T >
    constexpr auto is_nested_group_v = is_nested_group<T>::value
     Shorthand for sbepp::is_nested_group<T>::value
     
    +template<typename T >
    constexpr auto is_group_v = is_group<T>::value
     Shorthand for sbepp::is_group<T>::value
     
    +template<typename T >
    constexpr auto is_data_v = is_data<T>::value
     Shorthand for sbepp::is_data<T>::value
     
    +

    Detailed Description

    +

    The main sbepp namespace.

    +

    Enumeration Type Documentation

    + +

    ◆ endian

    + +
    +
    + + + + + +
    + + + + +
    enum class sbepp::endian
    +
    +strong
    +
    + +

    Represents schema_traits::byte_order() value type. When SBEPP_HAS_ENDIAN is 1, it's just an alias to std::endian. Requires SBEPP_BYTE_ORDER to be defined if endianness is not detected automatically.

    + + + + +
    Enumerator
    little 

    little-endian

    +
    big 

    big-endian

    +
    native 

    current platform endianness

    +
    + +
    +
    + +

    ◆ eos_null

    + +
    +
    + + + + + +
    + + + + +
    enum class sbepp::eos_null
    +
    +strong
    +
    + +

    Represents number of null bytes that can be added after the end-of-string by detail::static_array_ref::assign_string()

    + + + + +
    Enumerator
    none 

    Bytes after the last string character will not be touched. Useful when underlying buffer is zero-filled.

    +
    single 

    Single byte after the last string character will be set to null. Useful when decoder will look for the first null byte to calculate string length.

    +
    all 

    All bytes after the last string character will be set to null.

    +
    + +
    +
    + +

    ◆ field_presence

    + +
    +
    + + + + + +
    + + + + +
    enum class sbepp::field_presence
    +
    +strong
    +
    + +

    Represents presence trait value type, e.g. type_traits::presence()

    + + + + +
    Enumerator
    required 

    field is required

    +
    optional 

    field is optional

    +
    constant 

    field is constant

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ addressof()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    constexpr auto sbepp::addressof (T v) -> decltype(v(detail::addressof_tag{})) +
    +
    +constexprnoexcept
    +
    + +

    Returns pointer to the underlying data referenced by a view.

    +
    Parameters
    + + +
    vview
    +
    +
    +
    Returns
    pointer to the underlying data
    + +
    +
    + +

    ◆ assertion_failed()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void sbepp::assertion_failed (char const * expr,
    char const * function,
    char const * file,
    long line )
    +
    + +

    When SBEPP_ASSERT_HANDLER or SBEPP_ENABLE_ASSERTS_WITH_HANDLER is defined, this function is called for failed assertions. Must be defined by the client.

    +
    Parameters
    + + + + + +
    exprexpression that failed
    functionenclosing function name
    filefile name
    lineline number
    +
    +
    + +
    +
    + +

    ◆ enum_to_string()

    + +
    +
    +
    +template<typename E , typename = detail::enable_if_t<is_enum<E>::value>>
    + + + + + +
    + + + + + + + +
    constexpr const char * sbepp::enum_to_string (const E e)
    +
    +constexprnoexcept
    +
    + +

    Converts enum to string.

    +
    Parameters
    + + +
    eenum to convert
    +
    +
    +
    Returns
    pointer to a null-terminated string representing an enumerator's name or nullptr if e holds unknown value
    +
    Deprecated
    Deprecated in favor of sbepp::visit, will be removed in the next major update.
    + +
    +
    + +

    ◆ fill_group_header()

    + +
    +
    +
    +template<typename Group , typename Size >
    + + + + + +
    + + + + + + + + + + + +
    constexpr auto sbepp::fill_group_header (Group g,
    Size num_in_group ) -> decltype(g(detail::fill_group_header_tag{}, num_in_group)) +
    +
    +constexprnoexcept
    +
    + +

    Fill group header.

    +

    Automatically fills these fields in group header:

      +
    • blockLength
    • +
    • numInGroup
    • +
    • numGroups (if exists in header)
    • +
    • numVarDataFields (if exists in header)
    • +
    +
    Parameters
    + + + +
    ggroup
    num_in_groupnumber if entries in group
    +
    +
    +
    Returns
    group header
    + +
    +
    + +

    ◆ fill_message_header()

    + +
    +
    +
    +template<typename Message >
    + + + + + +
    + + + + + + + +
    constexpr auto sbepp::fill_message_header (Message m) -> decltype(m(detail::fill_message_header_tag{})) +
    +
    +constexprnoexcept
    +
    + +

    Fill message header.

    +

    Automatically fills these fields in message header:

      +
    • schemaId
    • +
    • templateId
    • +
    • version
    • +
    • blockLength
    • +
    • numGroups (if exists in header)
    • +
    • numVarDataFields (if exists in header)
    • +
    +
    Parameters
    + + +
    mmessage
    +
    +
    +
    Returns
    message header
    + +
    +
    + +

    ◆ get_header()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    constexpr auto sbepp::get_header (T v) -> decltype(v(detail::get_header_tag{})) +
    +
    +constexprnoexcept
    +
    + +

    Returns the header of a message/group.

    +
    Parameters
    + + +
    vmessage/group view
    +
    +
    +
    Returns
    header composite view
    + +
    +
    + +

    ◆ init_const_cursor()

    + +
    +
    +
    +template<typename View >
    + + + + + +
    + + + + + + + +
    constexpr cursor< typename std::add_const< byte_type_t< View > >::type > sbepp::init_const_cursor (View view)
    +
    +constexprnoexcept
    +
    + +

    Initializes cursor from a message/group view with const byte type.

    +

    Example:

    schema::messages::msg1<char> {ptr, size};
    + +
    auto value = m.field(c);
    +
    m.field(1, c); // error: cursor has const-qualified byte type
    +
    constexpr cursor< typename std::add_const< byte_type_t< View > >::type > init_const_cursor(View view) noexcept
    Initializes cursor from a message/group view with const byte type.
    Definition sbepp.hpp:2869
    +
    Parameters
    + + +
    viewmessage or group view
    +
    +
    +
    Returns
    initialized cursor
    + +
    +
    + +

    ◆ init_cursor()

    + +
    +
    +
    +template<typename View >
    + + + + + +
    + + + + + + + +
    constexpr cursor< byte_type_t< View > > sbepp::init_cursor (View view)
    +
    +constexprnoexcept
    +
    + +

    Initializes cursor from a message/group view with the same byte type.

    +

    Example:

    schema::messages::msg1<char> {ptr, size};
    +
    auto c = sbepp::init_cursor(m);
    +
    auto value = m.field(c);
    +
    constexpr cursor< byte_type_t< View > > init_cursor(View view) noexcept
    Initializes cursor from a message/group view with the same byte type.
    Definition sbepp.hpp:2846
    +
    Parameters
    + + +
    viewmessage or group view
    +
    +
    +
    Returns
    initialized cursor
    + +
    +
    + +

    ◆ make_const_view()

    + +
    +
    +
    +template<template< typename > class View, typename Byte >
    + + + + + +
    + + + + + + + + + + + +
    constexpr View< typename std::add_const< Byte >::type > sbepp::make_const_view (Byte * ptr,
    const std::size_t size )
    +
    +constexprnoexcept
    +
    + +

    Construct read-only view from memory buffer.

    +

    View's byte type will be a const-qualified buffer byte type. Example:

    std::array<char, N> buf;
    +
    // creates some_schema::messages::msg1<const char>
    +
    auto m = sbepp::make_view<some_schema::messages::msg1>(
    +
    buf.data(), buf.size());
    +
    Template Parameters
    + + + +
    Viewview template
    Bytebyte type
    +
    +
    +
    Parameters
    + + + +
    ptrbuffer start
    sizebuffer size
    +
    +
    +
    Returns
    constructed view
    + +
    +
    + +

    ◆ make_view()

    + +
    +
    +
    +template<template< typename > class View, typename Byte >
    + + + + + +
    + + + + + + + + + + + +
    constexpr View< Byte > sbepp::make_view (Byte * ptr,
    const std::size_t size )
    +
    +constexprnoexcept
    +
    + +

    Construct view from memory buffer.

    +

    View will have the same byte type as provided buffer. Example:

    std::array<char, N> buf;
    +
    auto m = sbepp::make_view<some_schema::messages::msg1>(
    +
    buf.data(), buf.size()); // creates some_schema::messages::msg1<char>
    +
    Template Parameters
    + + + +
    Viewview template
    Bytebyte type
    +
    +
    +
    Parameters
    + + + +
    ptrbuffer start
    sizebuffer size
    +
    +
    +
    Returns
    constructed view
    + +
    +
    + +

    ◆ size_bytes() [1/2]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    constexpr std::size_t sbepp::size_bytes (T v)
    +
    +constexprnoexcept
    +
    + +

    Returns the size of the underlying data represented by message/group/entry/data/composite view, including headers.

    +

    In general case, for message/group/entry, the complexity is O(a^n) where n is the depth of the level. For composites and data it's O(1).

    +
    Parameters
    + + +
    vview object
    +
    +
    +
    Returns
    size in bytes
    + +
    +
    + +

    ◆ size_bytes() [2/2]

    + +
    +
    +
    +template<typename T , typename Byte >
    + + + + + +
    + + + + + + + + + + + +
    constexpr std::size_t sbepp::size_bytes (T v,
    cursor< Byte > c )
    +
    +constexprnoexcept
    +
    + +

    Similar to sbepp::size_bytes but has constant complexity because it expects c to be set at the end of v. Useful to read the whole message and then get its size in constant time. Not applicable to composites.

    +
    Parameters
    + + + +
    vview object
    ccursor
    +
    +
    +
    Returns
    size in bytes
    + +
    +
    + +

    ◆ size_bytes_checked()

    + +
    +
    +
    +template<typename View >
    + + + + + +
    + + + + + + + + + + + +
    constexpr size_bytes_checked_result sbepp::size_bytes_checked (View view,
    std::size_t size )
    +
    +constexprnoexcept
    +
    + +

    Calculate view size with additional safety checks.

    +

    Similar to size_bytes() but stops if view cannot fit into the given size. Useful to check that incoming message is fully contained within given buffer.

    +
    Parameters
    + + + +
    viewmessage or group view
    sizebuffer size
    +
    +
    + +
    +
    + +

    ◆ to_underlying()

    + +
    +
    +
    +template<typename Enum >
    + + + + + +
    + + + + + + + +
    constexpr std::underlying_type< Enum >::type sbepp::to_underlying (Enum e)
    +
    +constexprnoexcept
    +
    + +

    Converts an enumeration to its underlying type. Equivalent to C++23 std::to_underlying()

    +
    Parameters
    + + +
    eenumerator
    +
    +
    +
    Returns
    enumerator's underlying value
    + +
    +
    + +

    ◆ visit() [1/4]

    + +
    +
    +
    +template<typename Visitor , typename Enum >
    + + + + + +
    + + + + + + + + + + + +
    constexpr Visitor && sbepp::visit (Enum e,
    Visitor && visitor = {} )
    +
    +constexpr
    +
    + +

    Visits enum value.

    +
    Template Parameters
    + + +
    Visitorvisitor type
    +
    +
    +
    Parameters
    + + + +
    eenum value to visit
    visitorvisitor instance, must have on_enum_value member function with the signature equivalent to void on_enum_value(Enum, EnumValueTag)
    +
    +
    +
    Returns
    forwarded reference to visitor
    +

    If e is one of validValue-s from schema, calls visitor.on_enum_value(e, EnumValueTag{}) where EnumValueTag is a matched value's tag that can be passed to enum_value_traits. Otherwise, calls visitor.on_enum_value(e, sbepp::unknown_enum_value_tag{}).

    +
    See also
    Visit API
    + +
    +
    + +

    ◆ visit() [2/4]

    + +
    +
    +
    +template<typename Visitor , typename Set >
    + + + + + +
    + + + + + + + + + + + +
    constexpr Visitor && sbepp::visit (Set s,
    Visitor && visitor = {} )
    +
    +constexpr
    +
    + +

    Visits set choices.

    +
    Template Parameters
    + + +
    Visitorvisitor type
    +
    +
    +
    Parameters
    + + + +
    sset to visit
    visitorvisitor instance, must have on_set_choice member function with the signature equivalent to void on_set_choice(bool, ChoiceTag).
    +
    +
    +
    Returns
    forwarded reference to visitor
    +

    Visits set choices in order of their schema declaration. For each choice calls visitor.on_set_choice(choice_value, ChoiceTag{}), where choice_value is the bool value of a choice and ChoiceTag is its tag that can be passed to set_choice_traits.

    +
    See also
    Visit API
    + +
    +
    + +

    ◆ visit() [3/4]

    + +
    +
    +
    +template<typename Visitor , typename View , typename Cursor , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    + + + + + +
    + + + + + + + + + + + + + + + + +
    constexpr Visitor && sbepp::visit (View view,
    Cursor & c,
    Visitor && visitor = {} )
    +
    +constexpr
    +
    + +

    Visit a view using given cursor.

    +
    Template Parameters
    + + +
    Visitorvisitor type
    +
    +
    +
    Parameters
    + + + + +
    viewmessage, group, entry or composite view
    ccursor, passed as is to visitor
    visitorvisitor
    +
    +
    +
    Returns
    forwarded reference to visitor
    +
    See also
    Visit API
    + +
    +
    + +

    ◆ visit() [4/4]

    + +
    +
    +
    +template<typename Visitor , typename View , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    + + + + + +
    + + + + + + + + + + + +
    constexpr Visitor && sbepp::visit (View view,
    Visitor && visitor = {} )
    +
    +constexpr
    +
    + +

    Visits a view.

    +
    Template Parameters
    + + +
    Visitorvisitor type
    +
    +
    +
    Parameters
    + + + +
    viewmessage, group, entry or composite view
    visitorvisitor
    +
    +
    +
    Returns
    forwarded reference to visitor
    +
    See also
    Visit API
    + +
    +
    + +

    ◆ visit_children() [1/2]

    + +
    +
    +
    +template<typename Visitor , typename View , typename Cursor , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    + + + + + +
    + + + + + + + + + + + + + + + + +
    constexpr Visitor && sbepp::visit_children (View view,
    Cursor & c,
    Visitor && visitor = {} )
    +
    +constexpr
    +
    + +

    Visit view's children using provided cursor.

    +
    Template Parameters
    + + +
    Visitorvisitor type
    +
    +
    +
    Parameters
    + + + + +
    viewmessage, group, entry or composite view
    ccursor, ignored for composites, otherwise must point to the first view's child
    visitorvisitor
    +
    +
    +
    Returns
    forwarded reference to visitor
    +
    See also
    Visit API
    + +
    +
    + +

    ◆ visit_children() [2/2]

    + +
    +
    +
    +template<typename Visitor , typename View , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    + + + + + +
    + + + + + + + + + + + +
    constexpr Visitor && sbepp::visit_children (View view,
    Visitor && visitor = {} )
    +
    +constexpr
    +
    + +

    Visit view's children.

    +
    Template Parameters
    + + +
    Visitorvisitor type
    +
    +
    +
    Parameters
    + + + +
    viewmessage, group, entry or composite view
    visitorvisitor
    +
    +
    +
    Returns
    forwarded reference to visitor
    +
    See also
    Visit API
    + +
    +
    + +

    ◆ visit_set()

    + +
    +
    +
    +template<typename Set , typename Visitor >
    + + + + + +
    + + + + + + + + + + + +
    constexpr auto sbepp::visit_set (const Set s,
    Visitor && visitor ) -> decltype(s(detail::visit_set_tag{}, std::forward<Visitor>(visitor))) +
    +
    +constexprnoexcept
    +
    + +

    Visits set choices in order of their declaration.

    +
    Parameters
    + + + +
    sset to visit
    visitorvisitor. Must have signature void (bool choice_value, const char* choice_name)
    +
    +
    +
    Returns
    forwarded reference to visitor
    +
    Deprecated
    Deprecated in favor of sbepp::visit, will be removed in the next major update.
    + +
    +
    +

    Variable Documentation

    + +

    ◆ default_init

    + +
    +
    + + + + + +
    + + + + +
    constexpr default_init_t sbepp::default_init {}
    +
    +inlineconstexpr
    +
    + +

    helper to pass default_init_t to dynamic_array_ref::resize().

    +

    Example: ref.resize(n, sbepp::default_init);.

    + +
    +
    + +

    ◆ nullopt

    + +
    +
    + + + + + +
    + + + + +
    constexpr nullopt_t sbepp::nullopt {0}
    +
    +inlineconstexpr
    +
    + +

    Helper constant used to initialize optional types with null value.

    +

    Example: msg.optionalField(sbepp::nullopt);

    + +
    +
    +
    +
    + + + + diff --git a/1.4.1/namespacesbepp.js b/1.4.1/namespacesbepp.js new file mode 100644 index 0000000..1382ea9 --- /dev/null +++ b/1.4.1/namespacesbepp.js @@ -0,0 +1,138 @@ +var namespacesbepp = +[ + [ "cursor_ops", "namespacesbepp_1_1cursor__ops.html", [ + [ "dont_move", "namespacesbepp_1_1cursor__ops.html#a45f332328f49269fd0117bca732e7f36", null ], + [ "init", "namespacesbepp_1_1cursor__ops.html#a5ea08b77415fb7c92bf38fe43f7556ac", null ], + [ "init_dont_move", "namespacesbepp_1_1cursor__ops.html#ac01ae8f083e748df66ee66514e26cb98", null ], + [ "skip", "namespacesbepp_1_1cursor__ops.html#a1ba1e2668d8e1886dfe03a4f5ddc1eea", null ] + ] ], + [ "detail", "namespacesbepp_1_1detail.html", "namespacesbepp_1_1detail" ], + [ "byte_type", "structsbepp_1_1byte__type.html", "structsbepp_1_1byte__type" ], + [ "char_opt_t", "classsbepp_1_1char__opt__t.html", null ], + [ "char_t", "classsbepp_1_1char__t.html", null ], + [ "composite_traits", "classsbepp_1_1composite__traits.html", "classsbepp_1_1composite__traits" ], + [ "cursor", "classsbepp_1_1cursor.html", "classsbepp_1_1cursor" ], + [ "data_traits", "classsbepp_1_1data__traits.html", "classsbepp_1_1data__traits" ], + [ "default_init_t", "structsbepp_1_1default__init__t.html", null ], + [ "double_opt_t", "classsbepp_1_1double__opt__t.html", null ], + [ "double_t", "classsbepp_1_1double__t.html", null ], + [ "enum_traits", "classsbepp_1_1enum__traits.html", "classsbepp_1_1enum__traits" ], + [ "enum_value_traits", "classsbepp_1_1enum__value__traits.html", null ], + [ "field_traits", "classsbepp_1_1field__traits.html", "classsbepp_1_1field__traits" ], + [ "float_opt_t", "classsbepp_1_1float__opt__t.html", null ], + [ "float_t", "classsbepp_1_1float__t.html", null ], + [ "group_traits", "classsbepp_1_1group__traits.html", "classsbepp_1_1group__traits" ], + [ "int16_opt_t", "classsbepp_1_1int16__opt__t.html", null ], + [ "int16_t", "classsbepp_1_1int16__t.html", null ], + [ "int32_opt_t", "classsbepp_1_1int32__opt__t.html", null ], + [ "int32_t", "classsbepp_1_1int32__t.html", null ], + [ "int64_opt_t", "classsbepp_1_1int64__opt__t.html", null ], + [ "int64_t", "classsbepp_1_1int64__t.html", null ], + [ "int8_opt_t", "classsbepp_1_1int8__opt__t.html", null ], + [ "int8_t", "classsbepp_1_1int8__t.html", null ], + [ "is_enum", "structsbepp_1_1is__enum.html", null ], + [ "message_traits", "classsbepp_1_1message__traits.html", "classsbepp_1_1message__traits" ], + [ "nullopt_t", "structsbepp_1_1nullopt__t.html", null ], + [ "schema_traits", "classsbepp_1_1schema__traits.html", "classsbepp_1_1schema__traits" ], + [ "set_choice_traits", "classsbepp_1_1set__choice__traits.html", null ], + [ "set_traits", "classsbepp_1_1set__traits.html", "classsbepp_1_1set__traits" ], + [ "size_bytes_checked_result", "structsbepp_1_1size__bytes__checked__result.html", "structsbepp_1_1size__bytes__checked__result" ], + [ "traits_tag", "structsbepp_1_1traits__tag.html", "structsbepp_1_1traits__tag" ], + [ "type_traits", "classsbepp_1_1type__traits.html", "classsbepp_1_1type__traits" ], + [ "uint16_opt_t", "classsbepp_1_1uint16__opt__t.html", null ], + [ "uint16_t", "classsbepp_1_1uint16__t.html", null ], + [ "uint32_opt_t", "classsbepp_1_1uint32__opt__t.html", null ], + [ "uint32_t", "classsbepp_1_1uint32__t.html", null ], + [ "uint64_opt_t", "classsbepp_1_1uint64__opt__t.html", null ], + [ "uint64_t", "classsbepp_1_1uint64__t.html", null ], + [ "uint8_opt_t", "classsbepp_1_1uint8__opt__t.html", null ], + [ "uint8_t", "classsbepp_1_1uint8__t.html", null ], + [ "unknown_enum_value_tag", "structsbepp_1_1unknown__enum__value__tag.html", null ], + [ "array_type", "conceptsbepp_1_1array__type.html", null ], + [ "required_type", "conceptsbepp_1_1required__type.html", null ], + [ "optional_type", "conceptsbepp_1_1optional__type.html", null ], + [ "non_array_type", "conceptsbepp_1_1non__array__type.html", null ], + [ "type", "conceptsbepp_1_1type.html", null ], + [ "enumeration", "conceptsbepp_1_1enumeration.html", null ], + [ "set", "conceptsbepp_1_1set.html", null ], + [ "composite", "conceptsbepp_1_1composite.html", null ], + [ "message", "conceptsbepp_1_1message.html", null ], + [ "flat_group", "conceptsbepp_1_1flat__group.html", null ], + [ "nested_group", "conceptsbepp_1_1nested__group.html", null ], + [ "group", "conceptsbepp_1_1group.html", null ], + [ "data", "conceptsbepp_1_1data.html", null ], + [ "block_length_t", "namespacesbepp.html#ac0fdcdd3dfa93ad4aaac66379da7b0c5", null ], + [ "byte_type_t", "namespacesbepp.html#a62faab2402f172fb1d0dde766f51b3d7", null ], + [ "choice_index_t", "namespacesbepp.html#a55be97e1f98cb33e38dfa96e8309179c", null ], + [ "is_array_type", "namespacesbepp.html#af543fe4e16fb809febcbeb4f8888bdae", null ], + [ "is_composite", "namespacesbepp.html#aff757cd0a709b464f626ae509e6e6cd3", null ], + [ "is_data", "namespacesbepp.html#a5b8bb415061e959eb3a73e76af382e49", null ], + [ "is_flat_group", "namespacesbepp.html#a19b7ab3bd5ff1a76a7d384e17f0a3cf7", null ], + [ "is_group", "namespacesbepp.html#a18ca877253ba8214e9fd1ab0dcafe691", null ], + [ "is_group_entry", "namespacesbepp.html#ad66e5b64108fc65682c621ac8c5a471b", null ], + [ "is_message", "namespacesbepp.html#a6b570920b082c2bc629036cfeef4af57", null ], + [ "is_nested_group", "namespacesbepp.html#a664c938df34175bff7de36e45843586e", null ], + [ "is_non_array_type", "namespacesbepp.html#aa2eb4eb5e6a8df682c49fe7f59fe0fb3", null ], + [ "is_optional_type", "namespacesbepp.html#a0d85db6739fbad1303022f741bc525ad", null ], + [ "is_required_type", "namespacesbepp.html#a1595d120959dfb84aa0667436e3e628a", null ], + [ "is_set", "namespacesbepp.html#a9a993b21b185033d9dbc71b7452ee0ca", null ], + [ "is_type", "namespacesbepp.html#a9b69b91021cb0ec2e5cba1f1d105fc60", null ], + [ "length_t", "namespacesbepp.html#aba708f43d3386d2d1718a7011721d5d1", null ], + [ "member_id_t", "namespacesbepp.html#aa9dc204d8524610e7a756133d7538949", null ], + [ "message_id_t", "namespacesbepp.html#a8f0e0669b7e7f7c4b3849a0418225cb6", null ], + [ "offset_t", "namespacesbepp.html#a8dafc5b7c26483f5e998bb7a4e87b406", null ], + [ "schema_id_t", "namespacesbepp.html#ad770bcda6122b136d640fadfb0242062", null ], + [ "traits_tag_t", "namespacesbepp.html#a0ddc0b9ce9e876a0ac772b4d1af64b4b", null ], + [ "version_t", "namespacesbepp.html#a97309329a3ef93149d698a0c5a9da6ba", null ], + [ "endian", "namespacesbepp.html#af318e06df8931dd69380221b420caec5", [ + [ "little", "namespacesbepp.html#af318e06df8931dd69380221b420caec5aaae6635e044ac56046b2893a529b5114", null ], + [ "big", "namespacesbepp.html#af318e06df8931dd69380221b420caec5ad861877da56b8b4ceb35c8cbfdf65bb4", null ], + [ "native", "namespacesbepp.html#af318e06df8931dd69380221b420caec5a8e5f3adee38c8fccc13c1f3be0143796", null ] + ] ], + [ "eos_null", "namespacesbepp.html#a0ee177accf7d675a768848bb29e1512f", [ + [ "none", "namespacesbepp.html#a0ee177accf7d675a768848bb29e1512fa334c4a4c42fdb79d7ebc3e73b517e6f8", null ], + [ "single", "namespacesbepp.html#a0ee177accf7d675a768848bb29e1512fadd5c07036f2975ff4bce568b6511d3bc", null ], + [ "all", "namespacesbepp.html#a0ee177accf7d675a768848bb29e1512faa181a603769c1f98ad927e7367c7aa51", null ] + ] ], + [ "field_presence", "namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530", [ + [ "required", "namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530aac67ede5a84eb5a1add7ff4440e9a485", null ], + [ "optional", "namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530ad57c24f3fe52d16e7169b912dd647f0d", null ], + [ "constant", "namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530a617ac08757d38a5a7ed91c224f0e90a0", null ] + ] ], + [ "addressof", "namespacesbepp.html#a870241790cb5759575b9f57d654392c2", null ], + [ "assertion_failed", "namespacesbepp.html#a9005f92162d3e00f4c4d1bd2e311f8b0", null ], + [ "enum_to_string", "namespacesbepp.html#a6b2d51af3f026b165fa40fe1d7ab19db", null ], + [ "fill_group_header", "namespacesbepp.html#a7d29b37dfc83150ae34eaaf94dd4ba4c", null ], + [ "fill_message_header", "namespacesbepp.html#a3b5dd3446b423149a101530f056bee64", null ], + [ "get_header", "namespacesbepp.html#a12bbc67580e3f4bb2a0299033f01818d", null ], + [ "init_const_cursor", "namespacesbepp.html#a399a5ac768befed2dc73396364eaa0c3", null ], + [ "init_cursor", "namespacesbepp.html#a125f1fbb9faadde1515f7822a7b6420f", null ], + [ "make_const_view", "namespacesbepp.html#ae29503045a371b895af63f6ac6e0f3b9", null ], + [ "make_view", "namespacesbepp.html#a0dda436c46165f2419bb31e450e3b5b5", null ], + [ "size_bytes", "namespacesbepp.html#a9346fd507c2d3760ac40032180d1a7a6", null ], + [ "size_bytes", "namespacesbepp.html#a822c5047d62cddfb04c5ab2148ee9391", null ], + [ "size_bytes_checked", "namespacesbepp.html#abd9c1efb3c96d6fa71d1156811b47fa4", null ], + [ "to_underlying", "namespacesbepp.html#a0d0a0af58987f30ee37fda64c15cc316", null ], + [ "visit", "namespacesbepp.html#abf05c2c5e3e81c441cce4db02c0c642b", null ], + [ "visit", "namespacesbepp.html#a3dafbabb41e8a71abde1535551de2c6d", null ], + [ "visit", "namespacesbepp.html#a47c1cd81154bc5c56524604f74d52d27", null ], + [ "visit", "namespacesbepp.html#a79950b0d08ddf3eafafb25a5693a6e2a", null ], + [ "visit_children", "namespacesbepp.html#a23abc2b6b892aea5b2b7f6dde6c24e69", null ], + [ "visit_children", "namespacesbepp.html#a306622dcac701f3c76abd3ea7c2902b6", null ], + [ "visit_set", "namespacesbepp.html#aa253364a4276b55c0a157aefaa185c37", null ], + [ "default_init", "namespacesbepp.html#aa2d011e14996368bdea31360b2fa674e", null ], + [ "is_array_type_v", "namespacesbepp.html#a1c24c2579e75aa3d0f8aa3d5ccabe456", null ], + [ "is_composite_v", "namespacesbepp.html#a052275a8856aec04d0b1433232a2f9a2", null ], + [ "is_data_v", "namespacesbepp.html#ae3c9b91bd3b6adf9969dfb572b510a24", null ], + [ "is_enum_v", "namespacesbepp.html#a261d44987027bd14f3a4ad1588cf1815", null ], + [ "is_flat_group_v", "namespacesbepp.html#a0e85c1f28d0a4792da99a7d520728d6b", null ], + [ "is_group_v", "namespacesbepp.html#a9ef51bb840527f9e8dd92f611364301a", null ], + [ "is_message_v", "namespacesbepp.html#abe6cd213ddfa41e39a2ec7ea540f62dc", null ], + [ "is_nested_group_v", "namespacesbepp.html#ae12b3a8d700756a267b5b9bd97ae56ed", null ], + [ "is_non_array_type_v", "namespacesbepp.html#a42ff955184242e2b19d1dfa422abd834", null ], + [ "is_optional_type_v", "namespacesbepp.html#ab0e51c934bf5a874f859d0f00f7e7c8a", null ], + [ "is_required_type_v", "namespacesbepp.html#a08918c20bbce610dab6ae9e0c9a14cac", null ], + [ "is_set_v", "namespacesbepp.html#ad3f88b2d3b60123eb13d33e0cde002bd", null ], + [ "is_type_v", "namespacesbepp.html#a0b1ce1456ccf22894e9ba47c4becb046", null ], + [ "nullopt", "namespacesbepp.html#a1ca10df8379b54c5c54a67841e3d8047", null ] +]; \ No newline at end of file diff --git a/1.4.1/namespacesbepp_1_1cursor__ops.html b/1.4.1/namespacesbepp_1_1cursor__ops.html new file mode 100644 index 0000000..1ca5cc2 --- /dev/null +++ b/1.4.1/namespacesbepp_1_1cursor__ops.html @@ -0,0 +1,313 @@ + + + + + + + + +sbepp: sbepp::cursor_ops Namespace Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp::cursor_ops Namespace Reference
    +
    +
    + +

    Contains cursor wrappers which allow more precise control over its position. +More...

    + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename Byte >
    constexpr detail::init_cursor_wrapper< Byte > init (cursor< Byte > &c) noexcept
     Returns a wrapper which will initialize the cursor when it's used and advance after the usage.
     
    template<typename Byte >
    constexpr detail::dont_move_cursor_wrapper< Byte > dont_move (cursor< Byte > &c) noexcept
     Returns a wrapper which doesn't advance the cursor when it's used.
     
    template<typename Byte >
    constexpr detail::init_dont_move_cursor_wrapper< Byte > init_dont_move (cursor< Byte > &c) noexcept
     Returns a wrapper which initializes the cursor but doesn't move it. Behaves like a combination of init() and dont_move().
     
    template<typename Byte >
    constexpr detail::skip_cursor_wrapper< Byte > skip (cursor< Byte > &c) noexcept
     Returns a wrapper which moves the cursor to the end of field/group/data without returning the accessed value.
     
    +

    Detailed Description

    +

    Contains cursor wrappers which allow more precise control over its position.

    +

    Function Documentation

    + +

    ◆ dont_move()

    + +
    +
    +
    +template<typename Byte >
    + + + + + +
    + + + + + + + +
    constexpr detail::dont_move_cursor_wrapper< Byte > sbepp::cursor_ops::dont_move (cursor< Byte > & c)
    +
    +constexprnoexcept
    +
    + +

    Returns a wrapper which doesn't advance the cursor when it's used.

    +

    Allows to access field/group/data more than once using cursor API. Useful to read and write the same field or to write data member. Example:

    schema::messages::msg1<char> m{ptr, size};
    +
    auto c = sbepp::init_cursor(m);
    +
    // use but don't advance, otherwise we can't access `field` again
    +
    auto value = m.field(sbepp::cursor_ops::dont_move(c));
    +
    m.field(*value + 1, c);
    +
    // since data has unknown size, without `dont_move` cursor will be moved
    +
    // to a random position
    +
    auto d = m.data(sbepp::cursor_ops::dont_move(c));
    +
    d.resize(1); // init data somehow
    +
    m.data(c); // advance the cursor
    +
    constexpr detail::dont_move_cursor_wrapper< Byte > dont_move(cursor< Byte > &c) noexcept
    Returns a wrapper which doesn't advance the cursor when it's used.
    Definition sbepp.hpp:1694
    +
    constexpr cursor< byte_type_t< View > > init_cursor(View view) noexcept
    Initializes cursor from a message/group view with the same byte type.
    Definition sbepp.hpp:2846
    +
    Parameters
    + + +
    coriginal cursor
    +
    +
    +
    Returns
    unspecified cursor wrapper
    + +
    +
    + +

    ◆ init()

    + +
    +
    +
    +template<typename Byte >
    + + + + + +
    + + + + + + + +
    constexpr detail::init_cursor_wrapper< Byte > sbepp::cursor_ops::init (cursor< Byte > & c)
    +
    +constexprnoexcept
    +
    + +

    Returns a wrapper which will initialize the cursor when it's used and advance after the usage.

    +

    Allows to start using cursor API from any field/group/data. Example:

    schema::messages::msg1<char> m{ptr, size};
    +
    sbepp::cursor<char> c; // Note: not initialized
    +
    // initialize, use, advance
    +
    auto first = m.firstField(sbepp::cursor_ops::init(c));
    +
    auto second = m.secondField(c); // continue as usual
    +
    Represents cursor which is used in cursor-based API. Clients should not use undocumented methods.
    Definition sbepp.hpp:783
    +
    constexpr detail::init_cursor_wrapper< Byte > init(cursor< Byte > &c) noexcept
    Returns a wrapper which will initialize the cursor when it's used and advance after the usage.
    Definition sbepp.hpp:1665
    +
    Parameters
    + + +
    coriginal cursor
    +
    +
    +
    Returns
    unspecified cursor wrapper
    + +
    +
    + +

    ◆ init_dont_move()

    + +
    +
    +
    +template<typename Byte >
    + + + + + +
    + + + + + + + +
    constexpr detail::init_dont_move_cursor_wrapper< Byte > sbepp::cursor_ops::init_dont_move (cursor< Byte > & c)
    +
    +constexprnoexcept
    +
    + +

    Returns a wrapper which initializes the cursor but doesn't move it. Behaves like a combination of init() and dont_move().

    +
    Parameters
    + + +
    coriginal cursor
    +
    +
    +
    Returns
    unspecified cursor wrapper
    + +
    +
    + +

    ◆ skip()

    + +
    +
    +
    +template<typename Byte >
    + + + + + +
    + + + + + + + +
    constexpr detail::skip_cursor_wrapper< Byte > sbepp::cursor_ops::skip (cursor< Byte > & c)
    +
    +constexprnoexcept
    +
    + +

    Returns a wrapper which moves the cursor to the end of field/group/data without returning the accessed value.

    +

    Allows to skip uninteresting members. Example:

    schema::messages::msg1<char> m{ptr, size};
    +
    auto c = sbepp::init_cursor(m);
    +
    m.group(sbepp::cursor_ops::skip(c)); // skip the whole group
    +
    auto d = m.data(c); // access next member
    +
    constexpr detail::skip_cursor_wrapper< Byte > skip(cursor< Byte > &c) noexcept
    Returns a wrapper which moves the cursor to the end of field/group/data without returning the accesse...
    Definition sbepp.hpp:1728
    +
    Parameters
    + + +
    coriginal cursor
    +
    +
    +
    Returns
    unspecified cursor wrapper
    + +
    +
    +
    +
    + + + + diff --git a/1.4.1/namespacesbepp_1_1detail.html b/1.4.1/namespacesbepp_1_1detail.html new file mode 100644 index 0000000..2c2a768 --- /dev/null +++ b/1.4.1/namespacesbepp_1_1detail.html @@ -0,0 +1,161 @@ + + + + + + + + +sbepp: sbepp::detail Namespace Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp::detail Namespace Reference
    +
    +
    + +

    Namespace for various implementation details. Should not be used directly. +More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  bitset_base
     Base class for bitsets. More...
     
    class  byte_range
     Base class for all reference semantics types. More...
     
    class  composite_base
     Base class for composites. More...
     
    class  dynamic_array_ref
     Represents reference to dynamic arrays used for <data> elements. More...
     
    class  entry_base
     Base class for group entries. More...
     
    class  flat_group_base
     Base class for a flat group. More...
     
    class  message_base
     Base class for messages. More...
     
    class  nested_group_base
     Base class for a nested group. More...
     
    class  optional_base
     Base class for optional types. More...
     
    class  required_base
     Base class for required types. More...
     
    class  static_array_ref
     Represents reference to fixed-size array. More...
     
    +

    Detailed Description

    +

    Namespace for various implementation details. Should not be used directly.

    +
    +
    + + + + diff --git a/1.4.1/namespacesbepp_1_1detail.js b/1.4.1/namespacesbepp_1_1detail.js new file mode 100644 index 0000000..116d6cd --- /dev/null +++ b/1.4.1/namespacesbepp_1_1detail.js @@ -0,0 +1,14 @@ +var namespacesbepp_1_1detail = +[ + [ "bitset_base", "classsbepp_1_1detail_1_1bitset__base.html", "classsbepp_1_1detail_1_1bitset__base" ], + [ "byte_range", "classsbepp_1_1detail_1_1byte__range.html", "classsbepp_1_1detail_1_1byte__range" ], + [ "composite_base", "classsbepp_1_1detail_1_1composite__base.html", null ], + [ "dynamic_array_ref", "classsbepp_1_1detail_1_1dynamic__array__ref.html", "classsbepp_1_1detail_1_1dynamic__array__ref" ], + [ "entry_base", "classsbepp_1_1detail_1_1entry__base.html", "classsbepp_1_1detail_1_1entry__base" ], + [ "flat_group_base", "classsbepp_1_1detail_1_1flat__group__base.html", "classsbepp_1_1detail_1_1flat__group__base" ], + [ "message_base", "classsbepp_1_1detail_1_1message__base.html", null ], + [ "nested_group_base", "classsbepp_1_1detail_1_1nested__group__base.html", "classsbepp_1_1detail_1_1nested__group__base" ], + [ "optional_base", "classsbepp_1_1detail_1_1optional__base.html", "classsbepp_1_1detail_1_1optional__base" ], + [ "required_base", "classsbepp_1_1detail_1_1required__base.html", "classsbepp_1_1detail_1_1required__base" ], + [ "static_array_ref", "classsbepp_1_1detail_1_1static__array__ref.html", "classsbepp_1_1detail_1_1static__array__ref" ] +]; \ No newline at end of file diff --git a/1.4.1/nav_f.png b/1.4.1/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/1.4.1/nav_f.png differ diff --git a/1.4.1/nav_fd.png b/1.4.1/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/1.4.1/nav_fd.png differ diff --git a/1.4.1/nav_g.png b/1.4.1/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/1.4.1/nav_g.png differ diff --git a/1.4.1/nav_h.png b/1.4.1/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/1.4.1/nav_h.png differ diff --git a/1.4.1/nav_hd.png b/1.4.1/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/1.4.1/nav_hd.png differ diff --git a/1.4.1/navtree.css b/1.4.1/navtree.css new file mode 100644 index 0000000..6b1e5e4 --- /dev/null +++ b/1.4.1/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/1.4.1/navtree.js b/1.4.1/navtree.js new file mode 100644 index 0000000..884b79b --- /dev/null +++ b/1.4.1/navtree.js @@ -0,0 +1,482 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + window.location.href=aname; + animationInProgress=false; + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + + + diff --git a/1.4.1/plusd.svg b/1.4.1/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/1.4.1/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/1.4.1/representation.html b/1.4.1/representation.html new file mode 100644 index 0000000..398c202 --- /dev/null +++ b/1.4.1/representation.html @@ -0,0 +1,558 @@ + + + + + + + + +sbepp: Schema representation + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Schema representation
    +
    +
    + +

    +

    In this section I'll try to gradually describe the structure of generated code. It's just a brief description, for detailed documentation see corresponding reference pages.

    +

    +Representation types vs. traits

    +

    For each schema compiled by sbeppc, there will be two main sources of information:

      +
    • representation types, responsible for the actual SBE data encoding/decoding and proper representation of schema entities. Except constants, all the information they provide comes from binary data. These are described in more details below on this page.
    • +
    • traits, in combination with tags, they provide access to static/meta schema properties that, unlike representation types, always come from precomputed values obtained from schema XML.
    • +
    +

    Sometimes, traits and representation types have functionality with common names, but it's very different in nature. For example, sbepp::message_traits<msg_tag>::size_bytes() returns precomputed value based on message structure from the XML, and hence guaranteed to be valid only for the current schema version. On the other hand, sbepp::size_bytes(msg) calculates message size based on the message buffer and the values it holds, it returns valid value even for newer schema versions because message representation type correctly handles schema extension.

    +

    It's possible to get a representation type from a tag using value_type member of the traits (e.g. sbepp::message_traits<msg_tag>::value_type), and vice versa, to get a tag from a representation type using sbepp::traits_tag_t. These helpers can be used to avoid explicit mentioning of both tag and representation types at the same time by deducing one from another.

    +
    +

    +Namespaces

    +

    Here's the structure of generated code after compilation:

    +
    namespace schema_name{
    +
    struct schema{ // see "Traits" section
    +
    struct types;
    +
    struct messages;
    +
    };
    +
    +
    namespace messages{
    +
    // messages are here...
    +
    class message_name;
    +
    }
    +
    +
    namespace types{
    +
    // types are here...
    +
    class type_name;
    +
    }
    +
    +
    namespace detail{} // implementation details, never use it directly
    +
    }
    +

    Here, detail, schema, messages and types are hardcoded and don't depend on schema names.

    +
    +

    +Schema names

    +

    sbepp preserves names of all schema entities without any modification. It means that messages, types, fields, etc. will have the same type/function names in the generated code. Of course standard C++ naming rules are still applied and usually you'll get an error from sbeppc if schema uses wrong name.

    +
    +

    +Semantics

    +

    Most types generated by sbepp have reference semantics. It means they are just pointers to the actual data which they don't own and don't manage in any way.

    +
    Note
    It's client's responsibility to manage the lifetime and size of the underlying buffer.
    +

    They usually contain a single pointer (with one additional pointer in Debug mode) and are cheap to pass by value. Creation of such an object usually invloves no actions/parsing except the pointer intialization. They are templates with Byte template parameter which is a byte type (can be cv-qualified). Another consequence of reference semantics is that making object const doesn't make underlying data const, i.e., you can modify a message via const msg<char> object. You need to use const-qualified Byte type to make a thing read-only.
    + There are helpers to access raw underlying data which are available for all reference semantics types: sbepp::size_bytes, sbepp::size_bytes_checked, sbepp::addressof.

    +

    Non-array types, enums and sets are the only schema entities represented with value semantics types (including constants). They are small, 64 bits at most, types which behave like int.

    +

    +Safety checks

    +

    As was said before, client is responsible to ensure that provided buffer is enough to hold corresponding SBE data. To provide some sort of safety, sbepp inserts assertions in many places. They check only the accessed data, not the whole SBE message or other entity. For example, if a message has 10 fields and provided buffer can only hold 5 of them, you'll get an assertion only when any of last 5 fields will be accessed. By default, these checks are controlled by NDEBUG just as standard assert().

    +
    See also
    SBEPP_DISABLE_ASSERTS, SBEPP_ASSERT_HANDLER, SBEPP_ENABLE_ASSERTS_WITH_HANDLER
    +

    +Encoding vs. decoding

    +

    sbepp doesn't make a distinction between encoding and decoding. It only provides SBE view of the provided buffer. Functions have no hidden side-effects beyond their main functionality. The only thing which is done implicitly is handling of SBE schema extension mechanism by respecting blockLength. This has several consequences. First, be careful not to change things which affect the offset of the following already-written fields. For example, if you have dynamic-length fields data1 and data2, don't change data1's size after you filled data2 because its offset the data will become a garbage. Simple advice is to fill groups/data fields in-order. Second, when you encode a new message, you need to explicitly fill message/group header via sbepp::fill_message_header or sbepp::fill_group_header and it's better to do this as early as possible.

    +
    +

    +Messages

    +

    Messages and composites are two root things from which any work with SBE data starts. Like any reference semantics type, they are created from pointer and size:

    +
    // check out base class documentation for more constructors
    +
    template<typename Byte>
    + +
    public:
    +
    // field accessors...
    +
    };
    +
    +
    std::array<std::byte, 64> buf;
    +
    schema_name::messages::msg<std::byte> m{buf.data(), buf.size()};
    +
    Base class for messages.
    Definition sbepp.hpp:1749
    +

    There is a couple of helpers which deduce byte type for you, sbepp::make_view and sbepp::make_const_view. They are applicable to any reference semantics type except group entry.

    +
    std::array<std::byte, 64> buf;
    +
    +
    // mutable message
    +
    auto m1 = sbepp::make_view<schema_name::messages::msg>(buf.data(), buf.size());
    +
    // read-only message
    +
    auto m2 =
    +
    sbepp::make_const_view<schema_name::messages::msg>(buf.data(), buf.size());
    +

    The main purpose of messages, composites and group entries is of course to contain fields, their interface will be discussed later in the accessors section.

    +

    +Encoding

    +

    Since sbepp provides only a message's view, message header should be filled explicitly via sbepp::fill_message_header when a new message is created:

    +
    std::array<std::byte, 64> buf;
    +
    auto m = sbepp::make_view<schema_name::messages::msg>(buf.data(), buf.size());
    + +
    constexpr auto fill_message_header(Message m) noexcept -> decltype(m(detail::fill_message_header_tag{}))
    Fill message header.
    Definition sbepp.hpp:3990
    +
    Note
    It's strongly recommended to fill message header as early as possible because its blockLength is required to correctly interpret underlying data.
    +

    You can also fill it by hand using sbepp::get_header:

    +
    std::array<std::byte, 64> buf;
    +
    auto m = sbepp::make_view<schema_name::messages::msg>(buf.data(), buf.size());
    +
    auto header = sbepp::get_header(m);
    +
    header.blockLength(10);
    +
    // ...
    +
    constexpr auto get_header(T v) noexcept -> decltype(v(detail::get_header_tag{}))
    Returns the header of a message/group.
    Definition sbepp.hpp:1607
    +

    +

    +Composites

    +

    Typically, you need first to create a message header to check the type of the incoming message. Composite has the same form and construction approach as message:

    +
    template<typename Byte>
    +
    class messageHeader : ::sbepp::detail::composite_base<Byte>{
    +
    public:
    +
    // field accessors...
    +
    };
    +
    +
    std::array<char, 64> buf;
    +
    auto header = sbepp::make_view<schema_name::types::messageHeader>(
    +
    buf.data(), buf.size());
    +
    if(header.templateId()
    + +
    {
    +
    // handle msg1
    +
    }
    +
    Base class for composites.
    Definition sbepp.hpp:1740
    +
    Provides various traits/attributes of a <message> element.
    Definition sbepp.hpp:4334
    +

    +

    +Groups

    +

    In general, group has a container-like interface with iterators and other members you'd expect from standard container. There are two kinds of groups (message levels in general sense) which provide different interfaces:

      +
    1. Flat - a group which has only a fixed-size fields, no groups or data members. Such a group is represented like a random-access container similar to std::vector. See sbepp::detail::flat_group_base for complete reference.
    2. +
    3. Nested - a group with has other groups or data members. Due to its nature, it's represented as a forward-only container (it's very expensive to navigate over it in a random fashion). See sbepp::detail::nested_group_base for complete reference.
    4. +
    +

    +Encoding

    +

    Because sbepp provides only views, there are no functions like push_back, there's nothing to push. To encode a group, one needs first to set its size, then access corresponding group entries. Similar to message header, group header has to filled explicitly either by sbepp::fill_group_header, resize() method or manually by sbepp::get_header:

    +
    auto g = msg.group_name();
    +
    +
    // set group size
    +
    auto group_size = 2;
    +
    sbepp::fill_group_header(g, group_size);
    +
    +
    // fill entries
    +
    for(const auto entry : g)
    +
    {
    +
    entry.field(1);
    +
    }
    +
    +
    // change size later if you need
    +
    g.clear();
    +
    g.resize(1);
    +
    constexpr auto fill_group_header(Group g, Size num_in_group) noexcept -> decltype(g(detail::fill_group_header_tag{}, num_in_group))
    Fill group header.
    Definition sbepp.hpp:4010
    +
    Note
    As for message header, group header has to be filled as early as possible because its numInGroup and blockLength are used to correctly interpret the underlying data.
    +

    +Group entries

    +

    Group entries have no special properties and normally are never created explicitly. See sbepp::detail::entry_base for details if you are interested.

    +
    template<typename Byte>
    +
    class entry : public sbepp::detail::entry_base<Byte>{
    +
    public:
    +
    // field accessors...
    +
    };
    +
    Base class for group entries.
    Definition sbepp.hpp:1791
    +

    +

    +Data members

    +

    Variable-length arrays are represented using sbepp::detail::dynamic_array_ref. This type works like a reference to a vector-like type.

    +
    auto d = msg.data();
    +
    +
    if(!d.empty())
    +
    {
    +
    std::cout.write(d.data(), d.size());
    +
    }
    +
    +
    d.clear();
    +
    +
    std::vector<char> v;
    +
    // fill somehow...
    +
    d.assign_range(v);
    +

    +Strings

    +

    According to SBE standard, strings stored inside data members never have terminating null character. Conversion from sbepp::detail::dynamic_array_ref to a more string-specific type can be done using data() and size() methods:

    +
    auto d = msg.data();
    +
    std::string s1{d.data(), d.size()};
    +
    std::string_view s2{d.data(), d.size()};
    +
    +
    // since C++23 it's even simpler using range constructor:
    +
    std::string_view s3{d};
    +

    There are 2 options for string assignments:

    +

    Example:

    +
    auto d = msg.data();
    +
    +
    d.assign_string("hello");
    +
    +
    d.assign_range(std::string{"abc"});
    +
    d.assign_range(std::string_view{"def"});
    +

    +

    +Fixed-size arrays

    +

    sbepp treats all <type>s with length != 1 (including 0) as fixed-size arrays. They are implemented in terms of sbepp::detail::static_array_ref which has std::span-like interface with assignment helpers.

    +
    auto array = msg.array();
    +
    +
    std::cout.write(array.data(), array.size());
    +

    +Strings

    +

    Assignment from a string can be done using sbepp::detail::static_array_ref::assign_string(). It can handle both, raw string pointers and string ranges like std::string or std::string_view. As a second parameter it takes sbepp::eos_null eos_mode that controls how to set trailing null bytes (if any). If a stored string is shorter than the array, SBE standard requires all the remaining bytes to be set to null and sbepp::eos_null::all is the default argument for eos_mode parameter. In practice, however, it's not always required because:

      +
    • a single null character is enough for decoder to calculate string length.
    • +
    • underlying memory might be zero-initialized from the start, in this case, sbepp::eos_null::none is enough to correctly encode a string.
    • +
    +

    Example:

    +
    auto array = msg.array();
    +
    +
    array.assign_string("abc");
    +
    array.assign_string(std::string{"abc"});
    +

    To convert sbepp::detail::static_array_ref to a more string-specific type, string length has to be calculated explicitly because the stored string might occupy the entire array without having the terminating null character. There are two ways to do this:

      +
    • sbepp::detail::static_array_ref::strlen(), calculates string length by looking for the first null character from left to right.
    • +
    • sbepp::detail::static_array_ref::strlen_r(), calculates string length by looking for the first non-null character from right to left. This reversed approach might be useful when user expects that string end is closer to the end of the array than to its start. For it to work, it requires all padding bytes (if any) to be set to null.
    • +
    +

    Example:

    +
    auto array = msg.array();
    +
    +
    std::string_view sv{array.data(), array.strlen()};
    +

    +

    +Optional/required types

    +

    See sbepp::char_t and sbepp::char_opt_t for the example of required and optional type correspondingly.

    +
    Note
    While optional/required types provide methods like sbepp::detail::required_base::in_range() and sbepp::detail::optional_base::has_value(), they don't enforce any checks on the underlying value.
    +
    +

    +Enums

    +

    Enums are represented using scoped enumerations. For example:

    +
    <enum name="enumeration" encodingType="uint8">
    +
    <validValue name="One">1</validValue>
    +
    <validValue name="Two">2</validValue>
    +
    </enum>
    +

    is represented like:

    +
    enum class enumeration : std::uint8_t
    +
    {
    +
    One : 1,
    +
    Two : 2
    +
    };
    +
    See also
    sbepp::to_underlying, sbepp::enum_to_string
    +
    +

    +Sets

    +

    In set representation, each choice has a corresponding getter and setter, for example:

    +
    <set name="bitset" encodingType="uint8">
    +
    <choice name="A">0</choice>
    +
    <choice name="B">2</choice>
    +
    </set>
    +

    is represented like:

    +
    class bitset : public ::sbepp::detail::bitset_base<::std::uint8_t>
    +
    {
    +
    public:
    +
    // check out base class documentation for inherited methods
    +
    using ::sbepp::detail::bitset_base<::std::uint8_t>::bitset_base;
    +
    +
    // pair of getter and setter for each choice
    +
    constexpr bool A() const noexcept;
    +
    bitset& A(const bool v) noexcept;
    +
    +
    constexpr bool B() const noexcept;
    +
    bitset& B(const bool v) noexcept;
    +
    };
    +
    Base class for bitsets.
    Definition sbepp.hpp:2736
    +
    Warning
    It's important to remember that sets have value semantics to avoid such mistakes:
    +
    // writing a message
    +
    schema_name::messages::msg<char> m; // initialize somehow
    +
    // does nothing!!! modifies a temporary returned by `m.bitset()`
    +
    m.bitset().A(true).B(true);
    +
    // also does nothing, assigns to a temporary `bool`
    +
    m.bitset().A() = true;
    +
    +
    // correct way
    +
    m.bitset(schema_name::types::bitset{}.A(true).B(true));
    +
    // or, if storage was 0-initialized
    +
    m.bitset(m.bitset().A(true).B(true));
    +
    See also
    sbepp::visit_set
    +
    +

    +Constants

    +

    Constant accessors are represented via static functions. Non-array constants return directly underlying value without any wrapper. Only <field> can return it as enum type. Array-like constants (strings) are represented using sbepp::detail::static_array_ref like a fixed-size array.

    +
    <composite name="constants">
    +
    <type name="num_const" primitiveType="uint32"
    +
    presence="constant">123</type>
    +
    <type name="str_const" primitiveType="char"
    +
    presence="constant">hello world</type>
    +
    </composite>
    +
    +
    <sbe:message name="message" id="1">
    +
    <field name="enum_const" id="1" type="enumeration"
    +
    presence="constant" valueRef="enumeration.Two"/>
    +
    </sbe:message>
    +
    // somewhere inside `constants` class
    +
    static constexpr ::std::uint32_t num_const() noexcept;
    +
    static constexpr implementation_defined_alias str_const() noexcept;
    +
    +
    // somewhere inside `message` class
    +
    static constexpr schema_name::types::enumeration enum_const() noexcept;
    +

    +

    +Field accessors

    +

    There are multiple entities which can hold fields: messages, group entries and composites. They all provide the same interface for accessors:

    +
    template<typename Byte>
    +
    class FieldContainer
    +
    {
    +
    public:
    +
    FieldRepresentation value_semantics_field();
    +
    void value_semantics_field(FieldRepresentation);
    +
    +
    View<Byte> reference_semantics_field();
    +
    };
    +

    That is, for value semantics fields there are pair of getter and setter, for reference semantics fields there is only a getter which returns a view with the same byte type as its enclosing object. When byte type is const-qualified, setters are not available.
    + Unlike cursor-based accessors, these "normal" accessors can be used in any order.

    +
    schema_name::messages::msg<char> m; // init somehow
    +
    +
    // value semantics types
    +
    auto required = m.required();
    +
    m.required(1);
    +
    +
    auto optional = m.optional();
    +
    m.optional(2);
    +
    +
    auto enumeration = m.enumeration();
    +
    m.enumeration(schema_name::types::my_enum::A);
    +
    +
    auto set = m.set();
    +
    m.set(schema_name::types::my_set{}.choice(true));
    +
    +
    // reference semantics types, they all have byte type `char`
    +
    auto c1 = m.composite();
    +
    auto c2 = m.composite().nested_composite();
    +
    auto g = m.group();
    +
    auto d = m.data();
    +

    +

    +Cursor-based accessors

    +
    Note
    The API described in this section makes sense to use only for messages of a complex structure. I recommend always to do benchmarks before using it.
    +

    While normal accessors can be used in any order, this is not always efficient. Consider this message:

    +
    <sbe:message name="nested_msg" id="1">
    +
    <field name="field1" id="1" type="uint32"/>
    +
    <field name="field2" id="2" type="uint32"/>
    +
    <field name="field3" id="3" type="uint32"/>
    +
    +
    <group name="group" id="2">
    +
    <field name="number" id="1" type="uint32"/>
    +
    <data name="data3" id="2" type="varDataEncoding"/>
    +
    </group>
    +
    +
    <data name="data1" id="3" type="varDataEncoding"/>
    +
    <data name="data2" id="4" type="varDataEncoding"/>
    +
    </sbe:message>
    +

    Here, access to field1/2/3 is still fast but access to the data1 is not. To get its offset we need:

      +
    • read blockLength from nested_msg header to get group's offset
    • +
    • read numInGroup from group header
    • +
    • read blockLength from group header
    • +
    • for each group entry
        +
      • use blockLength to get offset to data2
      • +
      • read data2 length
      • +
      +
    • +
    • finally, get data1 offset
    • +
    +

    Moreover, to access next data2 all that work has to be repeated! Now imagine if there were more groups and data in that message. It's a lot of work and current compilers can't optimize normal accessors well even when everything is accessed in order.

    +

    The way to solve it is to access things in a forward-only manner to avoid recalculation of the next field's offset each time from the message start. In this way, after we've read the group, offset for data1 is ready for free. This is the core idea behind cursor-based API.

    +
    Note
    Cursor-based API is used for forward-only access
    +

    A cursor (sbepp::cursor<Byte>) is just a pointer wrapper which is passed to field accessors as an additional parameter:

    +
    template<typename Byte>
    +
    class FieldContainer
    +
    {
    +
    public:
    +
    template<typename Cursor>
    +
    FieldRepresentation value_semantics_field(Cursor&&);
    +
    template<typename Cursor>
    +
    void value_semantics_field(FieldRepresentation, Cursor&&);
    +
    +
    template<typename Cursor>
    +
    View<Byte> reference_semantics_field(Cursor&&);
    +
    };
    +

    It's parameterized with Byte type which has the same meaning as for other reference semantics types. Note that it can be more const-qualified than the byte type of an enclosing view, setters are not available for such cursors.

    +

    By default, each field assumes that cursor points to the end of the previous field (or to the end of group/message header) so the offset to current field can be calculated efficiently (usually a no-op), then cursor is advanced using these rules:

      +
    • field moves cursor up by field's size
    • +
    • last field moves cursor to the end of the block (calculated using blockLength)
    • +
    • first variable length member (group or data) of the message/entry unconditionally initializes cursor to the end of the block before using it. It means that it's possible to use uninitialized cursor with them but I don't recommend it
    • +
    • group moves cursor to the end of group's header
    • +
    • data moves cursor to the end of the data (data() + size())
    • +
    +

    Cursor has to be initialized before the first usage, it can be done via sbepp::init_cursor/sbepp::init_const_cursor or by using sbepp::cursor_ops::init or even by hand from provided pointer. Only messages and group entries provide cursor-based accessors (composites cannot contain variable-sized fields). Note that cursor-based and normal accessors return the same objects. Those object don't care how they were created.
    + Here's an example of how to read the above message:

    +
    auto m = sbepp::make_view<nested_msg>(buf.data(), buf.size());
    +
    auto c = sbepp::init_cursor(m);
    +
    +
    m.field1(c);
    +
    m.field2(c);
    +
    m.field3(c);
    +
    +
    for(const auto entry : m.group(c).cursor_range(c))
    +
    {
    +
    entry.number(c);
    +
    entry.data3(c);
    +
    }
    +
    +
    m.data1(c);
    +
    m.data2(c);
    +
    constexpr cursor< byte_type_t< View > > init_cursor(View view) noexcept
    Initializes cursor from a message/group view with the same byte type.
    Definition sbepp.hpp:2846
    +

    Note that you need to use cursor_range() to iterate over group entries. That's because now each entry is created from the cursor.

    +

    Here's how compiler will see it (simplified of course):

    +
    char* ptr = msg_start;
    +
    auto field1 = *reinterpret_cast<field1_type*>(ptr);
    +
    ptr += sizeof(field1);
    +
    auto field2 = *reinterpret_cast<field2_type*>(ptr);
    +
    ptr += sizeof(field2);
    +
    // ...
    +

    This approach is very efficient but the downside is that to access a field, you need to access all previous fields in their schema order.
    + To provide some sort of flexibility, there are various sbepp::cursor_ops helpers which can control cursor's position. Check out their documentation for examples. Here, I only want to duplicate one tricky case from sbepp::cursor_ops::dont_move, using cursor to write a data member:

    +
    auto c = sbepp::init_cursor(msg);
    +
    auto d = msg.data(sbepp::cursor_ops::dont_move(c));
    +
    d.resize(1); // set data size somehow
    +
    msg.data(c); // advance the cursor
    +
    constexpr detail::dont_move_cursor_wrapper< Byte > dont_move(cursor< Byte > &c) noexcept
    Returns a wrapper which doesn't advance the cursor when it's used.
    Definition sbepp.hpp:1694
    +

    Recall that data accessors by-default move the cursor to data() + size() so when done in a naive way:

    +
    auto d = msg.data(c);
    +
    d.resize(1);
    +

    at the time we access data, its length can have any value (your best hope is message buffer initialized by 0), thus, cursor will be moved to the unknown position and its furher use is unpredictable or even UB.

    +

    As you can see, using cursor-based API might be tricky and requires additional care. Most schemas I saw have only a single flat group and no data, for them normal accessors work great. I recommend to use cursors only for messages with complex structure or when you did a benchmark and know for sure that you'll benefit from it.

    +
    +
    +
    + + + + diff --git a/1.4.1/resize.js b/1.4.1/resize.js new file mode 100644 index 0000000..6ad2ae8 --- /dev/null +++ b/1.4.1/resize.js @@ -0,0 +1,109 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable() { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() { + const headerHeight = header.outerHeight(); + const footerHeight = footer.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight,navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + content.css({height:contentHeight + "px"}); + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: () => resizeWidth() }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(() => resizeHeight()); + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = (evt) => evt.preventDefault(); + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/1.4.1/sbepp_8hpp.html b/1.4.1/sbepp_8hpp.html new file mode 100644 index 0000000..a194715 --- /dev/null +++ b/1.4.1/sbepp_8hpp.html @@ -0,0 +1,713 @@ + + + + + + + + +sbepp: sbepp.hpp File Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp.hpp File Reference
    +
    +
    + +

    Contains various utilities and implementation details which are required for generated schema headers. +More...

    +
    #include <array>
    +#include <algorithm>
    +#include <cstddef>
    +#include <cstdint>
    +#include <cstring>
    +#include <iterator>
    +#include <limits>
    +#include <type_traits>
    +#include <initializer_list>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  sbepp::detail::byte_range< Byte >
     Base class for all reference semantics types. More...
     
    class  sbepp::cursor< Byte >
     Represents cursor which is used in cursor-based API. Clients should not use undocumented methods. More...
     
    struct  sbepp::byte_type< View >
     Trait to get view's byte type. More...
     
    class  sbepp::detail::composite_base< Byte >
     Base class for composites. More...
     
    class  sbepp::detail::message_base< Byte, Header >
     Base class for messages. More...
     
    class  sbepp::detail::entry_base< Byte, BlockLengthType >
     Base class for group entries. More...
     
    class  sbepp::detail::flat_group_base< Byte, Entry, Dimension >
     Base class for a flat group. More...
     
    class  sbepp::detail::nested_group_base< Byte, Entry, Dimension >
     Base class for a nested group. More...
     
    class  sbepp::detail::bitset_base< T >
     Base class for bitsets. More...
     
    struct  sbepp::default_init_t
     tag for dynamic_array_ref::resize(). Used to skip value initialization. More...
     
    class  sbepp::detail::static_array_ref< Byte, Value, N, Tag >
     Represents reference to fixed-size array. More...
     
    class  sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >
     Represents reference to dynamic arrays used for <data> elements. More...
     
    struct  sbepp::nullopt_t
     Tag type used to initialize optional types with null value. More...
     
    class  sbepp::detail::required_base< T, Derived >
     Base class for required types. More...
     
    class  sbepp::detail::optional_base< T, Derived >
     Base class for optional types. More...
     
    class  sbepp::type_traits< T >
     Provides various traits and attributes of a <type> element. More...
     
    class  sbepp::schema_traits< T >
     Provides various traits/attributes of a <messageSchema> element. More...
     
    class  sbepp::enum_traits< T >
     Provides various traits/attributes of an <enum> element. More...
     
    class  sbepp::enum_value_traits< T >
     Provides various traits/attributes of a <validValue> element. More...
     
    class  sbepp::set_traits< T >
     Provides various traits/attributes of a <set> element. More...
     
    class  sbepp::set_choice_traits< T >
     Provides various traits/attributes of a <choice> element. More...
     
    class  sbepp::composite_traits< T >
     Provides various traits/attributes of a <composite> element. More...
     
    class  sbepp::message_traits< T >
     Provides various traits/attributes of a <message> element. More...
     
    class  sbepp::field_traits< T >
     Provides various traits/attributes of a <field> element. More...
     
    class  sbepp::group_traits< T >
     Provides various traits/attributes of a <group> element. More...
     
    class  sbepp::data_traits< T >
     Provides various traits/attributes of a <data> element. More...
     
    struct  sbepp::traits_tag< ValueType >
     Maps representation type to its tag. More...
     
    class  sbepp::char_t
     Built-in char required type. More...
     
    class  sbepp::char_opt_t
     Built-in char optional type. More...
     
    class  sbepp::int8_t
     Built-in int8 required type. More...
     
    class  sbepp::int8_opt_t
     Built-in int8 optional type. More...
     
    class  sbepp::uint8_t
     Built-in uint8 required type. More...
     
    class  sbepp::uint8_opt_t
     Built-in uint8 optional type. More...
     
    class  sbepp::int16_t
     Built-in int16 required type. More...
     
    class  sbepp::int16_opt_t
     Built-in int16 optional type. More...
     
    class  sbepp::uint16_t
     Built-in uint16 required type. More...
     
    class  sbepp::uint16_opt_t
     Built-in uint16 optional type. More...
     
    class  sbepp::int32_t
     Built-in int32 required type. More...
     
    class  sbepp::int32_opt_t
     Built-in int32 optional type. More...
     
    class  sbepp::uint32_t
     Built-in uint32 required type. More...
     
    class  sbepp::uint32_opt_t
     Built-in uint32 optional type. More...
     
    class  sbepp::int64_t
     Built-in int64 required type. More...
     
    class  sbepp::int64_opt_t
     Built-in int64 optional type. More...
     
    class  sbepp::uint64_t
     Built-in uint64 required type. More...
     
    class  sbepp::uint64_opt_t
     Built-in uint64 optional type. More...
     
    class  sbepp::float_t
     Built-in float required type. More...
     
    class  sbepp::float_opt_t
     Built-in float optional type. More...
     
    class  sbepp::double_t
     Built-in double required type. More...
     
    class  sbepp::double_opt_t
     Built-in double optional type. More...
     
    struct  sbepp::unknown_enum_value_tag
     Tag for unknown enum values. More...
     
    struct  sbepp::is_enum< T, typename >
     Checks if T is an enumeration. More...
     
    struct  sbepp::size_bytes_checked_result
     Result type of size_bytes_checked More...
     
    + + + + + + + + + + +

    +Namespaces

    namespace  sbepp
     The main sbepp namespace.
     
    namespace  sbepp::detail
     Namespace for various implementation details. Should not be used directly.
     
    namespace  sbepp::cursor_ops
     Contains cursor wrappers which allow more precise control over its position.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Concepts

    concept  sbepp::array_type
     Concept for sbepp::is_array_type<T>::value
     
    concept  sbepp::required_type
     Concept for sbepp::is_required_type<T>::value
     
    concept  sbepp::optional_type
     Concept for sbepp::is_optional_type<T>::value
     
    concept  sbepp::non_array_type
     Concept for sbepp::is_non_array_type<T>::value
     
    concept  sbepp::type
     Concept for sbepp::is_type<T>::value
     
    concept  sbepp::enumeration
     Concept for sbepp::is_enum<T>::value
     
    concept  sbepp::set
     Concept for sbepp::is_set<T>::value
     
    concept  sbepp::composite
     Concept for sbepp::is_composite<T>::value
     
    concept  sbepp::message
     Concept for sbepp::is_message<T>::value
     
    concept  sbepp::flat_group
     Concept for sbepp::is_flat_group<T>::value
     
    concept  sbepp::nested_group
     Concept for sbepp::is_nested_group<T>::value
     
    concept  sbepp::group
     Concept for sbepp::is_group<T>::value
     
    concept  sbepp::data
     Concept for sbepp::is_data<T>::value
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    +#define SBEPP_HAS_THREE_WAY_COMPARISON   0
     1 if compiler supports three-way comparison, 0 otherwise
     
    #define SBEPP_HAS_ENDIAN   0
     1 if compiler supports concepts, 0 otherwise
     
    +#define SBEPP_HAS_BITCAST   0
     1 if compiler supports std::bitcast, 0 otherwise
     
    +#define SBEPP_HAS_BYTESWAP   0
     1 if compiler supports std::byteswap, 0 otherwise
     
    +#define SBEPP_HAS_CONSTEXPR_ALGORITHMS   0
     1 if compiler supports constexpr std algorithms, 0 otherwise
     
    +#define SBEPP_HAS_CONSTEXPR_ACCESSORS   0
     1 if constexpr accessors are supported, 0 otherwise
     
    +#define SBEPP_HAS_RANGES   0
     1 if compiler supports ranges, 0 otherwise
     
    +#define SBEPP_HAS_IS_CONSTANT_EVALUATED   0
     1 if compiler supports std::is_constant_evaluated(), 0 otherwise
     
    +#define SBEPP_DISABLE_ASSERTS
     When defined, unconditionally disables assertions and size checks.
     
    +#define SBEPP_ASSERT_HANDLER
     When defined, uses client-defined sbepp::assertion_failed as an assertion handler. Whether assertions are enabled is controlled by NDEBUG
     
    +#define SBEPP_ENABLE_ASSERTS_WITH_HANDLER
     When defined, unconditionally enables assertions. Requires sbepp::assertion_failed to be defined by the client.
     
    +#define SBEPP_BYTE_ORDER
     Must be defined to either little or big when native endianness cannot be detected automatically.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using sbepp::length_t = std::uint64_t
     Represents type_traits::length() value type.
     
    +using sbepp::offset_t = std::uint64_t
     Represents offset trait value type, e.g. type_traits::offset()
     
    +using sbepp::version_t = std::uint64_t
     Represents version trait value type, e.g. type_traits::since_version()
     
    +using sbepp::schema_id_t = std::uint32_t
     Represents schema_traits::id() value type.
     
    +using sbepp::message_id_t = std::uint32_t
     Represents message_traits::id() value type.
     
    +using sbepp::block_length_t = std::uint64_t
     Represents block_length trait value type, e.g. message_traits::block_length()
     
    +using sbepp::member_id_t = std::uint16_t
     Represents id trait value type, e.g. field_traits::id()
     
    +using sbepp::choice_index_t = std::uint8_t
     Represents set_choice_traits::index() value type.
     
    +template<typename View >
    using sbepp::byte_type_t = typename byte_type<View>::type
     Shortcut for byte_type<T>::type
     
    +template<typename ValueType >
    using sbepp::traits_tag_t = typename traits_tag<ValueType>::type
     Shorthand for sbepp::traits_tag<T>::type
     
    +template<typename T >
    using sbepp::is_array_type = typename detail::is_array_type_impl<T>::type
     Checks is T is an array type.
     
    +template<typename T >
    using sbepp::is_required_type = detail::is_base_of_tmp<detail::required_base, T>
     Checks if T is a non-array required type.
     
    +template<typename T >
    using sbepp::is_optional_type = detail::is_base_of_tmp<detail::optional_base, T>
     Checks if T is a non-array optional type.
     
    +template<typename T >
    using sbepp::is_non_array_type
     Checks if T is a non-array type.
     
    +template<typename T >
    using sbepp::is_type
     Checks if T is a type of any kind.
     
    +template<typename T >
    using sbepp::is_set = detail::is_base_of_tmp<detail::bitset_base, T>
     Checks if T is a set.
     
    +template<typename T >
    using sbepp::is_composite = detail::is_base_of_tmp<detail::composite_base, T>
     Checks if T is a composite.
     
    +template<typename T >
    using sbepp::is_message = detail::is_base_of_tmp<detail::message_base, T>
     Checks if T is a message.
     
    +template<typename T >
    using sbepp::is_flat_group = detail::is_base_of_tmp<detail::flat_group_base, T>
     Checks if T is a flat group.
     
    +template<typename T >
    using sbepp::is_nested_group = detail::is_base_of_tmp<detail::nested_group_base, T>
     Checks if T is a nested group.
     
    +template<typename T >
    using sbepp::is_group
     Checks if T is a group of any kind.
     
    +template<typename T >
    using sbepp::is_group_entry = detail::is_base_of_tmp<detail::entry_base, T>
     Checks if T is a group entry.
     
    +template<typename T >
    using sbepp::is_data = typename detail::is_data_impl<T>::type
     Checks if T is a data.
     
    + + + + + + + + + + +

    +Enumerations

    enum class  sbepp::field_presence { sbepp::required +, sbepp::optional +, sbepp::constant + }
     Represents presence trait value type, e.g. type_traits::presence() More...
     
    enum class  sbepp::endian { sbepp::little +, sbepp::big +, sbepp::native + }
     Represents schema_traits::byte_order() value type. When SBEPP_HAS_ENDIAN is 1, it's just an alias to std::endian. Requires SBEPP_BYTE_ORDER to be defined if endianness is not detected automatically. More...
     
    enum class  sbepp::eos_null { sbepp::none +, sbepp::single +, sbepp::all + }
     Represents number of null bytes that can be added after the end-of-string by detail::static_array_ref::assign_string() More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void sbepp::assertion_failed (char const *expr, char const *function, char const *file, long line)
     When SBEPP_ASSERT_HANDLER or SBEPP_ENABLE_ASSERTS_WITH_HANDLER is defined, this function is called for failed assertions. Must be defined by the client.
     
    template<typename T >
    constexpr std::size_t sbepp::size_bytes (T v) noexcept
     Returns the size of the underlying data represented by message/group/entry/data/composite view, including headers.
     
    template<typename T , typename Byte >
    constexpr std::size_t sbepp::size_bytes (T v, cursor< Byte > c) noexcept
     Similar to sbepp::size_bytes but has constant complexity because it expects c to be set at the end of v. Useful to read the whole message and then get its size in constant time. Not applicable to composites.
     
    template<typename T >
    constexpr auto sbepp::get_header (T v) noexcept -> decltype(v(detail::get_header_tag{}))
     Returns the header of a message/group.
     
    template<typename T >
    constexpr auto sbepp::addressof (T v) noexcept -> decltype(v(detail::addressof_tag{}))
     Returns pointer to the underlying data referenced by a view.
     
    template<typename Byte >
    constexpr detail::init_cursor_wrapper< Byte > sbepp::cursor_ops::init (cursor< Byte > &c) noexcept
     Returns a wrapper which will initialize the cursor when it's used and advance after the usage.
     
    template<typename Byte >
    constexpr detail::dont_move_cursor_wrapper< Byte > sbepp::cursor_ops::dont_move (cursor< Byte > &c) noexcept
     Returns a wrapper which doesn't advance the cursor when it's used.
     
    template<typename Byte >
    constexpr detail::init_dont_move_cursor_wrapper< Byte > sbepp::cursor_ops::init_dont_move (cursor< Byte > &c) noexcept
     Returns a wrapper which initializes the cursor but doesn't move it. Behaves like a combination of init() and dont_move().
     
    template<typename Byte >
    constexpr detail::skip_cursor_wrapper< Byte > sbepp::cursor_ops::skip (cursor< Byte > &c) noexcept
     Returns a wrapper which moves the cursor to the end of field/group/data without returning the accessed value.
     
    template<typename Enum >
    constexpr std::underlying_type< Enum >::type sbepp::to_underlying (Enum e) noexcept
     Converts an enumeration to its underlying type. Equivalent to C++23 std::to_underlying()
     
    template<typename View >
    constexpr cursor< byte_type_t< View > > sbepp::init_cursor (View view) noexcept
     Initializes cursor from a message/group view with the same byte type.
     
    template<typename View >
    constexpr cursor< typename std::add_const< byte_type_t< View > >::type > sbepp::init_const_cursor (View view) noexcept
     Initializes cursor from a message/group view with const byte type.
     
    template<typename Message >
    constexpr auto sbepp::fill_message_header (Message m) noexcept -> decltype(m(detail::fill_message_header_tag{}))
     Fill message header.
     
    template<typename Group , typename Size >
    constexpr auto sbepp::fill_group_header (Group g, Size num_in_group) noexcept -> decltype(g(detail::fill_group_header_tag{}, num_in_group))
     Fill group header.
     
    template<template< typename > class View, typename Byte >
    constexpr View< Byte > sbepp::make_view (Byte *ptr, const std::size_t size) noexcept
     Construct view from memory buffer.
     
    template<template< typename > class View, typename Byte >
    constexpr View< typename std::add_const< Byte >::type > sbepp::make_const_view (Byte *ptr, const std::size_t size) noexcept
     Construct read-only view from memory buffer.
     
    template<typename Visitor , typename View , typename Cursor , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    constexpr Visitor && sbepp::visit (View view, Cursor &c, Visitor &&visitor={})
     Visit a view using given cursor.
     
    template<typename Visitor , typename View , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    constexpr Visitor && sbepp::visit (View view, Visitor &&visitor={})
     Visits a view.
     
    template<typename Visitor , typename Set >
    constexpr Visitor && sbepp::visit (Set s, Visitor &&visitor={})
     Visits set choices.
     
    template<typename Visitor , typename Enum >
    constexpr Visitor && sbepp::visit (Enum e, Visitor &&visitor={})
     Visits enum value.
     
    template<typename Visitor , typename View , typename Cursor , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    constexpr Visitor && sbepp::visit_children (View view, Cursor &c, Visitor &&visitor={})
     Visit view's children using provided cursor.
     
    template<typename Visitor , typename View , typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    constexpr Visitor && sbepp::visit_children (View view, Visitor &&visitor={})
     Visit view's children.
     
    template<typename E , typename = detail::enable_if_t<is_enum<E>::value>>
    constexpr const char * sbepp::enum_to_string (const E e) noexcept
     Converts enum to string.
     
    template<typename Set , typename Visitor >
    constexpr auto sbepp::visit_set (const Set s, Visitor &&visitor) noexcept -> decltype(s(detail::visit_set_tag{}, std::forward< Visitor >(visitor)))
     Visits set choices in order of their declaration.
     
    template<typename View >
    constexpr size_bytes_checked_result sbepp::size_bytes_checked (View view, std::size_t size) noexcept
     Calculate view size with additional safety checks.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    constexpr default_init_t sbepp::default_init {}
     helper to pass default_init_t to dynamic_array_ref::resize().
     
    constexpr nullopt_t sbepp::nullopt {0}
     Helper constant used to initialize optional types with null value.
     
    +template<typename T >
    constexpr auto sbepp::is_array_type_v = is_array_type<T>::value
     Shorthand for sbepp::is_array_type<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_required_type_v = is_required_type<T>::value
     Shorthand for sbepp::is_required_type<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_optional_type_v = is_optional_type<T>::value
     Shorthand for sbepp::is_optional_type<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_non_array_type_v = is_non_array_type<T>::value
     Shorthand for sbepp::is_non_array_type<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_type_v = is_type<T>::value
     Shorthand for sbepp::is_type<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_enum_v = is_enum<T>::value
     Shorthand for sbepp::is_enum<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_set_v = is_set<T>::value
     Shorthand for sbepp::is_set<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_composite_v = is_composite<T>::value
     Shorthand for sbepp::is_composite<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_message_v = is_message<T>::value
     Shorthand for sbepp::is_message<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_flat_group_v = is_flat_group<T>::value
     Shorthand for sbepp::is_flat_group<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_nested_group_v = is_nested_group<T>::value
     Shorthand for sbepp::is_nested_group<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_group_v = is_group<T>::value
     Shorthand for sbepp::is_group<T>::value
     
    +template<typename T >
    constexpr auto sbepp::is_data_v = is_data<T>::value
     Shorthand for sbepp::is_data<T>::value
     
    +

    Detailed Description

    +

    Contains various utilities and implementation details which are required for generated schema headers.

    +
    +
    + + + + diff --git a/1.4.1/sbepp_8hpp.js b/1.4.1/sbepp_8hpp.js new file mode 100644 index 0000000..ca3c69f --- /dev/null +++ b/1.4.1/sbepp_8hpp.js @@ -0,0 +1,147 @@ +var sbepp_8hpp = +[ + [ "sbepp::detail::byte_range< Byte >", "classsbepp_1_1detail_1_1byte__range.html", "classsbepp_1_1detail_1_1byte__range" ], + [ "sbepp::cursor< Byte >", "classsbepp_1_1cursor.html", "classsbepp_1_1cursor" ], + [ "sbepp::byte_type< View >", "structsbepp_1_1byte__type.html", "structsbepp_1_1byte__type" ], + [ "sbepp::detail::composite_base< Byte >", "classsbepp_1_1detail_1_1composite__base.html", null ], + [ "sbepp::detail::message_base< Byte, Header >", "classsbepp_1_1detail_1_1message__base.html", null ], + [ "sbepp::detail::entry_base< Byte, BlockLengthType >", "classsbepp_1_1detail_1_1entry__base.html", "classsbepp_1_1detail_1_1entry__base" ], + [ "sbepp::detail::flat_group_base< Byte, Entry, Dimension >", "classsbepp_1_1detail_1_1flat__group__base.html", "classsbepp_1_1detail_1_1flat__group__base" ], + [ "sbepp::detail::nested_group_base< Byte, Entry, Dimension >", "classsbepp_1_1detail_1_1nested__group__base.html", "classsbepp_1_1detail_1_1nested__group__base" ], + [ "sbepp::detail::bitset_base< T >", "classsbepp_1_1detail_1_1bitset__base.html", "classsbepp_1_1detail_1_1bitset__base" ], + [ "sbepp::default_init_t", "structsbepp_1_1default__init__t.html", null ], + [ "sbepp::detail::static_array_ref< Byte, Value, N, Tag >", "classsbepp_1_1detail_1_1static__array__ref.html", "classsbepp_1_1detail_1_1static__array__ref" ], + [ "sbepp::detail::dynamic_array_ref< Byte, Value, Length, E >", "classsbepp_1_1detail_1_1dynamic__array__ref.html", "classsbepp_1_1detail_1_1dynamic__array__ref" ], + [ "sbepp::nullopt_t", "structsbepp_1_1nullopt__t.html", null ], + [ "sbepp::detail::required_base< T, Derived >", "classsbepp_1_1detail_1_1required__base.html", "classsbepp_1_1detail_1_1required__base" ], + [ "sbepp::detail::optional_base< T, Derived >", "classsbepp_1_1detail_1_1optional__base.html", "classsbepp_1_1detail_1_1optional__base" ], + [ "sbepp::traits_tag< ValueType >", "structsbepp_1_1traits__tag.html", "structsbepp_1_1traits__tag" ], + [ "sbepp::char_t", "classsbepp_1_1char__t.html", null ], + [ "sbepp::char_opt_t", "classsbepp_1_1char__opt__t.html", null ], + [ "sbepp::int8_t", "classsbepp_1_1int8__t.html", null ], + [ "sbepp::int8_opt_t", "classsbepp_1_1int8__opt__t.html", null ], + [ "sbepp::uint8_t", "classsbepp_1_1uint8__t.html", null ], + [ "sbepp::uint8_opt_t", "classsbepp_1_1uint8__opt__t.html", null ], + [ "sbepp::int16_t", "classsbepp_1_1int16__t.html", null ], + [ "sbepp::int16_opt_t", "classsbepp_1_1int16__opt__t.html", null ], + [ "sbepp::uint16_t", "classsbepp_1_1uint16__t.html", null ], + [ "sbepp::uint16_opt_t", "classsbepp_1_1uint16__opt__t.html", null ], + [ "sbepp::int32_t", "classsbepp_1_1int32__t.html", null ], + [ "sbepp::int32_opt_t", "classsbepp_1_1int32__opt__t.html", null ], + [ "sbepp::uint32_t", "classsbepp_1_1uint32__t.html", null ], + [ "sbepp::uint32_opt_t", "classsbepp_1_1uint32__opt__t.html", null ], + [ "sbepp::int64_t", "classsbepp_1_1int64__t.html", null ], + [ "sbepp::int64_opt_t", "classsbepp_1_1int64__opt__t.html", null ], + [ "sbepp::uint64_t", "classsbepp_1_1uint64__t.html", null ], + [ "sbepp::uint64_opt_t", "classsbepp_1_1uint64__opt__t.html", null ], + [ "sbepp::float_t", "classsbepp_1_1float__t.html", null ], + [ "sbepp::float_opt_t", "classsbepp_1_1float__opt__t.html", null ], + [ "sbepp::double_t", "classsbepp_1_1double__t.html", null ], + [ "sbepp::double_opt_t", "classsbepp_1_1double__opt__t.html", null ], + [ "sbepp::unknown_enum_value_tag", "structsbepp_1_1unknown__enum__value__tag.html", null ], + [ "sbepp::is_enum< T, typename >", "structsbepp_1_1is__enum.html", null ], + [ "sbepp::size_bytes_checked_result", "structsbepp_1_1size__bytes__checked__result.html", "structsbepp_1_1size__bytes__checked__result" ], + [ "sbepp::array_type", "conceptsbepp_1_1array__type.html", null ], + [ "sbepp::required_type", "conceptsbepp_1_1required__type.html", null ], + [ "sbepp::optional_type", "conceptsbepp_1_1optional__type.html", null ], + [ "sbepp::non_array_type", "conceptsbepp_1_1non__array__type.html", null ], + [ "sbepp::type", "conceptsbepp_1_1type.html", null ], + [ "sbepp::enumeration", "conceptsbepp_1_1enumeration.html", null ], + [ "sbepp::set", "conceptsbepp_1_1set.html", null ], + [ "sbepp::composite", "conceptsbepp_1_1composite.html", null ], + [ "sbepp::message", "conceptsbepp_1_1message.html", null ], + [ "sbepp::flat_group", "conceptsbepp_1_1flat__group.html", null ], + [ "sbepp::nested_group", "conceptsbepp_1_1nested__group.html", null ], + [ "sbepp::group", "conceptsbepp_1_1group.html", null ], + [ "sbepp::data", "conceptsbepp_1_1data.html", null ], + [ "SBEPP_ASSERT_HANDLER", "sbepp_8hpp.html#ae9a30a1ed9195270dc6dba235182ba34", null ], + [ "SBEPP_BYTE_ORDER", "sbepp_8hpp.html#a9558ac0bbc3e7b40c3813566f4e3510e", null ], + [ "SBEPP_DISABLE_ASSERTS", "sbepp_8hpp.html#a6a9a3e2c289e8eb83bd1937c0a54b14e", null ], + [ "SBEPP_ENABLE_ASSERTS_WITH_HANDLER", "sbepp_8hpp.html#a0279553eb51c2609c3273da80e021278", null ], + [ "SBEPP_HAS_BITCAST", "group__compiler-features.html#gaef2ac7b655d882f9b655a783cd20c9e8", null ], + [ "SBEPP_HAS_BYTESWAP", "group__compiler-features.html#ga3aa8a99c944b6084926af3e0f2ac11c4", null ], + [ "SBEPP_HAS_CONSTEXPR_ACCESSORS", "group__compiler-features.html#gadb4703db06d7882322d72f1b8b213a05", null ], + [ "SBEPP_HAS_CONSTEXPR_ALGORITHMS", "group__compiler-features.html#gaa48282f26ded40b3c3824e08f79caea3", null ], + [ "SBEPP_HAS_ENDIAN", "group__compiler-features.html#ga78585d1198487e6ba5a99e60fd422271", null ], + [ "SBEPP_HAS_IS_CONSTANT_EVALUATED", "group__compiler-features.html#gaf02e9d1747df137b59c17f9636b79749", null ], + [ "SBEPP_HAS_RANGES", "group__compiler-features.html#ga20ab97b68cf5613024f3d95893a7a453", null ], + [ "SBEPP_HAS_THREE_WAY_COMPARISON", "group__compiler-features.html#ga8143ff71e5eed9a6f297f71a4b40855f", null ], + [ "block_length_t", "sbepp_8hpp.html#ac0fdcdd3dfa93ad4aaac66379da7b0c5", null ], + [ "byte_type_t", "sbepp_8hpp.html#a62faab2402f172fb1d0dde766f51b3d7", null ], + [ "choice_index_t", "sbepp_8hpp.html#a55be97e1f98cb33e38dfa96e8309179c", null ], + [ "is_array_type", "sbepp_8hpp.html#af543fe4e16fb809febcbeb4f8888bdae", null ], + [ "is_composite", "sbepp_8hpp.html#aff757cd0a709b464f626ae509e6e6cd3", null ], + [ "is_data", "sbepp_8hpp.html#a5b8bb415061e959eb3a73e76af382e49", null ], + [ "is_flat_group", "sbepp_8hpp.html#a19b7ab3bd5ff1a76a7d384e17f0a3cf7", null ], + [ "is_group", "sbepp_8hpp.html#a18ca877253ba8214e9fd1ab0dcafe691", null ], + [ "is_group_entry", "sbepp_8hpp.html#ad66e5b64108fc65682c621ac8c5a471b", null ], + [ "is_message", "sbepp_8hpp.html#a6b570920b082c2bc629036cfeef4af57", null ], + [ "is_nested_group", "sbepp_8hpp.html#a664c938df34175bff7de36e45843586e", null ], + [ "is_non_array_type", "sbepp_8hpp.html#aa2eb4eb5e6a8df682c49fe7f59fe0fb3", null ], + [ "is_optional_type", "sbepp_8hpp.html#a0d85db6739fbad1303022f741bc525ad", null ], + [ "is_required_type", "sbepp_8hpp.html#a1595d120959dfb84aa0667436e3e628a", null ], + [ "is_set", "sbepp_8hpp.html#a9a993b21b185033d9dbc71b7452ee0ca", null ], + [ "is_type", "sbepp_8hpp.html#a9b69b91021cb0ec2e5cba1f1d105fc60", null ], + [ "length_t", "sbepp_8hpp.html#aba708f43d3386d2d1718a7011721d5d1", null ], + [ "member_id_t", "sbepp_8hpp.html#aa9dc204d8524610e7a756133d7538949", null ], + [ "message_id_t", "sbepp_8hpp.html#a8f0e0669b7e7f7c4b3849a0418225cb6", null ], + [ "offset_t", "sbepp_8hpp.html#a8dafc5b7c26483f5e998bb7a4e87b406", null ], + [ "schema_id_t", "sbepp_8hpp.html#ad770bcda6122b136d640fadfb0242062", null ], + [ "traits_tag_t", "sbepp_8hpp.html#a0ddc0b9ce9e876a0ac772b4d1af64b4b", null ], + [ "version_t", "sbepp_8hpp.html#a97309329a3ef93149d698a0c5a9da6ba", null ], + [ "endian", "sbepp_8hpp.html#af318e06df8931dd69380221b420caec5", [ + [ "little", "sbepp_8hpp.html#af318e06df8931dd69380221b420caec5aaae6635e044ac56046b2893a529b5114", null ], + [ "big", "sbepp_8hpp.html#af318e06df8931dd69380221b420caec5ad861877da56b8b4ceb35c8cbfdf65bb4", null ], + [ "native", "sbepp_8hpp.html#af318e06df8931dd69380221b420caec5a8e5f3adee38c8fccc13c1f3be0143796", null ] + ] ], + [ "eos_null", "sbepp_8hpp.html#a0ee177accf7d675a768848bb29e1512f", [ + [ "none", "sbepp_8hpp.html#a0ee177accf7d675a768848bb29e1512fa334c4a4c42fdb79d7ebc3e73b517e6f8", null ], + [ "single", "sbepp_8hpp.html#a0ee177accf7d675a768848bb29e1512fadd5c07036f2975ff4bce568b6511d3bc", null ], + [ "all", "sbepp_8hpp.html#a0ee177accf7d675a768848bb29e1512faa181a603769c1f98ad927e7367c7aa51", null ] + ] ], + [ "field_presence", "sbepp_8hpp.html#a1ef75437d8fabab98acbec11d3702530", [ + [ "required", "sbepp_8hpp.html#a1ef75437d8fabab98acbec11d3702530aac67ede5a84eb5a1add7ff4440e9a485", null ], + [ "optional", "sbepp_8hpp.html#a1ef75437d8fabab98acbec11d3702530ad57c24f3fe52d16e7169b912dd647f0d", null ], + [ "constant", "sbepp_8hpp.html#a1ef75437d8fabab98acbec11d3702530a617ac08757d38a5a7ed91c224f0e90a0", null ] + ] ], + [ "addressof", "sbepp_8hpp.html#a870241790cb5759575b9f57d654392c2", null ], + [ "assertion_failed", "sbepp_8hpp.html#a9005f92162d3e00f4c4d1bd2e311f8b0", null ], + [ "dont_move", "sbepp_8hpp.html#a45f332328f49269fd0117bca732e7f36", null ], + [ "enum_to_string", "sbepp_8hpp.html#a6b2d51af3f026b165fa40fe1d7ab19db", null ], + [ "fill_group_header", "sbepp_8hpp.html#a7d29b37dfc83150ae34eaaf94dd4ba4c", null ], + [ "fill_message_header", "sbepp_8hpp.html#a3b5dd3446b423149a101530f056bee64", null ], + [ "get_header", "sbepp_8hpp.html#a12bbc67580e3f4bb2a0299033f01818d", null ], + [ "init", "sbepp_8hpp.html#a5ea08b77415fb7c92bf38fe43f7556ac", null ], + [ "init_const_cursor", "sbepp_8hpp.html#a399a5ac768befed2dc73396364eaa0c3", null ], + [ "init_cursor", "sbepp_8hpp.html#a125f1fbb9faadde1515f7822a7b6420f", null ], + [ "init_dont_move", "sbepp_8hpp.html#ac01ae8f083e748df66ee66514e26cb98", null ], + [ "make_const_view", "sbepp_8hpp.html#ae29503045a371b895af63f6ac6e0f3b9", null ], + [ "make_view", "sbepp_8hpp.html#a0dda436c46165f2419bb31e450e3b5b5", null ], + [ "size_bytes", "sbepp_8hpp.html#a9346fd507c2d3760ac40032180d1a7a6", null ], + [ "size_bytes", "sbepp_8hpp.html#a822c5047d62cddfb04c5ab2148ee9391", null ], + [ "size_bytes_checked", "sbepp_8hpp.html#abd9c1efb3c96d6fa71d1156811b47fa4", null ], + [ "skip", "sbepp_8hpp.html#a1ba1e2668d8e1886dfe03a4f5ddc1eea", null ], + [ "to_underlying", "sbepp_8hpp.html#a0d0a0af58987f30ee37fda64c15cc316", null ], + [ "visit", "sbepp_8hpp.html#abf05c2c5e3e81c441cce4db02c0c642b", null ], + [ "visit", "sbepp_8hpp.html#a3dafbabb41e8a71abde1535551de2c6d", null ], + [ "visit", "sbepp_8hpp.html#a47c1cd81154bc5c56524604f74d52d27", null ], + [ "visit", "sbepp_8hpp.html#a79950b0d08ddf3eafafb25a5693a6e2a", null ], + [ "visit_children", "sbepp_8hpp.html#a23abc2b6b892aea5b2b7f6dde6c24e69", null ], + [ "visit_children", "sbepp_8hpp.html#a306622dcac701f3c76abd3ea7c2902b6", null ], + [ "visit_set", "sbepp_8hpp.html#aa253364a4276b55c0a157aefaa185c37", null ], + [ "default_init", "sbepp_8hpp.html#aa2d011e14996368bdea31360b2fa674e", null ], + [ "is_array_type_v", "sbepp_8hpp.html#a1c24c2579e75aa3d0f8aa3d5ccabe456", null ], + [ "is_composite_v", "sbepp_8hpp.html#a052275a8856aec04d0b1433232a2f9a2", null ], + [ "is_data_v", "sbepp_8hpp.html#ae3c9b91bd3b6adf9969dfb572b510a24", null ], + [ "is_enum_v", "sbepp_8hpp.html#a261d44987027bd14f3a4ad1588cf1815", null ], + [ "is_flat_group_v", "sbepp_8hpp.html#a0e85c1f28d0a4792da99a7d520728d6b", null ], + [ "is_group_v", "sbepp_8hpp.html#a9ef51bb840527f9e8dd92f611364301a", null ], + [ "is_message_v", "sbepp_8hpp.html#abe6cd213ddfa41e39a2ec7ea540f62dc", null ], + [ "is_nested_group_v", "sbepp_8hpp.html#ae12b3a8d700756a267b5b9bd97ae56ed", null ], + [ "is_non_array_type_v", "sbepp_8hpp.html#a42ff955184242e2b19d1dfa422abd834", null ], + [ "is_optional_type_v", "sbepp_8hpp.html#ab0e51c934bf5a874f859d0f00f7e7c8a", null ], + [ "is_required_type_v", "sbepp_8hpp.html#a08918c20bbce610dab6ae9e0c9a14cac", null ], + [ "is_set_v", "sbepp_8hpp.html#ad3f88b2d3b60123eb13d33e0cde002bd", null ], + [ "is_type_v", "sbepp_8hpp.html#a0b1ce1456ccf22894e9ba47c4becb046", null ], + [ "nullopt", "sbepp_8hpp.html#a1ca10df8379b54c5c54a67841e3d8047", null ] +]; \ No newline at end of file diff --git a/1.4.1/sbepp_8hpp_source.html b/1.4.1/sbepp_8hpp_source.html new file mode 100644 index 0000000..ec2100d --- /dev/null +++ b/1.4.1/sbepp_8hpp_source.html @@ -0,0 +1,5178 @@ + + + + + + + + +sbepp: sbepp.hpp Source File + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sbepp.hpp
    +
    +
    +Go to the documentation of this file.
    1// SPDX-License-Identifier: MIT
    +
    2// Copyright (c) 2023, Oleksandr Koval
    +
    3
    +
    10#pragma once
    +
    11
    +
    12#include <array>
    +
    13#include <algorithm>
    +
    14#include <cstddef>
    +
    15#include <cstdint>
    +
    16#include <cstring>
    +
    17#include <iterator>
    +
    18#include <limits>
    +
    19#include <type_traits>
    +
    20#include <initializer_list>
    +
    21
    +
    22// Clang generates tons of warnings about code like `return {N};` where `N` is
    +
    23// calculated during generation or just a value from schema. Using braced
    +
    24// initialization syntax provides additional safety in such cases.
    +
    25#ifdef __clang__
    +
    26# define SBEPP_WARNINGS_OFF() \
    +
    27 _Pragma("clang diagnostic push"); \
    +
    28 _Pragma("clang diagnostic ignored \"-Wbraced-scalar-init\"")
    +
    29# define SBEPP_WARNINGS_ON() _Pragma("clang diagnostic pop")
    +
    30#else
    +
    31# define SBEPP_WARNINGS_OFF()
    +
    32# define SBEPP_WARNINGS_ON()
    +
    33#endif
    +
    34
    +
    35SBEPP_WARNINGS_OFF();
    +
    36
    +
    37#ifdef _MSVC_LANG
    +
    38# define SBEPP_CPLUSPLUS _MSVC_LANG
    +
    39#else
    +
    40# define SBEPP_CPLUSPLUS __cplusplus
    +
    41#endif
    +
    42
    +
    43#ifdef __has_include
    +
    44# if __has_include(<version>)
    +
    45# include <version>
    +
    46# endif
    +
    47#endif
    +
    48
    +
    58#if !defined(SBEPP_HAS_THREE_WAY_COMPARISON) \
    +
    59 && defined(__cpp_impl_three_way_comparison) \
    +
    60 && defined(__cpp_lib_three_way_comparison)
    +
    61# if(__cpp_impl_three_way_comparison >= 201907L) \
    +
    62 && (__cpp_lib_three_way_comparison >= 201907L)
    +
    63# define SBEPP_HAS_THREE_WAY_COMPARISON 1
    +
    64# include <compare>
    +
    65# endif
    +
    66#endif
    +
    67#ifndef SBEPP_HAS_THREE_WAY_COMPARISON
    +
    68# define SBEPP_HAS_THREE_WAY_COMPARISON 0
    +
    69#endif
    +
    70
    +
    72#if !defined(SBEPP_HAS_CONCEPTS) && defined(__cpp_concepts)
    +
    73# if(__cpp_concepts >= 201907L)
    +
    74# define SBEPP_HAS_CONCEPTS 1
    +
    75# endif
    +
    76#endif
    +
    77#ifndef SBEPP_HAS_CONCEPTS
    +
    78# define SBEPP_HAS_CONCEPTS 0
    +
    79#endif
    +
    80
    +
    82#if !defined(SBEPP_HAS_INLINE_VARS) && defined(__cpp_inline_variables)
    +
    83# if(__cpp_inline_variables >= 201606L)
    +
    84# define SBEPP_HAS_INLINE_VARS 1
    +
    85# define SBEPP_CPP17_INLINE_VAR inline
    +
    86# endif
    +
    87#endif
    +
    88#ifndef SBEPP_CPP17_INLINE_VAR
    +
    89# define SBEPP_HAS_INLINE_VARS 0
    +
    90# define SBEPP_CPP17_INLINE_VAR
    +
    91#endif
    +
    92
    +
    94#if !defined(SBEPP_HAS_ENDIAN) && defined(__cpp_lib_endian)
    +
    95# if(__cpp_lib_endian >= 201907L)
    +
    96# define SBEPP_HAS_ENDIAN 1
    +
    97# include <bit>
    +
    98# endif
    +
    99#endif
    +
    100#ifndef SBEPP_HAS_ENDIAN
    +
    101# define SBEPP_HAS_ENDIAN 0
    +
    102#endif
    +
    103
    +
    105#if !defined(SBEPP_HAS_BITCAST) && defined(__cpp_lib_bit_cast)
    +
    106# if(__cpp_lib_bit_cast >= 201806L)
    +
    107# define SBEPP_HAS_BITCAST 1
    +
    108# include <bit>
    +
    109# endif
    +
    110#endif
    +
    111#ifndef SBEPP_HAS_BITCAST
    +
    112# define SBEPP_HAS_BITCAST 0
    +
    113#endif
    +
    114
    +
    116#if !defined(SBEPP_HAS_BYTESWAP) && defined(__cpp_lib_byteswap)
    +
    117# if(__cpp_lib_byteswap >= 202110L)
    +
    118# define SBEPP_HAS_BYTESWAP 1
    +
    119# include <bit>
    +
    120# endif
    +
    121#endif
    +
    122#ifndef SBEPP_HAS_BYTESWAP
    +
    123# define SBEPP_HAS_BYTESWAP 0
    +
    124#endif
    +
    125
    +
    127#if !defined(SBEPP_HAS_CONSTEXPR_ALGORITHMS) \
    +
    128 && defined(__cpp_lib_constexpr_algorithms)
    +
    129# if(__cpp_lib_constexpr_algorithms >= 201806L)
    +
    130# define SBEPP_HAS_CONSTEXPR_ALGORITHMS 1
    +
    131# endif
    +
    132#endif
    +
    133#ifndef SBEPP_HAS_CONSTEXPR_ALGORITHMS
    +
    134# define SBEPP_HAS_CONSTEXPR_ALGORITHMS 0
    +
    135#endif
    +
    136
    +
    137#ifdef __has_cpp_attribute
    +
    138// Clang provides `nodiscard` in C++11 but then warns that it's a C++17 feature
    +
    139# if __has_cpp_attribute(nodiscard) \
    +
    140 && !(defined(__clang__) && (SBEPP_CPLUSPLUS < 201703L))
    +
    141# define SBEPP_CPP17_NODISCARD [[nodiscard]]
    +
    142# endif
    +
    143
    +
    144# if __has_cpp_attribute(deprecated) \
    +
    145 && !(defined(__clang__) && (SBEPP_CPLUSPLUS < 201402L))
    +
    146# define SBEPP_DEPRECATED [[deprecated]]
    +
    147# endif
    +
    148#endif
    +
    149
    +
    150#ifndef SBEPP_CPP17_NODISCARD
    +
    151# define SBEPP_CPP17_NODISCARD
    +
    152#endif
    +
    153
    +
    154#ifndef SBEPP_DEPRECATED
    +
    155# if defined(__GNUC__) || defined(__clang__)
    +
    156# define SBEPP_DEPRECATED __attribute__((deprecated))
    +
    157# elif defined(_MSC_VER)
    +
    158# define SBEPP_DEPRECATED __declspec(deprecated)
    +
    159# else
    +
    160# define SBEPP_DEPRECATED
    +
    161# endif
    +
    162#endif
    +
    163
    +
    165#if SBEPP_HAS_BITCAST && SBEPP_HAS_CONSTEXPR_ALGORITHMS
    +
    166# define SBEPP_HAS_CONSTEXPR_ACCESSORS 1
    +
    167#else
    +
    168# define SBEPP_HAS_CONSTEXPR_ACCESSORS 0
    +
    169#endif
    +
    170
    +
    171#if SBEPP_HAS_CONSTEXPR_ACCESSORS
    +
    172# include <bit>
    +
    173# define SBEPP_CPP20_CONSTEXPR constexpr
    +
    174#else
    +
    175# define SBEPP_CPP20_CONSTEXPR
    +
    176#endif
    +
    177
    +
    178#ifdef __cpp_constexpr
    +
    179# if(__cpp_constexpr >= 201304L)
    +
    180# define SBEPP_CPP14_CONSTEXPR constexpr
    +
    181# endif
    +
    182#else
    +
    183# if(SBEPP_CPLUSPLUS >= 201402L)
    +
    184# define SBEPP_CPP14_CONSTEXPR constexpr
    +
    185# endif
    +
    186#endif
    +
    187#ifndef SBEPP_CPP14_CONSTEXPR
    +
    188# define SBEPP_CPP14_CONSTEXPR
    +
    189#endif
    +
    190
    +
    192#if !defined(SBEPP_HAS_RANGES) && defined(__cpp_lib_ranges)
    +
    193# if(__cpp_lib_ranges >= 201911L)
    +
    194# define SBEPP_HAS_RANGES 1
    +
    195# include <ranges>
    +
    196# endif
    +
    197#endif
    +
    198#ifndef SBEPP_HAS_RANGES
    +
    199# define SBEPP_HAS_RANGES 0
    +
    200#endif
    +
    201
    +
    204#if !defined(SBEPP_HAS_IS_CONSTANT_EVALUATED) \
    +
    205 && defined(__cpp_lib_is_constant_evaluated) \
    +
    206 && (__cpp_lib_is_constant_evaluated >= 201811L)
    +
    207# define SBEPP_HAS_IS_CONSTANT_EVALUATED 1
    +
    208#endif
    +
    209#ifndef SBEPP_HAS_IS_CONSTANT_EVALUATED
    +
    210# define SBEPP_HAS_IS_CONSTANT_EVALUATED 0
    +
    211#endif
    +
    212
    +
    214
    +
    215#ifdef SBEPP_DOXYGEN
    +
    217# define SBEPP_DISABLE_ASSERTS
    +
    218
    +
    223# define SBEPP_ASSERT_HANDLER
    +
    224
    +
    229# define SBEPP_ENABLE_ASSERTS_WITH_HANDLER
    +
    230
    +
    +
    231namespace sbepp
    +
    232{
    +
    243[[noreturn]] void assertion_failed(
    +
    244 char const* expr, char const* function, char const* file, long line);
    +
    245} // namespace sbepp
    +
    +
    246#endif
    +
    247
    +
    248#ifdef SBEPP_DISABLE_ASSERTS
    +
    249# define SBEPP_SIZE_CHECKS_ENABLED 0
    +
    250# define SBEPP_ASSERT(expr) ((void)0)
    +
    251#elif defined(SBEPP_ASSERT_HANDLER) \
    +
    252 || defined(SBEPP_ENABLE_ASSERTS_WITH_HANDLER)
    +
    253# if !defined(NDEBUG) || defined(SBEPP_ENABLE_ASSERTS_WITH_HANDLER)
    +
    254namespace sbepp
    +
    255{
    +
    256// must be defined by user
    +
    257[[noreturn]] void assertion_failed(
    +
    258 char const* expr, char const* function, char const* file, long line);
    +
    259} // namespace sbepp
    +
    260
    +
    261# define SBEPP_SIZE_CHECKS_ENABLED 1
    +
    262# define SBEPP_ASSERT(expr) \
    +
    263 (static_cast<bool>(expr) \
    +
    264 ? ((void)0) \
    +
    265 : ::sbepp::assertion_failed( \
    +
    266 #expr, __func__, __FILE__, __LINE__))
    +
    267# else
    +
    268# define SBEPP_SIZE_CHECKS_ENABLED 0
    +
    269# define SBEPP_ASSERT(expr) ((void)0)
    +
    270# endif
    +
    271#else
    +
    272# include <cassert>
    +
    273# ifdef NDEBUG
    +
    274# define SBEPP_SIZE_CHECKS_ENABLED 0
    +
    275# else
    +
    276# define SBEPP_SIZE_CHECKS_ENABLED 1
    +
    277# endif
    +
    278# define SBEPP_ASSERT(expr) assert(expr)
    +
    279#endif
    +
    280
    +
    281#define SBEPP_SIZE_CHECK(begin, end, offset, size) \
    +
    282 SBEPP_ASSERT( \
    +
    283 (begin) \
    +
    284 && (((offset) + (size)) <= static_cast<std::size_t>((end) - (begin))))
    +
    285
    +
    287namespace sbepp
    +
    288{
    +
    290using length_t = std::uint64_t;
    +
    291// for unknown reasons, in the SBE standard `offset` is specified as an unsigned
    +
    292// 32-bit integer which makes no sense since `length` has 64 bits
    +
    294using offset_t = std::uint64_t;
    +
    297using version_t = std::uint64_t;
    +
    299using schema_id_t = std::uint32_t;
    +
    301using message_id_t = std::uint32_t;
    +
    304using block_length_t = std::uint64_t;
    +
    306using member_id_t = std::uint16_t;
    +
    308using choice_index_t = std::uint8_t;
    +
    309
    +
    + +
    313{
    +
    315 required,
    +
    317 optional,
    + +
    320};
    +
    +
    321
    +
    322#ifdef SBEPP_DOXYGEN
    +
    327# define SBEPP_BYTE_ORDER
    +
    328#endif
    +
    329
    +
    335#ifdef SBEPP_DOXYGEN
    +
    +
    336enum class endian
    +
    337{
    +
    339 little,
    +
    341 big,
    +
    343 native
    +
    344};
    +
    +
    345#elif SBEPP_HAS_ENDIAN
    +
    346using endian = std::endian;
    +
    347#else
    +
    348// https://en.cppreference.com/w/cpp/types/endian
    +
    349enum class endian
    +
    350{
    +
    351# if defined(_WIN32) || defined(WIN32)
    +
    352 little = 0,
    +
    353 big = 1,
    +
    354 native = little
    +
    355# elif defined(__BYTE_ORDER__)
    +
    356 little = __ORDER_LITTLE_ENDIAN__,
    +
    357 big = __ORDER_BIG_ENDIAN__,
    +
    358 native = __BYTE_ORDER__
    +
    359# elif defined(SBEPP_BYTE_ORDER)
    +
    360 little = 0,
    +
    361 big = 1,
    + +
    363# else
    +
    364# error "Byte order cannot be detected.\
    +
    365 Define SBEPP_BYTE_ORDER to 'little' or 'big'"
    +
    366# endif
    +
    367};
    +
    368#endif
    +
    369
    +
    370static_assert(
    + +
    372 "Mixed-endian is not supported");
    +
    373
    +
    +
    376namespace detail
    +
    377{
    +
    378// modern C++ bits
    +
    379template<bool B, typename T = void>
    +
    380using enable_if_t = typename std::enable_if<B, T>::type;
    +
    381
    +
    382template<typename T>
    +
    383using remove_cv_t = typename std::remove_cv<T>::type;
    +
    384
    +
    385template<typename T>
    +
    386using remove_reference_t = typename std::remove_reference<T>::type;
    +
    387
    +
    388template<typename ByteFrom, typename ByteTo>
    +
    389using enable_if_convertible_t =
    +
    390 enable_if_t<std::is_convertible<ByteFrom*, ByteTo*>::value>;
    +
    391
    +
    392template<typename Byte, typename T = void>
    +
    393using enable_if_writable_t = enable_if_t<!std::is_const<Byte>::value, T>;
    +
    394
    +
    395template<typename...>
    +
    396using void_t = void;
    +
    397
    +
    398#if !SBEPP_HAS_BYTESWAP
    +
    399
    +
    400// intrinsics detection is taken from <boost/endian/detail/intrinsic.hpp>
    +
    401# ifndef __has_builtin // Optional of course
    +
    402# define __has_builtin(x) 0 // Compatibility with non-clang compilers
    +
    403# endif
    +
    404
    +
    405# if defined(_MSC_VER) && (!defined(__clang__) || defined(__c2__))
    +
    406
    +
    407# include <cstdlib>
    +
    408
    +
    409inline std::uint64_t byteswap(std::uint64_t v) noexcept
    +
    410{
    +
    411 return _byteswap_uint64(v);
    +
    412}
    +
    413
    +
    414inline std::uint32_t byteswap(std::uint32_t v) noexcept
    +
    415{
    +
    416 return _byteswap_ulong(v);
    +
    417}
    +
    418
    +
    419inline std::uint16_t byteswap(std::uint16_t v) noexcept
    +
    420{
    +
    421 return _byteswap_ushort(v);
    +
    422}
    +
    423
    +
    424# elif( \
    +
    425 defined(__clang__) && __has_builtin(__builtin_bswap32) \
    +
    426 && __has_builtin(__builtin_bswap64)) \
    +
    427 || (defined(__GNUC__) \
    +
    428 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
    +
    429
    +
    430# if(defined(__clang__) && __has_builtin(__builtin_bswap16)) \
    +
    431 || (defined(__GNUC__) \
    +
    432 && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))
    +
    433
    +
    434inline std::uint16_t byteswap(std::uint16_t v) noexcept
    +
    435{
    +
    436 return __builtin_bswap16(v);
    +
    437}
    +
    438
    +
    439# else
    +
    440
    +
    441inline std::uint16_t byteswap(std::uint16_t v) noexcept
    +
    442{
    +
    443 return __builtin_bswap32(v) << 16;
    +
    444}
    +
    445
    +
    446# endif
    +
    447
    +
    448inline std::uint64_t byteswap(std::uint64_t v) noexcept
    +
    449{
    +
    450 return __builtin_bswap64(v);
    +
    451}
    +
    452
    +
    453inline std::uint32_t byteswap(std::uint32_t v) noexcept
    +
    454{
    +
    455 return __builtin_bswap32(v);
    +
    456}
    +
    457
    +
    458# else
    +
    459
    +
    460constexpr std::uint64_t byteswap(std::uint64_t v) noexcept
    +
    461{
    +
    462 return ((v & UINT64_C(0x00000000000000FF)) << 56)
    +
    463 | ((v & UINT64_C(0x000000000000FF00)) << 40)
    +
    464 | ((v & UINT64_C(0x0000000000FF0000)) << 24)
    +
    465 | ((v & UINT64_C(0x00000000FF000000)) << 8)
    +
    466 | ((v & UINT64_C(0x000000FF00000000)) >> 8)
    +
    467 | ((v & UINT64_C(0x0000FF0000000000)) >> 24)
    +
    468 | ((v & UINT64_C(0x00FF000000000000)) >> 40)
    +
    469 | ((v & UINT64_C(0xFF00000000000000)) >> 56);
    +
    470}
    +
    471
    +
    472constexpr std::uint32_t byteswap(std::uint32_t v) noexcept
    +
    473{
    +
    474 return ((v & UINT32_C(0x000000FF)) << 24)
    +
    475 | ((v & UINT32_C(0x0000FF00)) << 8)
    +
    476 | ((v & UINT32_C(0x00FF0000)) >> 8)
    +
    477 | ((v & UINT32_C(0xFF000000)) >> 24);
    +
    478}
    +
    479
    +
    480constexpr std::uint16_t byteswap(std::uint16_t v) noexcept
    +
    481{
    +
    482 return ((v & UINT16_C(0x00FF)) << 8) | ((v & UINT16_C(0xFF00)) >> 8);
    +
    483}
    +
    484
    +
    485# endif
    +
    486#endif
    +
    487
    +
    488template<typename T>
    +
    489struct fp_underlying_type;
    +
    490
    +
    491template<typename T>
    +
    492using fp_underlying_type_t = typename fp_underlying_type<T>::type;
    +
    493
    +
    494template<>
    +
    495struct fp_underlying_type<float>
    +
    496{
    +
    497 using type = std::uint32_t;
    +
    498};
    +
    499
    +
    500template<>
    +
    501struct fp_underlying_type<double>
    +
    502{
    +
    503 using type = std::uint64_t;
    +
    504};
    +
    505
    +
    506// usually, I don't like putting `enable_if` into return type but these
    +
    507// overloads are not public and it looks better than adding `typename = void` to
    +
    508// template headers
    +
    509template<typename T>
    +
    510constexpr enable_if_t<sizeof(T) == 1, T> byteswap(T value) noexcept
    +
    511{
    +
    512 return value;
    +
    513}
    +
    514
    +
    515template<typename T>
    +
    516SBEPP_CPP20_CONSTEXPR
    +
    517 enable_if_t<!std::is_floating_point<T>::value && (sizeof(T) != 1), T>
    +
    518 byteswap(T value) noexcept
    +
    519{
    +
    520#if SBEPP_HAS_BYTESWAP
    +
    521 // casts are required because this overload is selected for enums which are
    +
    522 // not integral and can't be passed to `std::byteswap` as is
    +
    523 return static_cast<T>(std::byteswap(
    +
    524 static_cast<typename std::make_unsigned<T>::type>(value)));
    +
    525#else
    +
    526 return static_cast<T>(
    +
    527 byteswap(static_cast<typename std::make_unsigned<T>::type>(value)));
    +
    528#endif
    +
    529}
    +
    530
    +
    531template<typename T>
    +
    532enable_if_t<std::is_floating_point<T>::value, T> byteswap(T value) noexcept
    +
    533{
    +
    534 fp_underlying_type_t<T> underlying{};
    +
    535 std::memcpy(&underlying, &value, sizeof(underlying));
    +
    536 underlying = byteswap(underlying);
    +
    537
    +
    538 std::memcpy(&value, &underlying, sizeof(underlying));
    +
    539
    +
    540 return value;
    +
    541}
    +
    542
    +
    543template<typename T, endian E, typename Byte>
    +
    544SBEPP_CPP20_CONSTEXPR T get_primitive(const Byte* ptr)
    +
    545{
    +
    546#if SBEPP_HAS_BITCAST
    +
    547 std::array<Byte, sizeof(T)> arr;
    +
    548 if(E == endian::native)
    +
    549 {
    +
    550 std::copy(ptr, ptr + sizeof(T), std::begin(arr));
    +
    551 }
    +
    552 else
    +
    553 {
    +
    554 std::reverse_copy(ptr, ptr + sizeof(T), std::begin(arr));
    +
    555 }
    +
    556 return std::bit_cast<T>(arr);
    +
    557#else
    +
    558 // old compilers don't optimize `std::copy` approach good enough, that's
    +
    559 // why explicit `std::memcpy` call is required
    +
    560 T res;
    +
    561 std::memcpy(&res, ptr, sizeof(T));
    +
    562 if(E == endian::native)
    +
    563 {
    +
    564 return res;
    +
    565 }
    +
    566 else
    +
    567 {
    +
    568 return byteswap(res);
    +
    569 }
    +
    570#endif
    +
    571}
    +
    572
    +
    573template<endian E, typename T, typename Byte>
    +
    574SBEPP_CPP20_CONSTEXPR void set_primitive(Byte* ptr, T value)
    +
    575{
    +
    576#if SBEPP_HAS_BITCAST
    +
    577 auto arr = std::bit_cast<std::array<Byte, sizeof(T)>>(value);
    +
    578 if(E == endian::native)
    +
    579 {
    +
    580 std::copy(std::begin(arr), std::end(arr), ptr);
    +
    581 }
    +
    582 else
    +
    583 {
    +
    584 std::reverse_copy(std::begin(arr), std::end(arr), ptr);
    +
    585 }
    +
    586#else
    +
    587 // old compilers don't optimize `std::copy` approach good enough, that's
    +
    588 // why explicit `std::memcpy` call is required
    +
    589 if(E != endian::native)
    +
    590 {
    +
    591 value = byteswap(value);
    +
    592 }
    +
    593 std::memcpy(ptr, &value, sizeof(T));
    +
    594#endif
    +
    595}
    +
    596
    +
    597struct fill_message_header_tag
    +
    598{
    +
    599 explicit fill_message_header_tag() = default;
    +
    600};
    +
    601
    +
    602struct fill_group_header_tag
    +
    603{
    +
    604 explicit fill_group_header_tag() = default;
    +
    605};
    +
    606
    +
    607struct size_bytes_tag
    +
    608{
    +
    609 explicit size_bytes_tag() = default;
    +
    610};
    +
    611
    +
    612struct addressof_tag
    +
    613{
    +
    614 explicit addressof_tag() = default;
    +
    615};
    +
    616
    +
    617struct end_ptr_tag
    +
    618{
    +
    619 explicit end_ptr_tag() = default;
    +
    620};
    +
    621
    +
    622struct get_header_tag
    +
    623{
    +
    624 explicit get_header_tag() = default;
    +
    625};
    +
    626
    +
    627struct get_block_length_tag
    +
    628{
    +
    629 explicit get_block_length_tag() = default;
    +
    630};
    +
    631
    +
    632struct get_bit_tag
    +
    633{
    +
    634 explicit get_bit_tag() = default;
    +
    635};
    +
    636
    +
    637struct set_bit_tag
    +
    638{
    +
    639 explicit set_bit_tag() = default;
    +
    640};
    +
    641
    +
    642struct get_level_tag
    +
    643{
    +
    644 explicit get_level_tag() = default;
    +
    645};
    +
    646
    +
    647struct visit_tag
    +
    648{
    +
    649 explicit visit_tag() = default;
    +
    650};
    +
    651
    +
    652struct visit_children_tag
    +
    653{
    +
    654 explicit visit_children_tag() = default;
    +
    655};
    +
    656
    +
    657struct enum_to_str_tag
    +
    658{
    +
    659 explicit enum_to_str_tag() = default;
    +
    660};
    +
    661
    +
    662struct visit_set_tag
    +
    663{
    +
    664 explicit visit_set_tag() = default;
    +
    665};
    +
    666
    +
    667template<typename T, typename U, endian E, typename View>
    +
    668SBEPP_CPP20_CONSTEXPR T
    +
    669 get_value(const View view, const std::size_t offset) noexcept
    +
    670{
    +
    671 SBEPP_SIZE_CHECK(
    +
    672 view(addressof_tag{}), view(end_ptr_tag{}), offset, sizeof(U));
    +
    673 return T{get_primitive<U, E>(view(addressof_tag{}) + offset)};
    +
    674}
    +
    675
    +
    676template<endian E, typename T, typename View>
    +
    677SBEPP_CPP20_CONSTEXPR void
    +
    678 set_value(const View view, const std::size_t offset, const T value) noexcept
    +
    679{
    +
    680 SBEPP_SIZE_CHECK(
    +
    681 view(addressof_tag{}), view(end_ptr_tag{}), offset, sizeof(T));
    +
    682 set_primitive<E>(view(addressof_tag{}) + offset, value);
    +
    683}
    +
    684
    +
    685template<typename Res, typename View>
    +
    686SBEPP_CPP20_CONSTEXPR Res
    +
    687 get_static_field_view(const View view, const std::size_t offset) noexcept
    +
    688{
    +
    689 SBEPP_SIZE_CHECK(view(addressof_tag{}), view(end_ptr_tag{}), offset, 0);
    +
    690 return {view(addressof_tag{}) + offset, view(end_ptr_tag{})};
    +
    691}
    +
    692
    +
    693template<typename Group, typename View>
    +
    694SBEPP_CPP20_CONSTEXPR Group
    +
    695 get_first_dynamic_field_view(const View view) noexcept
    +
    696{
    +
    697 return {
    +
    698 view(get_level_tag{}) + view(get_block_length_tag{}),
    +
    699 view(end_ptr_tag{})};
    +
    700}
    +
    701
    +
    702template<typename Group, typename View, typename Prev>
    +
    703SBEPP_CPP20_CONSTEXPR Group
    +
    704 get_dynamic_field_view(const View view, const Prev prev) noexcept
    +
    705{
    +
    706 return {
    +
    707 prev(addressof_tag{}) + prev(size_bytes_tag{}), view(end_ptr_tag{})};
    +
    708}
    +
    709
    +
    712template<typename Byte>
    +
    + +
    714{
    +
    715public:
    +
    716 static_assert(sizeof(Byte) == 1, "Byte must represent a single byte");
    +
    717
    +
    718 template<typename Byte2>
    +
    719 friend class byte_range;
    +
    720
    +
    722 byte_range() = default;
    +
    723
    +
    +
    725 SBEPP_CPP14_CONSTEXPR byte_range(Byte* begin, Byte* end) noexcept
    +
    726 : begin{begin}
    +
    727#if SBEPP_SIZE_CHECKS_ENABLED
    +
    728 ,
    +
    729 end{end}
    +
    730#endif
    +
    731 {
    +
    732 (void)end;
    +
    733 }
    +
    +
    734
    +
    +
    736 constexpr byte_range(Byte* ptr, const std::size_t size) noexcept
    +
    737 : byte_range{ptr, ptr + size}
    +
    738 {
    +
    739 }
    +
    +
    740
    +
    742 template<typename Byte2, typename = enable_if_convertible_t<Byte2, Byte>>
    +
    743 // NOLINTNEXTLINE: intentionally implicit
    +
    +
    744 constexpr byte_range(const byte_range<Byte2>& other) noexcept
    +
    745 : begin{other.begin}
    +
    746#if SBEPP_SIZE_CHECKS_ENABLED
    +
    747 ,
    +
    748 end{other.end}
    +
    749#endif
    +
    750 {
    +
    751 }
    +
    +
    752
    +
    753 constexpr Byte* operator()(addressof_tag) const noexcept
    +
    754 {
    +
    755 return begin;
    +
    756 }
    +
    757
    +
    758 constexpr Byte* operator()(end_ptr_tag) const noexcept
    +
    759 {
    +
    760#if SBEPP_SIZE_CHECKS_ENABLED
    +
    761 return end;
    +
    762#else
    +
    763 return nullptr;
    +
    764#endif
    +
    765 }
    +
    766
    +
    767private:
    +
    768 Byte* begin{};
    +
    769#if SBEPP_SIZE_CHECKS_ENABLED
    +
    770 Byte* end{};
    +
    771#endif
    +
    772};
    +
    +
    773} // namespace detail
    +
    +
    774
    +
    781template<typename Byte>
    +
    + +
    783{
    +
    784public:
    +
    786 using byte_type = Byte;
    +
    787
    +
    788 // in accessors we have to use trailing return type because in "skip" mode
    +
    789 // they should return `void`. In most cases it's not a problem but
    +
    790 // `get_group_view` and `get_data_view` take lambdas which were not allowed
    +
    791 // in unevaluated context (e.g. decltype) prior to C++20 so we need this
    +
    792 // alias to specify return types for them. First attempt used
    +
    793 // pointer-to-member instead of lambda but GCC doesn't support it so I
    +
    794 // switched to simpler approach with lambda and trait.
    +
    795 template<typename T>
    +
    796 using result_type = T;
    +
    797
    +
    799 cursor() = default;
    +
    800
    +
    808 template<
    +
    809 typename Byte2,
    +
    810 typename = detail::enable_if_convertible_t<Byte2, Byte>>
    +
    811 // NOLINTNEXTLINE: implicit conversion is intentional
    +
    +
    812 constexpr cursor(cursor<Byte2> other) noexcept : ptr{other.ptr}
    +
    813 {
    +
    814 }
    +
    +
    815
    +
    824 template<
    +
    825 typename Byte2,
    +
    826 typename = detail::enable_if_convertible_t<Byte2, Byte>>
    +
    +
    827 SBEPP_CPP14_CONSTEXPR cursor& operator=(cursor<Byte2> other) noexcept
    +
    828 {
    +
    829 ptr = other.ptr;
    +
    830 return *this;
    +
    831 }
    +
    +
    832
    +
    +
    839 SBEPP_CPP14_CONSTEXPR Byte*& pointer() noexcept
    +
    840 {
    +
    841 return ptr;
    +
    842 }
    +
    +
    843
    +
    +
    849 SBEPP_CPP14_CONSTEXPR Byte* pointer() const noexcept
    +
    850 {
    +
    851 return ptr;
    +
    852 }
    +
    +
    853
    +
    854 template<typename T, typename U, endian E, typename View>
    +
    855 SBEPP_CPP20_CONSTEXPR T get_value(
    +
    856 const View view,
    +
    857 const std::size_t offset,
    +
    858 const std::size_t absolute_offset) noexcept
    +
    859 {
    +
    860 SBEPP_ASSERT(
    +
    861 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    862 == (ptr + offset))
    +
    863 && "Wrong cursor value");
    +
    864 SBEPP_SIZE_CHECK(ptr, view(detail::end_ptr_tag{}), offset, sizeof(U));
    +
    865 T res{detail::get_primitive<U, E>(ptr + offset)};
    +
    866 ptr += offset + sizeof(U);
    +
    867 return res;
    +
    868 }
    +
    869
    +
    870 template<endian E, typename T, typename View>
    +
    871 SBEPP_CPP20_CONSTEXPR void set_value(
    +
    872 const View view,
    +
    873 const std::size_t offset,
    +
    874 const std::size_t absolute_offset,
    +
    875 const T value) noexcept
    +
    876 {
    +
    877 SBEPP_ASSERT(
    +
    878 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    879 == (ptr + offset))
    +
    880 && "Wrong cursor value");
    +
    881 SBEPP_SIZE_CHECK(ptr, view(detail::end_ptr_tag{}), offset, sizeof(T));
    +
    882 detail::set_primitive<E>(ptr + offset, value);
    +
    883 ptr += offset + sizeof(T);
    +
    884 }
    +
    885
    +
    886 template<typename T, typename U, endian E, typename View>
    +
    887 SBEPP_CPP20_CONSTEXPR T get_last_value(
    +
    888 const View view,
    +
    889 const std::size_t offset,
    +
    890 const std::size_t absolute_offset) noexcept
    +
    891 {
    +
    892 SBEPP_ASSERT(
    +
    893 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    894 == (ptr + offset))
    +
    895 && "Wrong cursor value");
    +
    896 SBEPP_SIZE_CHECK(ptr, view(detail::end_ptr_tag{}), offset, sizeof(U));
    +
    897 auto res = T{detail::get_primitive<U, E>(ptr + offset)};
    +
    898 ptr = view(detail::get_level_tag{})
    +
    899 + view(detail::get_block_length_tag{});
    +
    900 return res;
    +
    901 }
    +
    902
    +
    903 template<endian E, typename T, typename View>
    +
    904 SBEPP_CPP20_CONSTEXPR void set_last_value(
    +
    905 const View view,
    +
    906 const std::size_t offset,
    +
    907 const std::size_t absolute_offset,
    +
    908 const T value) noexcept
    +
    909 {
    +
    910 SBEPP_ASSERT(
    +
    911 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    912 == (ptr + offset))
    +
    913 && "Wrong cursor value");
    +
    914 SBEPP_SIZE_CHECK(ptr, view(detail::end_ptr_tag{}), offset, sizeof(T));
    +
    915 detail::set_primitive<E>(ptr + offset, value);
    +
    916 ptr = view(detail::get_level_tag{})
    +
    917 + view(detail::get_block_length_tag{});
    +
    918 }
    +
    919
    +
    920 template<typename Res, typename View>
    +
    921 SBEPP_CPP20_CONSTEXPR Res get_static_field_view(
    +
    922 const View view,
    +
    923 const std::size_t offset,
    +
    924 const std::size_t absolute_offset) noexcept
    +
    925 {
    +
    926 SBEPP_ASSERT(
    +
    927 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    928 == (ptr + offset))
    +
    929 && "Wrong cursor value");
    +
    930 SBEPP_SIZE_CHECK(ptr, view(detail::end_ptr_tag{}), offset, 0);
    +
    931 Res res{ptr + offset, view(detail::end_ptr_tag{})};
    +
    932 ptr += offset + res(detail::size_bytes_tag{});
    +
    933 return res;
    +
    934 }
    +
    935
    +
    936 template<typename Res, typename View>
    +
    937 SBEPP_CPP20_CONSTEXPR Res get_last_static_field_view(
    +
    938 const View view,
    +
    939 const std::size_t offset,
    +
    940 const std::size_t absolute_offset) noexcept
    +
    941 {
    +
    942 SBEPP_ASSERT(
    +
    943 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    944 == (ptr + offset))
    +
    945 && "Wrong cursor value");
    +
    946 SBEPP_SIZE_CHECK(ptr, view(detail::end_ptr_tag{}), offset, 0);
    +
    947 Res res{ptr + offset, view(detail::end_ptr_tag{})};
    +
    948 ptr = view(detail::get_level_tag{})
    +
    949 + view(detail::get_block_length_tag{});
    +
    950 return res;
    +
    951 }
    +
    952
    +
    953 template<typename ResView, typename View>
    +
    954 SBEPP_CPP20_CONSTEXPR ResView get_first_group_view(const View view) noexcept
    +
    955 {
    +
    956 ptr = view(detail::get_level_tag{})
    +
    957 + view(detail::get_block_length_tag{});
    +
    958 ResView g{ptr, view(detail::end_ptr_tag{})};
    +
    959 ptr += g(detail::get_header_tag{})(detail::size_bytes_tag{});
    +
    960
    +
    961 return g;
    +
    962 }
    +
    963
    +
    964 template<typename ResView, typename View>
    +
    965 SBEPP_CPP20_CONSTEXPR ResView get_first_data_view(const View view) noexcept
    +
    966 {
    +
    967 ptr = view(detail::get_level_tag{})
    +
    968 + view(detail::get_block_length_tag{});
    +
    969 ResView d{ptr, view(detail::end_ptr_tag{})};
    +
    970 ptr += d(detail::size_bytes_tag{});
    +
    971
    +
    972 return d;
    +
    973 }
    +
    974
    +
    975 template<typename ResView, typename View, typename Getter>
    +
    976 SBEPP_CPP20_CONSTEXPR ResView
    +
    977 get_group_view(const View view, Getter&& getter) noexcept
    +
    978 {
    +
    979 SBEPP_ASSERT(
    +
    980 (getter()(detail::addressof_tag{}) == ptr) && "Wrong cursor value");
    +
    981 ResView res{ptr, view(detail::end_ptr_tag{})};
    +
    982 auto header = res(detail::get_header_tag{});
    +
    983 ptr += header(detail::size_bytes_tag{});
    +
    984 return res;
    +
    985 }
    +
    986
    +
    987 template<typename ResView, typename View, typename Getter>
    +
    988 SBEPP_CPP20_CONSTEXPR ResView
    +
    989 get_data_view(const View view, Getter&& getter) noexcept
    +
    990 {
    +
    991 SBEPP_ASSERT(
    +
    992 (getter()(detail::addressof_tag{}) == ptr) && "Wrong cursor value");
    +
    993 ResView res{ptr, view(detail::end_ptr_tag{})};
    +
    994 ptr += res(detail::size_bytes_tag{});
    +
    995 return res;
    +
    996 }
    +
    997
    +
    998private:
    +
    999 template<typename T>
    +
    1000 friend class cursor;
    +
    1001
    +
    1002 Byte* ptr{};
    +
    1003};
    +
    +
    1004
    +
    1005namespace detail
    +
    1006{
    +
    1007template<typename Byte>
    +
    1008class init_cursor_wrapper
    +
    1009{
    +
    1010public:
    +
    1011 using byte_type = Byte;
    +
    1012
    +
    1013 template<typename T>
    +
    1014 using result_type = T;
    +
    1015
    +
    1016 init_cursor_wrapper() = default;
    +
    1017
    +
    1018 explicit constexpr init_cursor_wrapper(sbepp::cursor<Byte>& cursor)
    +
    1019 : cursor{&cursor}
    +
    1020 {
    +
    1021 }
    +
    1022
    +
    1023 template<typename T, typename U, endian E, typename View>
    +
    1024 SBEPP_CPP20_CONSTEXPR T get_value(
    +
    1025 const View view,
    +
    1026 const std::size_t /*offset*/,
    +
    1027 const std::size_t absolute_offset) noexcept
    +
    1028 {
    +
    1029 SBEPP_SIZE_CHECK(
    +
    1030 view(addressof_tag{}),
    +
    1031 view(end_ptr_tag{}),
    +
    1032 absolute_offset,
    +
    1033 sizeof(U));
    +
    1034 T res{get_primitive<U, E>(view(addressof_tag{}) + absolute_offset)};
    +
    1035 cursor->pointer() = view(addressof_tag{}) + absolute_offset + sizeof(U);
    +
    1036 return res;
    +
    1037 }
    +
    1038
    +
    1039 template<endian E, typename T, typename View>
    +
    1040 SBEPP_CPP20_CONSTEXPR void set_value(
    +
    1041 const View view,
    +
    1042 const std::size_t /*offset*/,
    +
    1043 const std::size_t absolute_offset,
    +
    1044 const T value) noexcept
    +
    1045 {
    +
    1046 SBEPP_SIZE_CHECK(
    +
    1047 view(addressof_tag{}),
    +
    1048 view(end_ptr_tag{}),
    +
    1049 absolute_offset,
    +
    1050 sizeof(T));
    +
    1051 set_primitive<E>(view(addressof_tag{}) + absolute_offset, value);
    +
    1052 cursor->pointer() = view(addressof_tag{}) + absolute_offset + sizeof(T);
    +
    1053 }
    +
    1054
    +
    1055 template<typename T, typename U, endian E, typename View>
    +
    1056 SBEPP_CPP20_CONSTEXPR T get_last_value(
    +
    1057 const View view,
    +
    1058 const std::size_t /*offset*/,
    +
    1059 const std::size_t absolute_offset) noexcept
    +
    1060 {
    +
    1061 SBEPP_SIZE_CHECK(
    +
    1062 view(addressof_tag{}),
    +
    1063 view(end_ptr_tag{}),
    +
    1064 absolute_offset,
    +
    1065 sizeof(U));
    +
    1066 T res{get_primitive<U, E>(view(addressof_tag{}) + absolute_offset)};
    +
    1067 cursor->pointer() =
    +
    1068 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1069 return res;
    +
    1070 }
    +
    1071
    +
    1072 template<endian E, typename T, typename View>
    +
    1073 SBEPP_CPP20_CONSTEXPR void set_last_value(
    +
    1074 const View view,
    +
    1075 const std::size_t /*offset*/,
    +
    1076 const std::size_t absolute_offset,
    +
    1077 const T value) noexcept
    +
    1078 {
    +
    1079 SBEPP_SIZE_CHECK(
    +
    1080 view(addressof_tag{}),
    +
    1081 view(end_ptr_tag{}),
    +
    1082 absolute_offset,
    +
    1083 sizeof(T));
    +
    1084 set_primitive<E>(view(addressof_tag{}) + absolute_offset, value);
    +
    1085 cursor->pointer() =
    +
    1086 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1087 }
    +
    1088
    +
    1089 template<typename Res, typename View>
    +
    1090 SBEPP_CPP20_CONSTEXPR Res get_static_field_view(
    +
    1091 const View view,
    +
    1092 const std::size_t /*offset*/,
    +
    1093 const std::size_t absolute_offset) noexcept
    +
    1094 {
    +
    1095 SBEPP_SIZE_CHECK(
    +
    1096 view(addressof_tag{}), view(end_ptr_tag{}), absolute_offset, 0);
    +
    1097 Res res{view(addressof_tag{}) + absolute_offset, view(end_ptr_tag{})};
    +
    1098 cursor->pointer() = res(addressof_tag{}) + res(size_bytes_tag{});
    +
    1099 return res;
    +
    1100 }
    +
    1101
    +
    1102 template<typename Res, typename View>
    +
    1103 SBEPP_CPP20_CONSTEXPR Res get_last_static_field_view(
    +
    1104 const View view,
    +
    1105 const std::size_t /*offset*/,
    +
    1106 const std::size_t absolute_offset) noexcept
    +
    1107 {
    +
    1108 SBEPP_SIZE_CHECK(
    +
    1109 view(addressof_tag{}), view(end_ptr_tag{}), absolute_offset, 0);
    +
    1110 Res res{view(addressof_tag{}) + absolute_offset, view(end_ptr_tag{})};
    +
    1111 cursor->pointer() =
    +
    1112 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1113 return res;
    +
    1114 }
    +
    1115
    +
    1116 template<typename ResView, typename View>
    +
    1117 SBEPP_CPP20_CONSTEXPR ResView get_first_group_view(const View view) noexcept
    +
    1118 {
    +
    1119 return cursor->template get_first_group_view<ResView>(view);
    +
    1120 }
    +
    1121
    +
    1122 template<typename ResView, typename View>
    +
    1123 SBEPP_CPP20_CONSTEXPR ResView get_first_data_view(const View view) noexcept
    +
    1124 {
    +
    1125 return cursor->template get_first_data_view<ResView>(view);
    +
    1126 }
    +
    1127
    +
    1128 template<typename ResView, typename View, typename Getter>
    +
    1129 SBEPP_CPP20_CONSTEXPR ResView
    +
    1130 get_group_view(const View /*view*/, Getter&& getter) noexcept
    +
    1131 {
    +
    1132 auto res = getter();
    +
    1133 auto header = res(get_header_tag{});
    +
    1134 cursor->pointer() = res(addressof_tag{}) + header(size_bytes_tag{});
    +
    1135 return res;
    +
    1136 }
    +
    1137
    +
    1138 template<typename ResView, typename View, typename Getter>
    +
    1139 SBEPP_CPP20_CONSTEXPR ResView
    +
    1140 get_data_view(const View /*view*/, Getter&& getter) noexcept
    +
    1141 {
    +
    1142 auto res = getter();
    +
    1143 cursor->pointer() = res(addressof_tag{}) + res(size_bytes_tag{});
    +
    1144 return res;
    +
    1145 }
    +
    1146
    +
    1147private:
    +
    1148 sbepp::cursor<Byte>* cursor{};
    +
    1149};
    +
    1150
    +
    1151template<typename Byte>
    +
    1152class init_dont_move_cursor_wrapper
    +
    1153{
    +
    1154public:
    +
    1155 using byte_type = Byte;
    +
    1156
    +
    1157 template<typename T>
    +
    1158 using result_type = T;
    +
    1159
    +
    1160 init_dont_move_cursor_wrapper() = default;
    +
    1161
    +
    1162 explicit constexpr init_dont_move_cursor_wrapper(
    +
    1163 sbepp::cursor<Byte>& cursor)
    +
    1164 : cursor{&cursor}
    +
    1165 {
    +
    1166 }
    +
    1167
    +
    1168 template<typename T, typename U, endian E, typename View>
    +
    1169 SBEPP_CPP20_CONSTEXPR T get_value(
    +
    1170 const View view,
    +
    1171 const std::size_t offset,
    +
    1172 const std::size_t absolute_offset) noexcept
    +
    1173 {
    +
    1174 SBEPP_SIZE_CHECK(
    +
    1175 view(addressof_tag{}),
    +
    1176 view(end_ptr_tag{}),
    +
    1177 absolute_offset,
    +
    1178 sizeof(U));
    +
    1179 cursor->pointer() = view(addressof_tag{}) + absolute_offset - offset;
    +
    1180 return T{get_primitive<U, E>(view(addressof_tag{}) + absolute_offset)};
    +
    1181 }
    +
    1182
    +
    1183 template<endian E, typename T, typename View>
    +
    1184 SBEPP_CPP20_CONSTEXPR void set_value(
    +
    1185 const View view,
    +
    1186 const std::size_t offset,
    +
    1187 const std::size_t absolute_offset,
    +
    1188 const T value) noexcept
    +
    1189 {
    +
    1190 SBEPP_SIZE_CHECK(
    +
    1191 view(addressof_tag{}),
    +
    1192 view(end_ptr_tag{}),
    +
    1193 absolute_offset,
    +
    1194 sizeof(T));
    +
    1195 cursor->pointer() = view(addressof_tag{}) + absolute_offset - offset;
    +
    1196 set_primitive<E>(view(addressof_tag{}) + absolute_offset, value);
    +
    1197 }
    +
    1198
    +
    1199 template<typename T, typename U, endian E, typename View>
    +
    1200 SBEPP_CPP20_CONSTEXPR T get_last_value(
    +
    1201 const View view,
    +
    1202 const std::size_t offset,
    +
    1203 const std::size_t absolute_offset) noexcept
    +
    1204 {
    +
    1205 return get_value<T, U, E>(view, offset, absolute_offset);
    +
    1206 }
    +
    1207
    +
    1208 template<endian E, typename T, typename View>
    +
    1209 SBEPP_CPP20_CONSTEXPR void set_last_value(
    +
    1210 const View view,
    +
    1211 const std::size_t offset,
    +
    1212 const std::size_t absolute_offset,
    +
    1213 const T value) noexcept
    +
    1214 {
    +
    1215 return set_value<E>(view, offset, absolute_offset, value);
    +
    1216 }
    +
    1217
    +
    1218 template<typename Res, typename View>
    +
    1219 SBEPP_CPP20_CONSTEXPR Res get_static_field_view(
    +
    1220 const View view,
    +
    1221 const std::size_t offset,
    +
    1222 const std::size_t absolute_offset) noexcept
    +
    1223 {
    +
    1224 SBEPP_SIZE_CHECK(
    +
    1225 view(addressof_tag{}), view(end_ptr_tag{}), absolute_offset, 0);
    +
    1226 cursor->pointer() = view(addressof_tag{}) + absolute_offset - offset;
    +
    1227 return {view(addressof_tag{}) + absolute_offset, view(end_ptr_tag{})};
    +
    1228 }
    +
    1229
    +
    1230 template<typename Res, typename View>
    +
    1231 SBEPP_CPP20_CONSTEXPR Res get_last_static_field_view(
    +
    1232 const View view,
    +
    1233 const std::size_t offset,
    +
    1234 const std::size_t absolute_offset) noexcept
    +
    1235 {
    +
    1236 return get_static_field_view<Res>(view, offset, absolute_offset);
    +
    1237 }
    +
    1238
    +
    1239 template<typename ResView, typename View>
    +
    1240 SBEPP_CPP20_CONSTEXPR ResView get_first_group_view(const View view) noexcept
    +
    1241 {
    +
    1242 cursor->pointer() =
    +
    1243 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1244 ResView g{cursor->pointer(), view(end_ptr_tag{})};
    +
    1245
    +
    1246 return g;
    +
    1247 }
    +
    1248
    +
    1249 template<typename ResView, typename View>
    +
    1250 SBEPP_CPP20_CONSTEXPR ResView get_first_data_view(const View view) noexcept
    +
    1251 {
    +
    1252 cursor->pointer() =
    +
    1253 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1254 ResView d{cursor->pointer(), view(end_ptr_tag{})};
    +
    1255
    +
    1256 return d;
    +
    1257 }
    +
    1258
    +
    1259 template<typename ResView, typename View, typename Getter>
    +
    1260 SBEPP_CPP20_CONSTEXPR ResView
    +
    1261 get_group_view(const View /*view*/, Getter&& getter) noexcept
    +
    1262 {
    +
    1263 auto res = getter();
    +
    1264 cursor->pointer() = res(addressof_tag{});
    +
    1265 return res;
    +
    1266 }
    +
    1267
    +
    1268 template<typename ResView, typename View, typename Getter>
    +
    1269 SBEPP_CPP20_CONSTEXPR ResView
    +
    1270 get_data_view(const View /*view*/, Getter&& getter) noexcept
    +
    1271 {
    +
    1272 auto res = getter();
    +
    1273 cursor->pointer() = res(addressof_tag{});
    +
    1274 return res;
    +
    1275 }
    +
    1276
    +
    1277private:
    +
    1278 sbepp::cursor<Byte>* cursor{};
    +
    1279};
    +
    1280
    +
    1281template<typename Byte>
    +
    1282class dont_move_cursor_wrapper
    +
    1283{
    +
    1284public:
    +
    1285 using byte_type = Byte;
    +
    1286
    +
    1287 template<typename T>
    +
    1288 using result_type = T;
    +
    1289
    +
    1290 dont_move_cursor_wrapper() = default;
    +
    1291
    +
    1292 explicit constexpr dont_move_cursor_wrapper(sbepp::cursor<Byte>& cursor)
    +
    1293 : cursor{&cursor}
    +
    1294 {
    +
    1295 }
    +
    1296
    +
    1297 template<typename T, typename U, endian E, typename View>
    +
    1298 SBEPP_CPP20_CONSTEXPR T get_value(
    +
    1299 const View view,
    +
    1300 const std::size_t offset,
    +
    1301 const std::size_t absolute_offset) noexcept
    +
    1302 {
    +
    1303 SBEPP_ASSERT(
    +
    1304 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1305 == (cursor->pointer() + offset))
    +
    1306 && "Wrong cursor value");
    +
    1307 SBEPP_SIZE_CHECK(
    +
    1308 cursor->pointer(), view(end_ptr_tag{}), offset, sizeof(U));
    +
    1309 return T{get_primitive<U, E>(cursor->pointer() + offset)};
    +
    1310 }
    +
    1311
    +
    1312 template<endian E, typename T, typename View>
    +
    1313 SBEPP_CPP20_CONSTEXPR void set_value(
    +
    1314 const View view,
    +
    1315 const std::size_t offset,
    +
    1316 const std::size_t absolute_offset,
    +
    1317 const T value) noexcept
    +
    1318 {
    +
    1319 SBEPP_ASSERT(
    +
    1320 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1321 == (cursor->pointer() + offset))
    +
    1322 && "Wrong cursor value");
    +
    1323 SBEPP_SIZE_CHECK(
    +
    1324 cursor->pointer(), view(end_ptr_tag{}), offset, sizeof(T));
    +
    1325 set_primitive<E>(cursor->pointer() + offset, value);
    +
    1326 }
    +
    1327
    +
    1328 template<typename T, typename U, endian E, typename View>
    +
    1329 SBEPP_CPP20_CONSTEXPR T get_last_value(
    +
    1330 const View view,
    +
    1331 const std::size_t offset,
    +
    1332 const std::size_t absolute_offset) noexcept
    +
    1333 {
    +
    1334 SBEPP_ASSERT(
    +
    1335 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1336 == (cursor->pointer() + offset))
    +
    1337 && "Wrong cursor value");
    +
    1338 SBEPP_SIZE_CHECK(
    +
    1339 cursor->pointer(), view(end_ptr_tag{}), offset, sizeof(U));
    +
    1340 return T{get_primitive<U, E>(cursor->pointer() + offset)};
    +
    1341 }
    +
    1342
    +
    1343 template<endian E, typename T, typename View>
    +
    1344 SBEPP_CPP20_CONSTEXPR void set_last_value(
    +
    1345 const View view,
    +
    1346 const std::size_t offset,
    +
    1347 const std::size_t absolute_offset,
    +
    1348 const T value) noexcept
    +
    1349 {
    +
    1350 SBEPP_ASSERT(
    +
    1351 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1352 == (cursor->pointer() + offset))
    +
    1353 && "Wrong cursor value");
    +
    1354 SBEPP_SIZE_CHECK(
    +
    1355 cursor->pointer(), view(end_ptr_tag{}), offset, sizeof(T));
    +
    1356 set_primitive<E>(cursor->pointer() + offset, value);
    +
    1357 }
    +
    1358
    +
    1359 template<typename Res, typename View>
    +
    1360 SBEPP_CPP20_CONSTEXPR Res get_static_field_view(
    +
    1361 const View view,
    +
    1362 const std::size_t offset,
    +
    1363 const std::size_t absolute_offset) noexcept
    +
    1364 {
    +
    1365 SBEPP_ASSERT(
    +
    1366 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1367 == (cursor->pointer() + offset))
    +
    1368 && "Wrong cursor value");
    +
    1369 SBEPP_SIZE_CHECK(cursor->pointer(), view(end_ptr_tag{}), offset, 0);
    +
    1370 return {cursor->pointer() + offset, view(end_ptr_tag{})};
    +
    1371 }
    +
    1372
    +
    1373 template<typename Res, typename View>
    +
    1374 SBEPP_CPP20_CONSTEXPR Res get_last_static_field_view(
    +
    1375 const View view,
    +
    1376 const std::size_t offset,
    +
    1377 const std::size_t absolute_offset) noexcept
    +
    1378 {
    +
    1379 SBEPP_ASSERT(
    +
    1380 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1381 == (cursor->pointer() + offset))
    +
    1382 && "Wrong cursor value");
    +
    1383 SBEPP_SIZE_CHECK(cursor->pointer(), view(end_ptr_tag{}), offset, 0);
    +
    1384 return {cursor->pointer() + offset, view(end_ptr_tag{})};
    +
    1385 }
    +
    1386
    +
    1387 template<typename ResView, typename View>
    +
    1388 SBEPP_CPP20_CONSTEXPR ResView get_first_group_view(const View view) noexcept
    +
    1389 {
    +
    1390 cursor->pointer() =
    +
    1391 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1392 ResView g{cursor->pointer(), view(end_ptr_tag{})};
    +
    1393
    +
    1394 return g;
    +
    1395 }
    +
    1396
    +
    1397 template<typename ResView, typename View>
    +
    1398 SBEPP_CPP20_CONSTEXPR ResView get_first_data_view(const View view) noexcept
    +
    1399 {
    +
    1400 cursor->pointer() =
    +
    1401 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1402 ResView d{cursor->pointer(), view(end_ptr_tag{})};
    +
    1403
    +
    1404 return d;
    +
    1405 }
    +
    1406
    +
    1407 template<typename ResView, typename View, typename Getter>
    +
    1408 SBEPP_CPP20_CONSTEXPR ResView
    +
    1409 get_group_view(const View view, Getter&& getter) noexcept
    +
    1410 {
    +
    1411 SBEPP_ASSERT(
    +
    1412 (getter()(detail::addressof_tag{}) == cursor->pointer())
    +
    1413 && "Wrong cursor value");
    +
    1414 return {cursor->pointer(), view(end_ptr_tag{})};
    +
    1415 }
    +
    1416
    +
    1417 template<typename ResView, typename View, typename Getter>
    +
    1418 SBEPP_CPP20_CONSTEXPR ResView
    +
    1419 get_data_view(const View view, Getter&& getter) noexcept
    +
    1420 {
    +
    1421 SBEPP_ASSERT(
    +
    1422 (getter()(detail::addressof_tag{}) == cursor->pointer())
    +
    1423 && "Wrong cursor value");
    +
    1424 return {cursor->pointer(), view(end_ptr_tag{})};
    +
    1425 }
    +
    1426
    +
    1427private:
    +
    1428 sbepp::cursor<Byte>* cursor{};
    +
    1429};
    +
    1430
    +
    1431template<typename Byte>
    +
    1432class skip_cursor_wrapper
    +
    1433{
    +
    1434public:
    +
    1435 using byte_type = Byte;
    +
    1436
    +
    1437 template<typename T>
    +
    1438 using result_type = void;
    +
    1439
    +
    1440 skip_cursor_wrapper() = default;
    +
    1441
    +
    1442 explicit constexpr skip_cursor_wrapper(sbepp::cursor<Byte>& cursor)
    +
    1443 : cursor{&cursor}
    +
    1444 {
    +
    1445 }
    +
    1446
    +
    1447 template<typename T, typename U, endian E, typename View>
    +
    1448 SBEPP_CPP20_CONSTEXPR void get_value(
    +
    1449 const View view,
    +
    1450 const std::size_t offset,
    +
    1451 const std::size_t absolute_offset) noexcept
    +
    1452 {
    +
    1453 SBEPP_ASSERT(
    +
    1454 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1455 == (cursor->pointer() + offset))
    +
    1456 && "Wrong cursor value");
    +
    1457 SBEPP_SIZE_CHECK(
    +
    1458 cursor->pointer(), view(end_ptr_tag{}), offset, sizeof(U));
    +
    1459 cursor->pointer() += offset + sizeof(U);
    +
    1460 }
    +
    1461
    +
    1462 template<typename T, typename U, endian E, typename View>
    +
    1463 SBEPP_CPP20_CONSTEXPR void get_last_value(
    +
    1464 const View view,
    +
    1465 const std::size_t offset,
    +
    1466 const std::size_t absolute_offset) noexcept
    +
    1467 {
    +
    1468 SBEPP_ASSERT(
    +
    1469 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1470 == (cursor->pointer() + offset))
    +
    1471 && "Wrong cursor value");
    +
    1472 SBEPP_SIZE_CHECK(
    +
    1473 cursor->pointer(), view(end_ptr_tag{}), offset, sizeof(U));
    +
    1474 cursor->pointer() =
    +
    1475 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1476 }
    +
    1477
    +
    1478 template<typename Res, typename View>
    +
    1479 SBEPP_CPP20_CONSTEXPR void get_static_field_view(
    +
    1480 const View view,
    +
    1481 const std::size_t offset,
    +
    1482 const std::size_t absolute_offset) noexcept
    +
    1483 {
    +
    1484 SBEPP_ASSERT(
    +
    1485 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1486 == (cursor->pointer() + offset))
    +
    1487 && "Wrong cursor value");
    +
    1488 SBEPP_SIZE_CHECK(cursor->pointer(), view(end_ptr_tag{}), offset, 0);
    +
    1489 Res res{cursor->pointer(), view(end_ptr_tag{})};
    +
    1490 cursor->pointer() += offset + res(size_bytes_tag{});
    +
    1491 }
    +
    1492
    +
    1493 template<typename Res, typename View>
    +
    1494 SBEPP_CPP20_CONSTEXPR void get_last_static_field_view(
    +
    1495 const View view,
    +
    1496 const std::size_t offset,
    +
    1497 const std::size_t absolute_offset) noexcept
    +
    1498 {
    +
    1499 SBEPP_ASSERT(
    +
    1500 ((view(detail::addressof_tag{}) + absolute_offset)
    +
    1501 == (cursor->pointer() + offset))
    +
    1502 && "Wrong cursor value");
    +
    1503 SBEPP_SIZE_CHECK(cursor->pointer(), view(end_ptr_tag{}), offset, 0);
    +
    1504 cursor->pointer() =
    +
    1505 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1506 }
    +
    1507
    +
    1508 template<typename ResView, typename View>
    +
    1509 SBEPP_CPP20_CONSTEXPR void get_first_group_view(const View view) noexcept
    +
    1510 {
    +
    1511 cursor->pointer() =
    +
    1512 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1513 ResView g{cursor->pointer(), view(end_ptr_tag{})};
    +
    1514 cursor->pointer() += g(size_bytes_tag{});
    +
    1515 }
    +
    1516
    +
    1517 template<typename ResView, typename View>
    +
    1518 SBEPP_CPP20_CONSTEXPR void get_first_data_view(const View view) noexcept
    +
    1519 {
    +
    1520 cursor->pointer() =
    +
    1521 view(get_level_tag{}) + view(get_block_length_tag{});
    +
    1522 ResView d{cursor->pointer(), view(end_ptr_tag{})};
    +
    1523 cursor->pointer() += d(size_bytes_tag{});
    +
    1524 }
    +
    1525
    +
    1526 template<typename ResView, typename View, typename Getter>
    +
    1527 SBEPP_CPP20_CONSTEXPR void
    +
    1528 get_group_view(const View view, Getter&& getter) noexcept
    +
    1529 {
    +
    1530 SBEPP_ASSERT(
    +
    1531 (getter()(detail::addressof_tag{}) == cursor->pointer())
    +
    1532 && "Wrong cursor value");
    +
    1533 ResView res{cursor->pointer(), view(end_ptr_tag{})};
    +
    1534 cursor->pointer() += res(size_bytes_tag{});
    +
    1535 }
    +
    1536
    +
    1537 template<typename ResView, typename View, typename Getter>
    +
    1538 SBEPP_CPP20_CONSTEXPR void
    +
    1539 get_data_view(const View view, Getter&& getter) noexcept
    +
    1540 {
    +
    1541 SBEPP_ASSERT(
    +
    1542 (getter()(detail::addressof_tag{}) == cursor->pointer())
    +
    1543 && "Wrong cursor value");
    +
    1544 ResView res{cursor->pointer(), view(end_ptr_tag{})};
    +
    1545 cursor->pointer() += res(size_bytes_tag{});
    +
    1546 }
    +
    1547
    +
    1548private:
    +
    1549 sbepp::cursor<Byte>* cursor{};
    +
    1550};
    +
    1551
    +
    1552template<typename Cursor, typename T>
    +
    1553using cursor_result_type_t =
    +
    1554 typename remove_reference_t<Cursor>::template result_type<T>;
    +
    1555
    +
    1556template<typename Cursor>
    +
    1557using cursor_byte_type_t = typename remove_reference_t<Cursor>::byte_type;
    +
    1558
    +
    1559template<typename MessageByte, typename CursorByte>
    +
    1560using enable_if_cursor_compatible_t =
    +
    1561 enable_if_convertible_t<MessageByte, CursorByte>;
    +
    1562
    +
    1563template<typename MessageByte, typename CursorByte>
    +
    1564using enable_if_cursor_writeable_t = enable_if_t<
    +
    1565 std::is_convertible<MessageByte*, CursorByte*>::value
    +
    1566 && !std::is_const<MessageByte>::value && !std::is_const<CursorByte>::value>;
    +
    1567} // namespace detail
    +
    1568
    +
    1579template<typename T>
    +
    +
    1580constexpr std::size_t size_bytes(T v) noexcept
    +
    1581{
    +
    1582 return v(detail::size_bytes_tag{});
    +
    1583}
    +
    +
    1584
    +
    1594template<typename T, typename Byte>
    +
    +
    1595constexpr std::size_t size_bytes(T v, cursor<Byte> c) noexcept
    +
    1596{
    +
    1597 return v(detail::size_bytes_tag{}, c);
    +
    1598}
    +
    +
    1599
    +
    1606template<typename T>
    +
    +
    1607constexpr auto get_header(T v) noexcept -> decltype(v(detail::get_header_tag{}))
    +
    1608{
    +
    1609 return v(detail::get_header_tag{});
    +
    1610}
    +
    +
    1611
    +
    1618template<typename T>
    +
    +
    1619constexpr auto addressof(T v) noexcept -> decltype(v(detail::addressof_tag{}))
    +
    1620{
    +
    1621 return v(detail::addressof_tag{});
    +
    1622}
    +
    +
    1623
    +
    1629template<typename View>
    +
    + +
    1631{
    +
    1633 using type = typename std::remove_pointer<decltype(sbepp::addressof(
    +
    1634 std::declval<View>()))>::type;
    +
    1635};
    +
    +
    1636
    +
    1638template<typename View>
    + +
    1640
    +
    +
    1645namespace cursor_ops
    +
    1646{
    +
    1664template<typename Byte>
    +
    +
    1665constexpr detail::init_cursor_wrapper<Byte> init(cursor<Byte>& c) noexcept
    +
    1666{
    +
    1667 return detail::init_cursor_wrapper<Byte>{c};
    +
    1668}
    +
    +
    1669
    +
    1692template<typename Byte>
    +
    1693constexpr detail::dont_move_cursor_wrapper<Byte>
    +
    + +
    1695{
    +
    1696 return detail::dont_move_cursor_wrapper<Byte>{c};
    +
    1697}
    +
    +
    1698
    +
    1706template<typename Byte>
    +
    1707constexpr detail::init_dont_move_cursor_wrapper<Byte>
    +
    + +
    1709{
    +
    1710 return detail::init_dont_move_cursor_wrapper<Byte>{c};
    +
    1711}
    +
    +
    1712
    +
    1727template<typename Byte>
    +
    +
    1728constexpr detail::skip_cursor_wrapper<Byte> skip(cursor<Byte>& c) noexcept
    +
    1729{
    +
    1730 return detail::skip_cursor_wrapper<Byte>{c};
    +
    1731}
    +
    +
    1732} // namespace cursor_ops
    +
    +
    1733
    +
    1734namespace detail
    +
    1735{
    +
    1736// the only purpose of this class is to implement `is_composite` trait
    +
    1738template<typename Byte>
    +
    +
    1739class composite_base : public byte_range<Byte>
    +
    1740{
    +
    1741public:
    +
    1742 using byte_range<Byte>::byte_range;
    +
    1743 using byte_range<Byte>::operator();
    +
    1744};
    +
    +
    1745
    +
    1747template<typename Byte, typename Header>
    +
    +
    1748class message_base : public byte_range<Byte>
    +
    1749{
    +
    1750public:
    +
    1751 using byte_range<Byte>::byte_range;
    +
    1752 using byte_range<Byte>::operator();
    +
    1753
    +
    1754 SBEPP_CPP14_CONSTEXPR Header operator()(get_header_tag) const noexcept
    +
    1755 {
    +
    1756 Header header{(*this)(addressof_tag{}), (*this)(end_ptr_tag{})};
    +
    1757 SBEPP_SIZE_CHECK(
    +
    1758 (*this)(addressof_tag{}),
    +
    1759 (*this)(end_ptr_tag{}),
    +
    1760 0,
    +
    1761 sbepp::size_bytes(header));
    +
    1762 return header;
    +
    1763 }
    +
    1764
    +
    1765 SBEPP_CPP14_CONSTEXPR Byte* operator()(get_level_tag) const noexcept
    +
    1766 {
    +
    1767 auto header = (*this)(get_header_tag{});
    +
    1768 return header(addressof_tag{}) + header(size_bytes_tag{});
    +
    1769 }
    +
    1770
    +
    1771 constexpr typename std::decay<
    +
    1772 decltype(std::declval<Header>().blockLength().value())>::type
    +
    1773 operator()(get_block_length_tag) const noexcept
    +
    1774 {
    +
    1775 return operator()(get_header_tag{}).blockLength().value();
    +
    1776 }
    +
    1777
    +
    1778 template<
    +
    1779 typename Byte2,
    +
    1780 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    1781 SBEPP_CPP20_CONSTEXPR std::size_t
    +
    1782 operator()(size_bytes_tag, cursor<Byte2>& c) const noexcept
    +
    1783 {
    +
    1784 return c.pointer() - (*this)(addressof_tag{});
    +
    1785 }
    +
    1786};
    +
    +
    1787
    +
    1789template<typename Byte, typename BlockLengthType>
    +
    +
    1790class entry_base : public byte_range<Byte>
    +
    1791{
    +
    1792public:
    +
    1793 using byte_range<Byte>::operator();
    +
    1794
    +
    1795 template<typename Byte2, typename BlockLengthType2>
    +
    1796 friend class entry_base;
    +
    1797
    +
    1799 entry_base() = default;
    +
    1800
    +
    +
    1802 constexpr entry_base(
    +
    1803 Byte* ptr, Byte* end, BlockLengthType block_length) noexcept
    +
    1804 : byte_range<Byte>{ptr, end}, block_length{block_length}
    +
    1805 {
    +
    1806 }
    +
    +
    1807
    +
    +
    1809 constexpr entry_base(
    +
    1810 Byte* ptr,
    +
    1811 const std::size_t size,
    +
    1812 const BlockLengthType block_length) noexcept
    +
    1813 : entry_base{ptr, ptr + size, block_length}
    +
    1814 {
    +
    1815 }
    +
    +
    1816
    +
    1818 template<typename Byte2, typename = enable_if_convertible_t<Byte2, Byte>>
    +
    +
    1819 constexpr entry_base(
    +
    1820 cursor<Byte2>& c, Byte* end_ptr, BlockLengthType block_length) noexcept
    +
    1821 : entry_base{c.pointer(), end_ptr, block_length}
    +
    1822 {
    +
    1823 // forwards to the above one for non-empty entries. Empty entries have
    +
    1824 // implementation in the derived class which advances cursor up to
    +
    1825 // `block_length`.
    +
    1826 }
    +
    +
    1827
    +
    1830 template<typename Byte2, typename = enable_if_convertible_t<Byte2, Byte>>
    +
    +
    1831 constexpr entry_base(
    +
    1832 const entry_base<Byte2, BlockLengthType>& other) noexcept
    +
    1833 : byte_range<Byte>{other}, block_length{other.block_length}
    +
    1834 {
    +
    1835 }
    +
    +
    1836
    +
    1837 constexpr BlockLengthType operator()(get_block_length_tag) const noexcept
    +
    1838 {
    +
    1839 return block_length;
    +
    1840 }
    +
    1841
    +
    1842 constexpr Byte* operator()(get_level_tag) const noexcept
    +
    1843 {
    +
    1844 return (*this)(addressof_tag{});
    +
    1845 }
    +
    1846
    +
    1847private:
    +
    1848 BlockLengthType block_length{};
    +
    1849};
    +
    +
    1850
    +
    1851template<typename Entry>
    +
    1852class arrow_proxy
    +
    1853{
    +
    1854public:
    +
    1855 explicit constexpr arrow_proxy(Entry entry) noexcept : entry{entry}
    +
    1856 {
    +
    1857 }
    +
    1858
    +
    1859 constexpr const Entry* operator->() const noexcept
    +
    1860 {
    +
    1861 return &entry;
    +
    1862 }
    +
    1863
    +
    1864private:
    +
    1865 Entry entry;
    +
    1866};
    +
    1867
    +
    1868template<
    +
    1869 typename Byte,
    +
    1870 typename ValueType,
    +
    1871 typename IndexType,
    +
    1872 typename DifferenceType,
    +
    1873 typename BlockLengthType>
    +
    1874class forward_iterator
    +
    1875{
    +
    1876public:
    +
    1877 using iterator_category = std::forward_iterator_tag;
    +
    1878 using value_type = ValueType;
    +
    1879 using reference = value_type;
    +
    1880 using difference_type = DifferenceType;
    +
    1881 using pointer = arrow_proxy<value_type>;
    +
    1882
    +
    1883 forward_iterator() = default;
    +
    1884
    +
    1885 SBEPP_CPP14_CONSTEXPR forward_iterator(
    +
    1886 Byte* ptr,
    +
    1887 const IndexType index,
    +
    1888 const BlockLengthType block_length,
    +
    1889 Byte* end) noexcept
    +
    1890 : ptr{ptr},
    +
    1891 index{index},
    +
    1892 block_length{block_length}
    +
    1893#if SBEPP_SIZE_CHECKS_ENABLED
    +
    1894 ,
    +
    1895 end{end}
    +
    1896#endif
    +
    1897 {
    +
    1898 (void)end;
    +
    1899 }
    +
    1900
    +
    1901 constexpr reference operator*() const noexcept
    +
    1902 {
    +
    1903#if SBEPP_SIZE_CHECKS_ENABLED
    +
    1904 return {ptr, end, block_length};
    +
    1905#else
    +
    1906 return {ptr, nullptr, block_length};
    +
    1907#endif
    +
    1908 }
    +
    1909
    +
    1910 constexpr pointer operator->() const noexcept
    +
    1911 {
    +
    1912 return pointer{operator*()};
    +
    1913 }
    +
    1914
    +
    1915 SBEPP_CPP14_CONSTEXPR forward_iterator& operator++() noexcept
    +
    1916 {
    +
    1917 SBEPP_SIZE_CHECK(ptr, end, 0, sbepp::size_bytes(operator*()));
    +
    1918 ptr += sbepp::size_bytes(operator*());
    +
    1919 index++;
    +
    1920 return *this;
    +
    1921 }
    +
    1922
    +
    1923 SBEPP_CPP14_CONSTEXPR forward_iterator operator++(int) noexcept
    +
    1924 {
    +
    1925 auto old = *this;
    +
    1926 operator++();
    +
    1927 return old;
    +
    1928 }
    +
    1929
    +
    1930 friend constexpr bool operator==(
    +
    1931 const forward_iterator& lhs, const forward_iterator& rhs) noexcept
    +
    1932 {
    +
    1933 return lhs.index == rhs.index;
    +
    1934 }
    +
    1935
    +
    1936 friend constexpr bool operator!=(
    +
    1937 const forward_iterator& lhs, const forward_iterator& rhs) noexcept
    +
    1938 {
    +
    1939 return lhs.index != rhs.index;
    +
    1940 }
    +
    1941
    +
    1942private:
    +
    1943 Byte* ptr{};
    +
    1944 IndexType index{};
    +
    1945 BlockLengthType block_length{};
    +
    1946#if SBEPP_SIZE_CHECKS_ENABLED
    +
    1947 Byte* end{};
    +
    1948#endif
    +
    1949};
    +
    1950
    +
    1951template<
    +
    1952 typename Byte,
    +
    1953 typename ValueType,
    +
    1954 typename BlockLengthType,
    +
    1955 typename DifferenceType,
    +
    1956 typename IndexType>
    +
    1957class random_access_iterator
    +
    1958{
    +
    1959public:
    +
    1960 using iterator_category = std::random_access_iterator_tag;
    +
    1961 using value_type = ValueType;
    +
    1962 using reference = value_type;
    +
    1963 using difference_type = DifferenceType;
    +
    1964 using pointer = arrow_proxy<value_type>;
    +
    1965
    +
    1966 random_access_iterator() = default;
    +
    1967
    +
    1968 SBEPP_CPP14_CONSTEXPR random_access_iterator(
    +
    1969 Byte* ptr,
    +
    1970 const BlockLengthType block_length,
    +
    1971 const IndexType index,
    +
    1972 Byte* end) noexcept
    +
    1973 : ptr{ptr},
    +
    1974 block_length{block_length},
    +
    1975 index{index}
    +
    1976#if SBEPP_SIZE_CHECKS_ENABLED
    +
    1977 ,
    +
    1978 end{end}
    +
    1979#endif
    +
    1980 {
    +
    1981 (void)end;
    +
    1982 }
    +
    1983
    +
    1984 constexpr reference operator*() const noexcept
    +
    1985 {
    +
    1986#if SBEPP_SIZE_CHECKS_ENABLED
    +
    1987 return {ptr, end, block_length};
    +
    1988#else
    +
    1989 return {ptr, nullptr, block_length};
    +
    1990#endif
    +
    1991 }
    +
    1992
    +
    1993 constexpr pointer operator->() const noexcept
    +
    1994 {
    +
    1995 return pointer{operator*()};
    +
    1996 }
    +
    1997
    +
    1998 SBEPP_CPP14_CONSTEXPR random_access_iterator& operator++() noexcept
    +
    1999 {
    +
    2000 SBEPP_SIZE_CHECK(ptr, end, 0, block_length);
    +
    2001 ptr += block_length;
    +
    2002 index++;
    +
    2003 return *this;
    +
    2004 }
    +
    2005
    +
    2006 SBEPP_CPP14_CONSTEXPR random_access_iterator operator++(int) noexcept
    +
    2007 {
    +
    2008 auto old = *this;
    +
    2009 operator++();
    +
    2010 return old;
    +
    2011 }
    +
    2012
    +
    2013 SBEPP_CPP14_CONSTEXPR random_access_iterator& operator--() noexcept
    +
    2014 {
    +
    2015 ptr -= block_length;
    +
    2016 index--;
    +
    2017 return *this;
    +
    2018 }
    +
    2019
    +
    2020 SBEPP_CPP14_CONSTEXPR random_access_iterator operator--(int) noexcept
    +
    2021 {
    +
    2022 auto old = *this;
    +
    2023 operator--();
    +
    2024 return old;
    +
    2025 }
    +
    2026
    +
    2027 SBEPP_CPP14_CONSTEXPR random_access_iterator&
    +
    2028 operator+=(difference_type n) noexcept
    +
    2029 {
    +
    2030 ptr += n * block_length;
    +
    2031 index += n;
    +
    2032 return *this;
    +
    2033 }
    +
    2034
    +
    2035 SBEPP_CPP14_CONSTEXPR random_access_iterator
    +
    2036 operator+(difference_type n) const noexcept
    +
    2037 {
    +
    2038 auto tmp = *this;
    +
    2039 return tmp += n;
    +
    2040 }
    +
    2041
    +
    2042 friend constexpr random_access_iterator
    +
    2043 operator+(difference_type n, const random_access_iterator& it) noexcept
    +
    2044 {
    +
    2045 return it + n;
    +
    2046 }
    +
    2047
    +
    2048 SBEPP_CPP14_CONSTEXPR random_access_iterator&
    +
    2049 operator-=(difference_type n) noexcept
    +
    2050 {
    +
    2051 return *this += -n;
    +
    2052 }
    +
    2053
    +
    2054 SBEPP_CPP14_CONSTEXPR random_access_iterator
    +
    2055 operator-(difference_type n) const noexcept
    +
    2056 {
    +
    2057 auto tmp = *this;
    +
    2058 return tmp -= n;
    +
    2059 }
    +
    2060
    +
    2061 constexpr difference_type
    +
    2062 operator-(const random_access_iterator& rhs) const noexcept
    +
    2063 {
    +
    2064 return index - rhs.index;
    +
    2065 }
    +
    2066
    +
    2067 constexpr reference operator[](difference_type n) const noexcept
    +
    2068 {
    +
    2069 return *(*this + n);
    +
    2070 }
    +
    2071
    +
    2072 friend constexpr bool operator==(
    +
    2073 const random_access_iterator& lhs,
    +
    2074 const random_access_iterator& rhs) noexcept
    +
    2075 {
    +
    2076 return lhs.index == rhs.index;
    +
    2077 }
    +
    2078
    +
    2079 friend constexpr bool operator!=(
    +
    2080 const random_access_iterator& lhs,
    +
    2081 const random_access_iterator& rhs) noexcept
    +
    2082 {
    +
    2083 return lhs.index != rhs.index;
    +
    2084 }
    +
    2085
    +
    2086 friend constexpr bool operator<(
    +
    2087 const random_access_iterator& lhs,
    +
    2088 const random_access_iterator& rhs) noexcept
    +
    2089 {
    +
    2090 return lhs.index < rhs.index;
    +
    2091 }
    +
    2092
    +
    2093 friend constexpr bool operator<=(
    +
    2094 const random_access_iterator& lhs,
    +
    2095 const random_access_iterator& rhs) noexcept
    +
    2096 {
    +
    2097 return lhs.index <= rhs.index;
    +
    2098 }
    +
    2099
    +
    2100 friend constexpr bool operator>(
    +
    2101 const random_access_iterator& lhs,
    +
    2102 const random_access_iterator& rhs) noexcept
    +
    2103 {
    +
    2104 return lhs.index > rhs.index;
    +
    2105 }
    +
    2106
    +
    2107 friend constexpr bool operator>=(
    +
    2108 const random_access_iterator& lhs,
    +
    2109 const random_access_iterator& rhs) noexcept
    +
    2110 {
    +
    2111 return lhs.index >= rhs.index;
    +
    2112 }
    +
    2113
    +
    2114private:
    +
    2115 Byte* ptr{};
    +
    2116 BlockLengthType block_length{};
    +
    2117 // iterator should be index-based instead of just pointer-based to support
    +
    2118 // groups with empty entries, i.e. when `block_length == 0`
    +
    2119 IndexType index{};
    +
    2120#if SBEPP_SIZE_CHECKS_ENABLED
    +
    2121 Byte* end{};
    +
    2122#endif
    +
    2123};
    +
    2124
    +
    2125template<
    +
    2126 typename ValueType,
    +
    2127 typename IndexType,
    +
    2128 typename CursorType,
    +
    2129 typename BlockLengthType,
    +
    2130 typename Byte>
    +
    2131class input_iterator
    +
    2132{
    +
    2133public:
    +
    2134 using iterator_category = std::input_iterator_tag;
    +
    2135 using value_type = ValueType;
    +
    2136 using reference = value_type;
    +
    2137 using difference_type = typename std::make_signed<IndexType>::type;
    +
    2138 using pointer = arrow_proxy<value_type>;
    +
    2139
    +
    2140 input_iterator() = default;
    +
    2141
    +
    2142 SBEPP_CPP14_CONSTEXPR input_iterator(
    +
    2143 const IndexType index,
    +
    2144 CursorType* cursor,
    +
    2145 BlockLengthType block_length,
    +
    2146 Byte* end) noexcept
    +
    2147 : index{index},
    +
    2148 cursor{cursor},
    +
    2149 block_length{block_length}
    +
    2150#if SBEPP_SIZE_CHECKS_ENABLED
    +
    2151 ,
    +
    2152 end{end}
    +
    2153#endif
    +
    2154 {
    +
    2155 (void)end;
    +
    2156 }
    +
    2157
    +
    2158 constexpr reference operator*() const noexcept
    +
    2159 {
    +
    2160#if SBEPP_SIZE_CHECKS_ENABLED
    +
    2161 return {*cursor, end, block_length};
    +
    2162#else
    +
    2163 return {*cursor, nullptr, block_length};
    +
    2164#endif
    +
    2165 }
    +
    2166
    +
    2167 constexpr pointer operator->() const noexcept
    +
    2168 {
    +
    2169 return pointer{operator*()};
    +
    2170 }
    +
    2171
    +
    2172 SBEPP_CPP14_CONSTEXPR input_iterator& operator++() noexcept
    +
    2173 {
    +
    2174 index++;
    +
    2175 return *this;
    +
    2176 }
    +
    2177
    +
    2178 SBEPP_CPP14_CONSTEXPR input_iterator operator++(int) noexcept
    +
    2179 {
    +
    2180 auto old = *this;
    +
    2181 operator++();
    +
    2182 return old;
    +
    2183 }
    +
    2184
    +
    2185 friend constexpr bool operator==(
    +
    2186 const input_iterator& lhs, const input_iterator& rhs) noexcept
    +
    2187 {
    +
    2188 return lhs.index == rhs.index;
    +
    2189 }
    +
    2190
    +
    2191 friend constexpr bool operator!=(
    +
    2192 const input_iterator& lhs, const input_iterator& rhs) noexcept
    +
    2193 {
    +
    2194 return lhs.index != rhs.index;
    +
    2195 }
    +
    2196
    +
    2197private:
    +
    2198 IndexType index{};
    +
    2199 CursorType* cursor{};
    +
    2200 BlockLengthType block_length{};
    +
    2201#if SBEPP_SIZE_CHECKS_ENABLED
    +
    2202 Byte* end{};
    +
    2203#endif
    +
    2204};
    +
    2205
    +
    2206template<
    +
    2207 typename ValueType,
    +
    2208 typename IndexType,
    +
    2209 typename CursorType,
    +
    2210 typename BlockLengthType,
    +
    2211 typename Byte>
    +
    2212class cursor_range
    +
    2213{
    +
    2214public:
    +
    2215 SBEPP_CPP14_CONSTEXPR cursor_range(
    +
    2216 CursorType& cursor,
    +
    2217 BlockLengthType block_length,
    +
    2218 Byte* end,
    +
    2219 IndexType start_pos,
    +
    2220 IndexType length) noexcept
    +
    2221 : cursor{&cursor},
    +
    2222 block_length{block_length},
    +
    2223 start_pos{start_pos},
    +
    2224#if SBEPP_SIZE_CHECKS_ENABLED
    +
    2225 end_ptr{end},
    +
    2226#endif
    +
    2227 length{length}
    +
    2228 {
    +
    2229 (void)end;
    +
    2230 }
    +
    2231
    +
    2232 using iterator =
    +
    2233 input_iterator<ValueType, IndexType, CursorType, BlockLengthType, Byte>;
    +
    2234
    +
    2235 constexpr iterator begin() const noexcept
    +
    2236 {
    +
    2237#if SBEPP_SIZE_CHECKS_ENABLED
    +
    2238 return {start_pos, cursor, block_length, end_ptr};
    +
    2239#else
    +
    2240 return {start_pos, cursor, block_length, nullptr};
    +
    2241#endif
    +
    2242 }
    +
    2243
    +
    2244 constexpr iterator end() const noexcept
    +
    2245 {
    +
    2246#if SBEPP_SIZE_CHECKS_ENABLED
    +
    2247 return {
    +
    2248 static_cast<IndexType>(start_pos + size()),
    +
    2249 cursor,
    +
    2250 block_length,
    +
    2251 end_ptr};
    +
    2252#else
    +
    2253 return {
    +
    2254 static_cast<IndexType>(start_pos + size()),
    +
    2255 cursor,
    +
    2256 block_length,
    +
    2257 nullptr};
    +
    2258#endif
    +
    2259 }
    +
    2260
    +
    2261 constexpr IndexType size() const noexcept
    +
    2262 {
    +
    2263 return length;
    +
    2264 }
    +
    2265
    +
    2266private:
    +
    2267 CursorType* cursor{};
    +
    2268 BlockLengthType block_length{};
    +
    2269 IndexType start_pos{};
    +
    2270#if SBEPP_SIZE_CHECKS_ENABLED
    +
    2271 Byte* end_ptr{};
    +
    2272#endif
    +
    2273 IndexType length{};
    +
    2274};
    +
    2275
    +
    2277template<typename Byte, typename Entry, typename Dimension>
    +
    +
    2278class flat_group_base : public byte_range<Byte>
    +
    2279{
    +
    2280public:
    +
    2282 using value_type = Entry;
    + +
    2286 using sbe_size_type = typename std::decay<
    +
    2287 decltype(std::declval<Dimension>().numInGroup())>::type;
    +
    2289 using size_type = typename sbe_size_type::value_type;
    +
    2291 using difference_type = typename std::make_signed<size_type>::type;
    +
    2294 using iterator = random_access_iterator<
    +
    2295 Byte,
    +
    2296 Entry,
    +
    2297 typename std::decay<
    +
    2298 decltype(std::declval<Dimension>().blockLength().value())>::type,
    + +
    2300 size_type>;
    +
    2301
    +
    2302 using byte_range<Byte>::byte_range;
    +
    2303 using byte_range<Byte>::operator();
    +
    2304
    +
    2305 SBEPP_CPP14_CONSTEXPR Dimension operator()(get_header_tag) const noexcept
    +
    2306 {
    +
    2307 Dimension header{(*this)(addressof_tag{}), (*this)(end_ptr_tag{})};
    +
    2308 SBEPP_SIZE_CHECK(
    +
    2309 (*this)(addressof_tag{}),
    +
    2310 (*this)(end_ptr_tag{}),
    +
    2311 0,
    +
    2312 sbepp::size_bytes(header));
    +
    2313 return header;
    +
    2314 }
    +
    2315
    +
    2316 SBEPP_CPP20_CONSTEXPR std::size_t operator()(size_bytes_tag) const noexcept
    +
    2317 {
    +
    2318 auto dimension = (*this)(get_header_tag{});
    +
    2319 return sbepp::size_bytes(dimension)
    +
    2320 + dimension.numInGroup().value()
    +
    2321 * dimension.blockLength().value();
    +
    2322 }
    +
    2323
    +
    +
    2325 SBEPP_CPP20_CONSTEXPR sbe_size_type sbe_size() const noexcept
    +
    2326 {
    +
    2327 return (*this)(get_header_tag{}).numInGroup();
    +
    2328 }
    +
    +
    2329
    +
    +
    2331 SBEPP_CPP20_CONSTEXPR size_type size() const noexcept
    +
    2332 {
    +
    2333 return sbe_size().value();
    +
    2334 }
    +
    +
    2335
    +
    +
    2337 SBEPP_CPP20_CONSTEXPR void resize(const size_type count) const noexcept
    +
    2338 {
    +
    2339 (*this)(get_header_tag{}).numInGroup(count);
    +
    2340 }
    +
    +
    2341
    +
    +
    2343 SBEPP_CPP17_NODISCARD SBEPP_CPP20_CONSTEXPR bool empty() const noexcept
    +
    2344 {
    +
    2345 return !size();
    +
    2346 }
    +
    +
    2347
    +
    +
    2349 constexpr static size_type max_size() noexcept
    +
    2350 {
    +
    2351 return sbe_size_type::max_value();
    +
    2352 }
    +
    +
    2353
    +
    +
    2355 SBEPP_CPP14_CONSTEXPR iterator begin() const noexcept
    +
    2356 {
    +
    2357 auto dimension = (*this)(get_header_tag{});
    +
    2358 return iterator{
    +
    2359 (*this)(addressof_tag{}) + sbepp::size_bytes(dimension),
    +
    2360 dimension.blockLength().value(),
    +
    2361 0,
    +
    2362 (*this)(end_ptr_tag{})};
    +
    2363 }
    +
    +
    2364
    +
    +
    2366 constexpr iterator end() const noexcept
    +
    2367 {
    +
    2368 return iterator{
    +
    2369 (*this)(addressof_tag{}) + (*this)(size_bytes_tag{}),
    +
    2370 (*this)(get_header_tag{}).blockLength().value(),
    +
    2371 size(),
    +
    2372 (*this)(end_ptr_tag{})};
    +
    2373 }
    +
    +
    2374
    +
    +
    2377 SBEPP_CPP14_CONSTEXPR reference operator[](size_type pos) const noexcept
    +
    2378 {
    +
    2379 SBEPP_ASSERT(pos < size());
    +
    2380 return *(begin() + pos);
    +
    2381 }
    +
    +
    2382
    +
    +
    2385 SBEPP_CPP14_CONSTEXPR reference front() const noexcept
    +
    2386 {
    +
    2387 SBEPP_ASSERT(!empty());
    +
    2388 return *begin();
    +
    2389 }
    +
    +
    2390
    +
    +
    2393 SBEPP_CPP14_CONSTEXPR reference back() const noexcept
    +
    2394 {
    +
    2395 SBEPP_ASSERT(!empty());
    +
    2396 return *(--end());
    +
    2397 }
    +
    +
    2398
    +
    +
    2401 SBEPP_CPP14_CONSTEXPR void clear() const noexcept
    +
    2402 {
    +
    2403 resize(0);
    +
    2404 }
    +
    +
    2405
    +
    2407 template<typename Byte2>
    +
    2408 using cursor_range_t = detail::cursor_range<
    +
    2409 value_type,
    +
    2410 size_type,
    + +
    2412 typename std::decay<
    +
    2413 decltype(std::declval<Dimension>().blockLength().value())>::type,
    +
    2414 Byte>;
    +
    2415
    +
    2417 template<
    +
    2418 typename Byte2,
    +
    2419 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    2420 SBEPP_CPP20_CONSTEXPR cursor_range_t<Byte2>
    +
    +
    2421 cursor_range(cursor<Byte2>& c) const noexcept
    +
    2422 {
    +
    2423 return {
    +
    2424 c,
    +
    2425 (*this)(get_header_tag{}).blockLength().value(),
    +
    2426 (*this)(end_ptr_tag{}),
    +
    2427 0,
    +
    2428 size()};
    +
    2429 }
    +
    +
    2430
    +
    2433 template<
    +
    2434 typename Byte2,
    +
    2435 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    2436 SBEPP_CPP20_CONSTEXPR cursor_range_t<Byte2>
    +
    +
    2437 cursor_subrange(cursor<Byte2>& c, const size_type pos) const noexcept
    +
    2438 {
    +
    2439 SBEPP_ASSERT(pos < size());
    +
    2440
    +
    2441 return {
    +
    2442 c,
    +
    2443 (*this)(get_header_tag{}).blockLength().value(),
    +
    2444 (*this)(end_ptr_tag{}),
    +
    2445 pos,
    +
    2446 static_cast<size_type>(size() - pos)};
    +
    2447 }
    +
    +
    2448
    +
    2452 template<
    +
    2453 typename Byte2,
    +
    2454 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    + +
    2456 cursor<Byte2>& c,
    +
    2457 const size_type pos,
    +
    2458 const size_type count) const noexcept
    +
    2459 {
    +
    2460 SBEPP_ASSERT(pos < size());
    +
    2461 SBEPP_ASSERT(count <= (size() - pos));
    +
    2462
    +
    2463 return {
    +
    2464 c,
    +
    2465 (*this)(get_header_tag{}).blockLength().value(),
    +
    2466 (*this)(end_ptr_tag{}),
    +
    2467 pos,
    +
    2468 count};
    +
    2469 }
    +
    +
    2470
    +
    2472 template<typename Byte2>
    +
    2473 using cursor_iterator = typename cursor_range_t<Byte2>::iterator;
    +
    2474
    +
    2476 template<
    +
    2477 typename Byte2,
    +
    2478 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    2479 SBEPP_CPP20_CONSTEXPR cursor_iterator<Byte2>
    +
    +
    2480 cursor_begin(cursor<Byte2>& c) const noexcept
    +
    2481 {
    +
    2482 return cursor_range(c).begin();
    +
    2483 }
    +
    +
    2484
    +
    2486 template<
    +
    2487 typename Byte2,
    +
    2488 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    2489 SBEPP_CPP20_CONSTEXPR cursor_iterator<Byte2>
    +
    +
    2490 cursor_end(cursor<Byte2>& c) const noexcept
    +
    2491 {
    +
    2492 return cursor_range(c).end();
    +
    2493 }
    +
    +
    2494
    +
    2495 template<typename Visitor, typename Cursor>
    +
    2496 SBEPP_CPP14_CONSTEXPR bool
    +
    2497 operator()(visit_children_tag, Visitor& v, Cursor& c)
    +
    2498 {
    +
    2499 for(const auto entry : this->cursor_range(c))
    +
    2500 {
    +
    2501 if(v.template on_entry(entry, c))
    +
    2502 {
    +
    2503 return true;
    +
    2504 }
    +
    2505 }
    +
    2506 return false;
    +
    2507 }
    +
    2508};
    +
    +
    2509
    +
    2511template<typename Byte, typename Entry, typename Dimension>
    +
    +
    2512class nested_group_base : public byte_range<Byte>
    +
    2513{
    +
    2514public:
    +
    2516 using value_type = Entry;
    + +
    2520 using sbe_size_type = typename std::decay<
    +
    2521 decltype(std::declval<Dimension>().numInGroup())>::type;
    +
    2523 using size_type = typename sbe_size_type::value_type;
    +
    2525 using difference_type = typename std::make_signed<size_type>::type;
    +
    2526
    +
    2529 using iterator = forward_iterator<
    +
    2530 Byte,
    +
    2531 Entry,
    +
    2532 size_type,
    + +
    2534 typename std::decay<
    +
    2535 decltype(std::declval<Dimension>().blockLength().value())>::type>;
    +
    2536
    +
    2537 using byte_range<Byte>::byte_range;
    +
    2538 using byte_range<Byte>::operator();
    +
    2539
    +
    2540 SBEPP_CPP14_CONSTEXPR Dimension operator()(get_header_tag) const noexcept
    +
    2541 {
    +
    2542 Dimension header{(*this)(addressof_tag{}), (*this)(end_ptr_tag{})};
    +
    2543 SBEPP_SIZE_CHECK(
    +
    2544 (*this)(addressof_tag{}),
    +
    2545 (*this)(end_ptr_tag{}),
    +
    2546 0,
    +
    2547 sbepp::size_bytes(header));
    +
    2548 return header;
    +
    2549 }
    +
    2550
    +
    2551 SBEPP_CPP20_CONSTEXPR std::size_t operator()(size_bytes_tag) const noexcept
    +
    2552 {
    +
    2553 std::size_t size{sbepp::size_bytes((*this)(get_header_tag{}))};
    +
    2554 for(const auto entry : *this)
    +
    2555 {
    +
    2556 size += sbepp::size_bytes(entry);
    +
    2557 }
    +
    2558
    +
    2559 return size;
    +
    2560 }
    +
    2561
    +
    +
    2563 SBEPP_CPP20_CONSTEXPR sbe_size_type sbe_size() const noexcept
    +
    2564 {
    +
    2565 return (*this)(get_header_tag{}).numInGroup();
    +
    2566 }
    +
    +
    2567
    +
    +
    2569 SBEPP_CPP20_CONSTEXPR size_type size() const noexcept
    +
    2570 {
    +
    2571 return sbe_size().value();
    +
    2572 }
    +
    +
    2573
    +
    +
    2575 SBEPP_CPP20_CONSTEXPR void resize(const size_type count) const noexcept
    +
    2576 {
    +
    2577 (*this)(get_header_tag{}).numInGroup(count);
    +
    2578 }
    +
    +
    2579
    +
    +
    2581 SBEPP_CPP17_NODISCARD SBEPP_CPP20_CONSTEXPR bool empty() const noexcept
    +
    2582 {
    +
    2583 return !size();
    +
    2584 }
    +
    +
    2585
    +
    +
    2587 constexpr static size_type max_size() noexcept
    +
    2588 {
    +
    2589 return sbe_size_type::max_value();
    +
    2590 }
    +
    +
    2591
    +
    +
    2593 SBEPP_CPP14_CONSTEXPR iterator begin() const noexcept
    +
    2594 {
    +
    2595 auto dimension = (*this)(get_header_tag{});
    +
    2596 return iterator{
    +
    2597 (*this)(addressof_tag{}) + sbepp::size_bytes(dimension),
    +
    2598 0,
    +
    2599 dimension.blockLength().value(),
    +
    2600 (*this)(end_ptr_tag{})};
    +
    2601 }
    +
    +
    2602
    +
    +
    2604 constexpr iterator end() const noexcept
    +
    2605 {
    +
    2606 return iterator{
    +
    2607 nullptr,
    +
    2608 (*this)(get_header_tag{}).numInGroup().value(),
    +
    2609 (*this)(get_header_tag{}).blockLength().value(),
    +
    2610 (*this)(end_ptr_tag{})};
    +
    2611 }
    +
    +
    2612
    +
    +
    2615 SBEPP_CPP14_CONSTEXPR reference front() const noexcept
    +
    2616 {
    +
    2617 SBEPP_ASSERT(!empty());
    +
    2618 return *begin();
    +
    2619 }
    +
    +
    2620
    +
    +
    2623 SBEPP_CPP14_CONSTEXPR void clear() const noexcept
    +
    2624 {
    +
    2625 resize(0);
    +
    2626 }
    +
    +
    2627
    +
    2629 template<typename Byte2>
    +
    2630 using cursor_range_t = detail::cursor_range<
    +
    2631 value_type,
    +
    2632 size_type,
    + +
    2634 typename std::decay<
    +
    2635 decltype(std::declval<Dimension>().blockLength().value())>::type,
    +
    2636 Byte>;
    +
    2637
    +
    2639 template<
    +
    2640 typename Byte2,
    +
    2641 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    2642 SBEPP_CPP20_CONSTEXPR cursor_range_t<Byte2>
    +
    +
    2643 cursor_range(cursor<Byte2>& c) const noexcept
    +
    2644 {
    +
    2645 return {
    +
    2646 c,
    +
    2647 (*this)(get_header_tag{}).blockLength().value(),
    +
    2648 (*this)(end_ptr_tag{}),
    +
    2649 0,
    +
    2650 size()};
    +
    2651 }
    +
    +
    2652
    +
    2655 template<
    +
    2656 typename Byte2,
    +
    2657 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    2658 SBEPP_CPP20_CONSTEXPR cursor_range_t<Byte2>
    +
    +
    2659 cursor_subrange(cursor<Byte2>& c, const size_type pos) const noexcept
    +
    2660 {
    +
    2661 SBEPP_ASSERT(pos < size());
    +
    2662
    +
    2663 return {
    +
    2664 c,
    +
    2665 (*this)(get_header_tag{}).blockLength().value(),
    +
    2666 (*this)(end_ptr_tag{}),
    +
    2667 pos,
    +
    2668 static_cast<size_type>(size() - pos)};
    +
    2669 }
    +
    +
    2670
    +
    2674 template<
    +
    2675 typename Byte2,
    +
    2676 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    + +
    2678 cursor<Byte2>& c,
    +
    2679 const size_type pos,
    +
    2680 const size_type count) const noexcept
    +
    2681 {
    +
    2682 SBEPP_ASSERT(pos < size());
    +
    2683 SBEPP_ASSERT(count <= (size() - pos));
    +
    2684
    +
    2685 return {
    +
    2686 c,
    +
    2687 (*this)(get_header_tag{}).blockLength().value(),
    +
    2688 (*this)(end_ptr_tag{}),
    +
    2689 pos,
    +
    2690 count};
    +
    2691 }
    +
    +
    2692
    +
    2694 template<typename Byte2>
    +
    2695 using cursor_iterator = typename cursor_range_t<Byte2>::iterator;
    +
    2696
    +
    2698 template<
    +
    2699 typename Byte2,
    +
    2700 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    2701 SBEPP_CPP20_CONSTEXPR cursor_iterator<Byte2>
    +
    +
    2702 cursor_begin(cursor<Byte2>& c) const noexcept
    +
    2703 {
    +
    2704 return cursor_range(c).begin();
    +
    2705 }
    +
    +
    2706
    +
    2708 template<
    +
    2709 typename Byte2,
    +
    2710 typename = enable_if_cursor_compatible_t<Byte, Byte2>>
    +
    2711 SBEPP_CPP20_CONSTEXPR cursor_iterator<Byte2>
    +
    +
    2712 cursor_end(cursor<Byte2>& c) const noexcept
    +
    2713 {
    +
    2714 return cursor_range(c).end();
    +
    2715 }
    +
    +
    2716
    +
    2717 template<typename Visitor, typename Cursor>
    +
    2718 SBEPP_CPP14_CONSTEXPR bool
    +
    2719 operator()(visit_children_tag, Visitor& v, Cursor& c)
    +
    2720 {
    +
    2721 for(const auto entry : this->cursor_range(c))
    +
    2722 {
    +
    2723 if(v.template on_entry(entry, c))
    +
    2724 {
    +
    2725 return true;
    +
    2726 }
    +
    2727 }
    +
    2728 return false;
    +
    2729 }
    +
    2730};
    +
    +
    2731
    +
    2734template<typename T>
    +
    + +
    2736{
    +
    2737public:
    +
    2739 bitset_base() = default;
    +
    2740
    +
    +
    2742 explicit constexpr bitset_base(T value) noexcept : bits{value}
    +
    2743 {
    +
    2744 }
    +
    +
    2745
    +
    +
    2747 SBEPP_CPP14_CONSTEXPR T& operator*() noexcept
    +
    2748 {
    +
    2749 return bits;
    +
    2750 }
    +
    +
    2751
    +
    +
    2753 constexpr T operator*() const noexcept
    +
    2754 {
    +
    2755 return bits;
    +
    2756 }
    +
    +
    2757
    +
    2758 constexpr bool
    +
    2759 operator()(get_bit_tag, const choice_index_t n) const noexcept
    +
    2760 {
    +
    2761 return bits & (1 << n);
    +
    2762 }
    +
    2763
    +
    2764 SBEPP_CPP14_CONSTEXPR void
    +
    2765 operator()(set_bit_tag, const choice_index_t n, const bool b) noexcept
    +
    2766 {
    +
    2767 bits = ((bits & ~(1 << n)) | (b << n));
    +
    2768 }
    +
    2769
    +
    2771 constexpr friend bool
    +
    +
    2772 operator==(const bitset_base& lhs, const bitset_base& rhs) noexcept
    +
    2773 {
    +
    2774 return *lhs == *rhs;
    +
    2775 }
    +
    +
    2776
    +
    2778 constexpr friend bool
    +
    +
    2779 operator!=(const bitset_base& lhs, const bitset_base& rhs) noexcept
    +
    2780 {
    +
    2781 return *lhs != *rhs;
    +
    2782 }
    +
    +
    2783
    +
    2784private:
    +
    2785 T bits{};
    +
    2786};
    +
    +
    2787
    +
    2788template<typename View, typename = void_t<>>
    +
    2789struct has_get_header : std::false_type
    +
    2790{
    +
    2791};
    +
    2792
    +
    2793template<typename View>
    +
    2794struct has_get_header<
    +
    2795 View,
    +
    2796 void_t<decltype(sbepp::get_header(std::declval<View>()))>> : std::true_type
    +
    2797{
    +
    2798};
    +
    2799
    +
    2800template<
    +
    2801 typename View,
    +
    2802 typename = detail::enable_if_t<detail::has_get_header<View>::value>>
    +
    2803constexpr std::size_t get_header_size(View view) noexcept
    +
    2804{
    + +
    2806}
    +
    2807
    +
    2808template<
    +
    2809 typename View,
    +
    2810 typename = detail::enable_if_t<!detail::has_get_header<View>::value>,
    +
    2811 typename = int>
    +
    2812constexpr std::size_t get_header_size(View) noexcept
    +
    2813{
    +
    2814 return 0;
    +
    2815}
    +
    2816} // namespace detail
    +
    2817
    +
    2825template<typename Enum>
    +
    2826constexpr typename std::underlying_type<Enum>::type
    +
    +
    2827 to_underlying(Enum e) noexcept
    +
    2828{
    +
    2829 return static_cast<typename std::underlying_type<Enum>::type>(e);
    +
    2830}
    +
    +
    2831
    +
    2845template<typename View>
    +
    +
    2846SBEPP_CPP14_CONSTEXPR cursor<byte_type_t<View>> init_cursor(View view) noexcept
    +
    2847{
    + +
    2849 c.pointer() = sbepp::addressof(view) + detail::get_header_size(view);
    +
    2850 return c;
    +
    2851}
    +
    +
    2852
    +
    2867template<typename View>
    +
    2868SBEPP_CPP14_CONSTEXPR cursor<typename std::add_const<byte_type_t<View>>::type>
    +
    +
    2869 init_const_cursor(View view) noexcept
    +
    2870{
    + +
    2872 c.pointer() = sbepp::addressof(view) + detail::get_header_size(view);
    +
    2873 return c;
    +
    2874}
    +
    +
    2875
    +
    + +
    2881{
    +
    2882 explicit default_init_t() = default;
    +
    2883};
    +
    +
    2884
    +
    2890SBEPP_CPP17_INLINE_VAR constexpr default_init_t default_init{};
    +
    2891
    +
    +
    2894enum class eos_null
    +
    2895{
    +
    2898 none,
    +
    2902 single,
    +
    2904 all
    +
    2905};
    +
    +
    2906
    +
    2907namespace detail
    +
    2908{
    +
    2909template<typename From, typename To>
    +
    2910struct copy_cv_qualifiers
    +
    2911{
    +
    2912 using copy_const_t = typename std::
    +
    2913 conditional<std::is_const<From>::value, const To, To>::type;
    +
    2914
    +
    2915 using type = typename std::conditional<
    +
    2916 std::is_volatile<From>::value,
    +
    2917 volatile copy_const_t,
    +
    2918 copy_const_t>::type;
    +
    2919};
    +
    2920
    +
    2921template<typename From, typename To>
    +
    2922using apply_cv_qualifiers_t = typename copy_cv_qualifiers<From, To>::type;
    +
    2923
    +
    2924#if SBEPP_HAS_RANGES
    +
    2925template<typename R>
    +
    2926using is_range = std::bool_constant<std::ranges::range<R>>;
    +
    2927#else
    +
    2928template<typename R, typename = void_t<>>
    +
    2929struct is_range : std::false_type
    +
    2930{
    +
    2931};
    +
    2932
    +
    2933template<typename R>
    +
    2934struct is_range<
    +
    2935 R,
    +
    2936 void_t<
    +
    2937 decltype(std::begin(std::declval<R>())),
    +
    2938 decltype(std::end(std::declval<R>()))>> : std::true_type
    +
    2939{
    +
    2940};
    +
    2941#endif
    +
    2942
    +
    2943constexpr bool is_constant_evaluated() noexcept
    +
    2944{
    +
    2945 // it's possible to use `__builtin_is_constant_evaluated` with lower C++
    +
    2946 // versions but I see no reason for this since it's only used for
    +
    2947 // `assign_string` and other accessors are not be `constexpr` until C++20
    +
    2948#if SBEPP_HAS_IS_CONSTANT_EVALUATED
    +
    2949 return std::is_constant_evaluated();
    +
    2950#else
    +
    2951 return false;
    +
    2952#endif
    +
    2953}
    +
    2954
    +
    2955inline SBEPP_CPP20_CONSTEXPR std::size_t string_length(const char* str) noexcept
    +
    2956{
    +
    2957 if(is_constant_evaluated())
    +
    2958 {
    +
    2959 std::size_t length{};
    +
    2960 // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-pointer-arithmetic)
    +
    2961 for(; *str != '\0'; str++, length++)
    +
    2962 {
    +
    2963 }
    +
    2964
    +
    2965 return length;
    +
    2966 }
    +
    2967 else
    +
    2968 {
    +
    2969 return std::strlen(str);
    +
    2970 }
    +
    2971}
    +
    2972
    +
    2980template<typename Byte, typename Value, std::size_t N, typename Tag>
    +
    + +
    2982{
    +
    2983public:
    +
    2986 using element_type = detail::apply_cv_qualifiers_t<Byte, Value>;
    +
    2988 using value_type = Value;
    +
    2990 using size_type = std::size_t;
    +
    2992 using difference_type = std::ptrdiff_t;
    + + + +
    3000 using reverse_iterator = std::reverse_iterator<iterator>;
    +
    3002 using tag = Tag;
    +
    3003
    +
    3004 using detail::byte_range<Byte>::byte_range;
    +
    3005 using detail::byte_range<Byte>::operator();
    +
    3006
    +
    3007 constexpr std::size_t operator()(detail::size_bytes_tag) const noexcept
    +
    3008 {
    +
    3009 return size();
    +
    3010 }
    +
    3011
    +
    +
    3014 SBEPP_CPP14_CONSTEXPR reference operator[](size_type pos) const noexcept
    +
    3015 {
    +
    3016 SBEPP_ASSERT(pos < size());
    +
    3017 return data()[pos];
    +
    3018 }
    +
    +
    3019
    +
    +
    3021 constexpr reference front() const noexcept
    +
    3022 {
    +
    3023 return *data();
    +
    3024 }
    +
    +
    3025
    +
    +
    3027 constexpr reference back() const noexcept
    +
    3028 {
    +
    3029 return data()[size() - 1];
    +
    3030 }
    +
    +
    3031
    +
    +
    3033 SBEPP_CPP14_CONSTEXPR pointer data() const noexcept
    +
    3034 {
    +
    3035 // it would be nice to use `reinterpret_cast` here but it's not allowed
    +
    3036 // in constexpr context
    +
    3037 SBEPP_SIZE_CHECK(
    +
    3038 (*this)(detail::addressof_tag{}),
    +
    3039 (*this)(detail::end_ptr_tag{}),
    +
    3040 0,
    +
    3041 N);
    +
    3042 return (pointer)(*this)(detail::addressof_tag{}); // NOLINT
    +
    3043 }
    +
    +
    3044
    +
    +
    3046 SBEPP_CPP17_NODISCARD static constexpr bool empty() noexcept
    +
    3047 {
    +
    3048 return !size();
    +
    3049 }
    +
    +
    3050
    +
    +
    3052 static constexpr size_type size() noexcept
    +
    3053 {
    +
    3054 return N;
    +
    3055 }
    +
    +
    3056
    +
    +
    3058 static constexpr size_type max_size() noexcept
    +
    3059 {
    +
    3060 return size();
    +
    3061 }
    +
    +
    3062
    +
    +
    3064 constexpr iterator begin() const noexcept
    +
    3065 {
    +
    3066 return data();
    +
    3067 }
    +
    +
    3068
    +
    +
    3070 constexpr iterator end() const noexcept
    +
    3071 {
    +
    3072 return data() + size();
    +
    3073 }
    +
    +
    3074
    +
    +
    3076 constexpr reverse_iterator rbegin() const noexcept
    +
    3077 {
    +
    3078 return reverse_iterator{end()};
    +
    3079 }
    +
    +
    3080
    +
    +
    3082 constexpr reverse_iterator rend() const noexcept
    +
    3083 {
    +
    3084 return reverse_iterator{begin()};
    +
    3085 }
    +
    +
    3086
    + +
    +
    3099 raw() const noexcept
    +
    3100 {
    + +
    3102 (*this)(detail::addressof_tag{}), (*this)(detail::end_ptr_tag{})};
    +
    3103 }
    +
    +
    3104
    +
    +
    3111 SBEPP_CPP20_CONSTEXPR std::size_t strlen() const noexcept
    +
    3112 {
    +
    3113 if(is_constant_evaluated())
    +
    3114 {
    +
    3115 return string_length(data());
    +
    3116 }
    +
    3117 else
    +
    3118 {
    +
    3119 const auto first_null = static_cast<const value_type*>(
    +
    3120 std::memchr(data(), '\0', size()));
    +
    3121 if(first_null)
    +
    3122 {
    +
    3123 return first_null - data();
    +
    3124 }
    +
    3125
    +
    3126 return size();
    +
    3127 }
    +
    3128 }
    +
    +
    3129
    +
    +
    3136 SBEPP_CPP20_CONSTEXPR std::size_t strlen_r() const noexcept
    +
    3137 {
    +
    3138 const auto last_non_null = std::find_if(
    +
    3139 rbegin(),
    +
    3140 rend(),
    +
    3141 [](const value_type value)
    +
    3142 {
    +
    3143 return value != '\0';
    +
    3144 });
    +
    3145 return size() - (last_non_null - rbegin());
    +
    3146 }
    +
    +
    3147
    +
    3159 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3160 SBEPP_CPP20_CONSTEXPR iterator assign_string(
    +
    3161 const char* str, const eos_null eos_mode = eos_null::all) const noexcept
    +
    3162 {
    +
    3163 SBEPP_ASSERT(str != nullptr);
    +
    3164 const auto length = string_length(str);
    +
    3165 SBEPP_ASSERT(length <= size());
    +
    3166 const auto eos_pos = std::copy_n(str, length, begin());
    +
    3167 pad(eos_mode, eos_pos);
    +
    3168 return eos_pos;
    +
    3169 }
    +
    +
    3170
    +
    3183 template<
    +
    3184 typename R,
    +
    3185 typename =
    +
    3186 enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
    +
    3187 SBEPP_CPP20_CONSTEXPR iterator
    +
    +
    3188 assign_string(R&& r, const eos_null eos_mode = eos_null::all) const
    +
    3189 {
    +
    3190 auto eos_pos = assign_range(std::forward<R>(r));
    +
    3191 pad(eos_mode, eos_pos);
    +
    3192 return eos_pos;
    +
    3193 }
    +
    +
    3194
    +
    3204 template<
    +
    3205 typename R,
    +
    3206 typename =
    +
    3207 enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
    +
    +
    3208 SBEPP_CPP20_CONSTEXPR iterator assign_range(R&& r) const
    +
    3209 {
    +
    3210#if SBEPP_HAS_RANGES
    +
    3211 auto res = std::ranges::copy(std::forward<R>(r), begin()).out;
    +
    3212#else
    +
    3213 auto res = std::copy(std::begin(r), std::end(r), begin());
    +
    3214#endif
    +
    3215 SBEPP_ASSERT(res <= end());
    +
    3216 return res;
    +
    3217 }
    +
    +
    3218
    +
    3224 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3225 SBEPP_CPP20_CONSTEXPR void fill(const value_type value) const noexcept
    +
    3226 {
    +
    3227 std::fill_n(begin(), size(), value);
    +
    3228 }
    +
    +
    3229
    +
    3238 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    3239 SBEPP_CPP20_CONSTEXPR iterator
    +
    +
    3240 assign(size_type count, const value_type value) const noexcept
    +
    3241 {
    +
    3242 SBEPP_ASSERT(count <= size());
    +
    3243 return std::fill_n(begin(), count, value);
    +
    3244 }
    +
    +
    3245
    +
    3249 template<typename InputIt, typename = enable_if_writable_t<Byte, InputIt>>
    +
    +
    3250 SBEPP_CPP20_CONSTEXPR iterator assign(InputIt first, InputIt last) const
    +
    3251 {
    +
    3252 const auto last_out = std::copy(first, last, begin());
    +
    3253 SBEPP_ASSERT(static_cast<size_type>(last_out - begin()) <= size());
    +
    3254 return last_out;
    +
    3255 }
    +
    +
    3256
    +
    3264 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    3265 SBEPP_CPP20_CONSTEXPR iterator
    +
    +
    3266 assign(std::initializer_list<value_type> ilist) const noexcept
    +
    3267 {
    +
    3268 SBEPP_ASSERT(ilist.size() <= size());
    +
    3269 return assign(std::begin(ilist), std::end(ilist));
    +
    3270 }
    +
    +
    3271
    +
    3272private:
    +
    3273 SBEPP_CPP20_CONSTEXPR void
    +
    3274 pad(const eos_null mode, iterator eos_pos) const noexcept
    +
    3275 {
    +
    3276 if(mode == eos_null::all)
    +
    3277 {
    +
    3278 std::fill(eos_pos, end(), '\0');
    +
    3279 }
    +
    3280 else if(mode == eos_null::single)
    +
    3281 {
    +
    3282 if(eos_pos != end())
    +
    3283 {
    +
    3284 *eos_pos = '\0';
    +
    3285 }
    +
    3286 }
    +
    3287 else
    +
    3288 {
    +
    3289 SBEPP_ASSERT(mode == eos_null::none);
    +
    3290 return;
    +
    3291 }
    +
    3292 }
    +
    3293};
    +
    +
    3294
    +
    3302template<typename Byte, typename Value, typename Length, endian E>
    +
    + +
    3304{
    +
    3305public:
    +
    3306 static_assert(
    +
    3307 std::is_unsigned<typename Length::value_type>::value,
    +
    3308 "Length must be unsigned");
    +
    3309
    +
    3312 using element_type = detail::apply_cv_qualifiers_t<Byte, Value>;
    +
    3314 using value_type = Value;
    +
    3316 using sbe_size_type = Length;
    +
    3318 using size_type = typename sbe_size_type::value_type;
    +
    3320 using difference_type = std::ptrdiff_t;
    + + + +
    3328 using reverse_iterator = std::reverse_iterator<iterator>;
    +
    3329
    +
    3330 using detail::byte_range<Byte>::byte_range;
    +
    3331 using detail::byte_range<Byte>::operator();
    +
    3332
    +
    +
    3334 constexpr iterator begin() const noexcept
    +
    3335 {
    +
    3336 return data_checked();
    +
    3337 }
    +
    +
    3338
    +
    +
    3340 SBEPP_CPP20_CONSTEXPR iterator end() const noexcept
    +
    3341 {
    +
    3342 return begin() + size();
    +
    3343 }
    +
    +
    3344
    +
    +
    3346 SBEPP_CPP20_CONSTEXPR reverse_iterator rbegin() const noexcept
    +
    3347 {
    +
    3348 return reverse_iterator{end()};
    +
    3349 }
    +
    +
    3350
    +
    +
    3352 constexpr reverse_iterator rend() const noexcept
    +
    3353 {
    +
    3354 return reverse_iterator{begin()};
    +
    3355 }
    +
    +
    3356
    +
    +
    3359 SBEPP_CPP14_CONSTEXPR reference front() const noexcept
    +
    3360 {
    +
    3361 SBEPP_ASSERT(!empty());
    +
    3362 return *data();
    +
    3363 }
    +
    +
    3364
    +
    +
    3367 SBEPP_CPP20_CONSTEXPR reference back() const noexcept
    +
    3368 {
    +
    3369 SBEPP_ASSERT(!empty());
    +
    3370 return *(data() + size() - 1);
    +
    3371 }
    +
    +
    3372
    +
    +
    3380 SBEPP_CPP14_CONSTEXPR pointer data() const noexcept
    +
    3381 {
    +
    3382 return data_checked();
    +
    3383 }
    +
    +
    3384
    +
    +
    3387 SBEPP_CPP14_CONSTEXPR reference operator[](size_type pos) const noexcept
    +
    3388 {
    +
    3389 SBEPP_ASSERT(pos < size());
    +
    3390 return *(data() + pos);
    +
    3391 }
    +
    +
    3392
    +
    +
    3394 SBEPP_CPP20_CONSTEXPR sbe_size_type sbe_size() const noexcept
    +
    3395 {
    +
    3396 return detail::get_value<size_type, size_type, E>(*this, 0);
    +
    3397 }
    +
    +
    3398
    +
    +
    3400 SBEPP_CPP20_CONSTEXPR size_type size() const noexcept
    +
    3401 {
    +
    3402 return sbe_size().value();
    +
    3403 }
    +
    +
    3404
    +
    +
    3406 SBEPP_CPP17_NODISCARD SBEPP_CPP20_CONSTEXPR bool empty() const noexcept
    +
    3407 {
    +
    3408 return !size();
    +
    3409 }
    +
    +
    3410
    +
    +
    3412 constexpr static size_type max_size() noexcept
    +
    3413 {
    +
    3414 return sbe_size_type::max_value();
    +
    3415 }
    +
    +
    3416
    +
    3418 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3419 SBEPP_CPP20_CONSTEXPR void clear() const noexcept
    +
    3420 {
    +
    3421 resize(0, default_init);
    +
    3422 }
    +
    +
    3423
    +
    3425 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3426 SBEPP_CPP20_CONSTEXPR void resize(size_type count) const noexcept
    +
    3427 {
    +
    3428 const auto old_size = size();
    +
    3429 resize(count, default_init);
    +
    3430 if(count > old_size)
    +
    3431 {
    +
    3432 for(auto i = old_size; i != count; i++)
    +
    3433 {
    +
    3434 operator[](i) = {};
    +
    3435 }
    +
    3436 }
    +
    3437 }
    +
    +
    3438
    +
    3440 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    3441 SBEPP_CPP20_CONSTEXPR void
    +
    +
    3442 resize(size_type count, value_type value) const noexcept
    +
    3443 {
    +
    3444 const auto old_size = size();
    +
    3445 resize(count, default_init);
    +
    3446 if(count > old_size)
    +
    3447 {
    +
    3448 for(auto i = old_size; i != count; i++)
    +
    3449 {
    +
    3450 operator[](i) = value;
    +
    3451 }
    +
    3452 }
    +
    3453 }
    +
    +
    3454
    +
    3456 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    3457 SBEPP_CPP20_CONSTEXPR void
    +
    + +
    3459 {
    +
    3460 // can't use `detail::set_value()` here because its size check checks
    +
    3461 // only `sizeof(T)`, here we need `sizeof(size_type) + count`
    +
    3462 SBEPP_SIZE_CHECK(
    +
    3463 (*this)(addressof_tag{}),
    +
    3464 (*this)(end_ptr_tag{}),
    +
    3465 0,
    +
    3466 sizeof(size_type) + count);
    +
    3467 set_primitive<E>((*this)(addressof_tag{}), count);
    +
    3468 }
    +
    +
    3469
    +
    3471 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3472 SBEPP_CPP20_CONSTEXPR void push_back(value_type value) const noexcept
    +
    3473 {
    +
    3474 const auto current_size = size();
    +
    3475 resize(current_size + 1, default_init);
    +
    3476 (*this)[current_size] = value;
    +
    3477 }
    +
    +
    3478
    +
    3480 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3481 SBEPP_CPP20_CONSTEXPR void pop_back() const noexcept
    +
    3482 {
    +
    3483 SBEPP_ASSERT(!empty());
    +
    3484 resize(size() - 1, default_init);
    +
    3485 }
    +
    +
    3486
    +
    3488 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3489 SBEPP_CPP20_CONSTEXPR iterator erase(iterator pos) const noexcept
    +
    3490 {
    +
    3491 SBEPP_ASSERT(pos >= begin() && pos < end());
    +
    3492 std::copy(pos + 1, end(), pos);
    +
    3493 resize(size() - 1, default_init);
    +
    3494 return pos;
    +
    3495 }
    +
    +
    3496
    +
    3498 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    3499 SBEPP_CPP20_CONSTEXPR iterator
    +
    +
    3500 erase(iterator first, iterator last) const noexcept
    +
    3501 {
    +
    3502 SBEPP_ASSERT(first >= begin() && last < end());
    +
    3503 std::copy(last, end(), first);
    +
    3504 resize(size() - (last - first), default_init);
    +
    3505 return first;
    +
    3506 }
    +
    +
    3507
    +
    3509 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    3510 SBEPP_CPP20_CONSTEXPR iterator
    +
    +
    3511 insert(iterator pos, const value_type value) const noexcept
    +
    3512 {
    +
    3513 SBEPP_ASSERT(pos >= begin() && pos <= end());
    +
    3514 const auto old_end = end();
    +
    3515 resize(size() + 1, default_init);
    +
    3516 std::copy_backward(pos, old_end, end());
    +
    3517 *pos = value;
    +
    3518 return pos;
    +
    3519 }
    +
    +
    3520
    +
    3522 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3523 SBEPP_CPP20_CONSTEXPR iterator insert(
    +
    3524 iterator pos, size_type count, const value_type value) const noexcept
    +
    3525 {
    +
    3526 SBEPP_ASSERT(pos >= begin() && pos <= end());
    +
    3527 const auto old_end = end();
    +
    3528 resize(size() + count, default_init);
    +
    3529 std::copy_backward(pos, old_end, end());
    +
    3530 std::fill_n(pos, count, value);
    +
    3531 return pos;
    +
    3532 }
    +
    +
    3533
    +
    3535 template<
    +
    3536 typename InputIt,
    +
    3537 typename = detail::enable_if_t<
    +
    3538 !std::is_const<Byte>::value
    +
    3539 && std::is_convertible<
    +
    3540 typename std::iterator_traits<InputIt>::iterator_category,
    +
    3541 std::input_iterator_tag>::value>>
    +
    3542 SBEPP_CPP14_CONSTEXPR iterator
    +
    +
    3543 insert(iterator pos, InputIt first, InputIt last) const
    +
    3544 {
    +
    3545 SBEPP_ASSERT(pos >= begin() && pos <= end());
    +
    3546 using category_t =
    +
    3547 typename std::iterator_traits<InputIt>::iterator_category;
    +
    3548 return insert_impl(pos, first, last, category_t{});
    +
    3549 }
    +
    +
    3550
    +
    3552 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3553 constexpr iterator insert(
    +
    3554 iterator pos, std::initializer_list<value_type> ilist) const noexcept
    +
    3555 {
    +
    3556 return insert(pos, std::begin(ilist), std::end(ilist));
    +
    3557 }
    +
    +
    3558
    +
    3561 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    3562 SBEPP_CPP20_CONSTEXPR void
    +
    +
    3563 assign(size_type count, const value_type value) const noexcept
    +
    3564 {
    +
    3565 resize(count, default_init);
    +
    3566 std::fill_n(begin(), count, value);
    +
    3567 }
    +
    +
    3568
    +
    3571 template<typename InputIt, typename = enable_if_writable_t<Byte, InputIt>>
    +
    +
    3572 SBEPP_CPP20_CONSTEXPR void assign(InputIt first, InputIt last) const
    +
    3573 {
    +
    3574 auto begin = data_unchecked();
    +
    3575 const auto new_end = std::copy(first, last, begin);
    +
    3576 resize(new_end - begin, default_init);
    +
    3577 }
    +
    +
    3578
    +
    3581 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    3582 SBEPP_CPP20_CONSTEXPR void
    +
    +
    3583 assign(std::initializer_list<value_type> ilist) const noexcept
    +
    3584 {
    +
    3585 SBEPP_SIZE_CHECK(
    +
    3586 (*this)(detail::addressof_tag{}),
    +
    3587 (*this)(detail::end_ptr_tag{}),
    +
    3588 0,
    +
    3589 sizeof(size_type) + ilist.size());
    +
    3590 assign(std::begin(ilist), std::end(ilist));
    +
    3591 }
    +
    +
    3592
    + +
    +
    3600 raw() const noexcept
    +
    3601 {
    + +
    3603 (*this)(detail::addressof_tag{}), (*this)(detail::end_ptr_tag{})};
    +
    3604 }
    +
    +
    3605
    +
    3606 SBEPP_CPP20_CONSTEXPR std::size_t
    +
    3607 operator()(detail::size_bytes_tag) const noexcept
    +
    3608 {
    +
    3609 return sizeof(size_type) + size();
    +
    3610 }
    +
    3611
    +
    3618 template<typename T = void, typename = enable_if_writable_t<Byte, T>>
    +
    +
    3619 SBEPP_CPP20_CONSTEXPR void assign_string(const char* str) const noexcept
    +
    3620 {
    +
    3621 SBEPP_ASSERT(str != nullptr);
    +
    3622 const auto length = string_length(str);
    +
    3623 resize(length, default_init);
    +
    3624 std::copy_n(str, length, begin());
    +
    3625 }
    +
    +
    3626
    +
    3634 template<
    +
    3635 typename R,
    +
    3636 typename =
    +
    3637 enable_if_t<!std::is_const<Byte>::value && is_range<R>::value>>
    +
    +
    3638 SBEPP_CPP20_CONSTEXPR void assign_range(R&& r) const
    +
    3639 {
    +
    3640 const auto begin = data_unchecked();
    +
    3641#if SBEPP_HAS_RANGES
    +
    3642 const auto new_end = std::ranges::copy(std::forward<R>(r), begin).out;
    +
    3643#else
    +
    3644 const auto new_end = std::copy(std::begin(r), std::end(r), begin);
    +
    3645#endif
    +
    3646 resize(new_end - begin, default_init);
    +
    3647 }
    +
    +
    3648
    +
    3649private:
    +
    3650 SBEPP_CPP14_CONSTEXPR pointer data_checked() const noexcept
    +
    3651 {
    +
    3652 SBEPP_SIZE_CHECK(
    +
    3653 (*this)(detail::addressof_tag{}),
    +
    3654 (*this)(detail::end_ptr_tag{}),
    +
    3655 0,
    +
    3656 sizeof(size_type) + size());
    +
    3657 return data_unchecked();
    +
    3658 }
    +
    3659
    +
    3660 SBEPP_CPP14_CONSTEXPR pointer data_unchecked() const noexcept
    +
    3661 {
    +
    3662 SBEPP_SIZE_CHECK(
    +
    3663 (*this)(detail::addressof_tag{}),
    +
    3664 (*this)(detail::end_ptr_tag{}),
    +
    3665 0,
    +
    3666 sizeof(size_type));
    +
    3667 // cast is conditionally required here when `Byte` is different type
    +
    3668 // from `Value`. `reinterpret_cast` is not allowed in constexpr context
    +
    3669 // even when it's an identity cast. On the other hand, C-style cast
    +
    3670 // is allowed in constexpr context when it renders to an identity cast
    +
    3671 // which effectively makes this and other functions conditionally
    +
    3672 // `constexpr` when `Byte` is equal to `Value`.
    +
    3673 // NOLINTNEXTLINE: see above
    +
    3674 return (pointer)((*this)(detail::addressof_tag{}) + sizeof(size_type));
    +
    3675 }
    +
    3676
    +
    3677 template<typename It>
    +
    3678 SBEPP_CPP14_CONSTEXPR iterator insert_impl(
    +
    3679 iterator pos, It first, It last, std::input_iterator_tag) const
    +
    3680 {
    +
    3681 auto out = pos;
    +
    3682 for(; first != last; ++first, ++out)
    +
    3683 {
    +
    3684 insert(out, *first);
    +
    3685 }
    +
    3686
    +
    3687 return pos;
    +
    3688 }
    +
    3689
    +
    3690 template<typename It>
    +
    3691 SBEPP_CPP20_CONSTEXPR iterator insert_impl(
    +
    3692 iterator pos, It first, It last, std::forward_iterator_tag) const
    +
    3693 {
    +
    3694 const auto in_size = std::distance(first, last);
    +
    3695 auto old_end = end();
    +
    3696 resize(size() + in_size, default_init);
    +
    3697 std::copy_backward(pos, old_end, end());
    +
    3698 std::copy(first, last, pos);
    +
    3699 return pos;
    +
    3700 }
    +
    3701};
    +
    +
    3702} // namespace detail
    +
    3703
    +
    + +
    3706{
    +
    3707 explicit constexpr nullopt_t(int)
    +
    3708 {
    +
    3709 }
    +
    3710};
    +
    +
    3711
    +
    3717SBEPP_CPP17_INLINE_VAR constexpr nullopt_t nullopt{0};
    +
    3718
    +
    3719namespace detail
    +
    3720{
    +
    3721// see `optional_base` note about explicit `alignas`
    +
    3725template<typename T, typename Derived>
    +
    +
    3726class alignas(T) required_base
    +
    3727{
    +
    3728public:
    +
    3730 using value_type = T;
    +
    3731
    +
    3733 required_base() = default;
    +
    3734
    +
    3736 // NOLINTNEXTLINE: it should be implicit
    +
    +
    3737 constexpr required_base(value_type val) noexcept : val{val}
    +
    3738 {
    +
    3739 }
    +
    +
    3740
    +
    +
    3742 constexpr value_type value() const noexcept
    +
    3743 {
    +
    3744 return **this;
    +
    3745 }
    +
    +
    3746
    +
    +
    3748 SBEPP_CPP14_CONSTEXPR value_type& operator*() noexcept
    +
    3749 {
    +
    3750 return val;
    +
    3751 }
    +
    +
    3752
    +
    +
    3754 constexpr value_type operator*() const noexcept
    +
    3755 {
    +
    3756 return val;
    +
    3757 }
    +
    +
    3758
    +
    +
    3761 constexpr bool in_range() const noexcept
    +
    3762 {
    +
    3763 return (Derived::min_value() <= val) && (val <= Derived::max_value());
    +
    3764 }
    +
    +
    3765
    +
    3769#ifdef SBEPP_DOXYGEN
    +
    3771 friend auto
    +
    3772 operator<=>(const required_base&, const required_base&) = default;
    +
    3773#endif
    +
    3774
    +
    3775#if SBEPP_HAS_THREE_WAY_COMPARISON
    +
    3776 friend auto
    +
    3777 operator<=>(const required_base&, const required_base&) = default;
    +
    3778#else
    +
    3780 constexpr friend bool
    +
    +
    3781 operator==(const required_base& lhs, const required_base& rhs) noexcept
    +
    3782 {
    +
    3783 return *lhs == *rhs;
    +
    3784 }
    +
    +
    3785
    +
    3787 constexpr friend bool
    +
    +
    3788 operator!=(const required_base& lhs, const required_base& rhs) noexcept
    +
    3789 {
    +
    3790 return *lhs != *rhs;
    +
    3791 }
    +
    +
    3792
    +
    +
    3794 constexpr friend bool
    +
    3795 operator<(const required_base& lhs, const required_base& rhs) noexcept
    +
    3796 {
    +
    3797 return *lhs < *rhs;
    +
    3798 }
    +
    +
    3799
    +
    +
    3801 constexpr friend bool
    +
    3802 operator<=(const required_base& lhs, const required_base& rhs) noexcept
    +
    3803 {
    +
    3804 return *lhs <= *rhs;
    +
    3805 }
    +
    +
    3806
    +
    3808 constexpr friend bool
    +
    +
    3809 operator>(const required_base& lhs, const required_base& rhs) noexcept
    +
    3810 {
    +
    3811 return *lhs > *rhs;
    +
    3812 }
    +
    +
    3813
    +
    3815 constexpr friend bool
    +
    +
    3816 operator>=(const required_base& lhs, const required_base& rhs) noexcept
    +
    3817 {
    +
    3818 return *lhs >= *rhs;
    +
    3819 }
    +
    +
    3820#endif
    +
    3822
    +
    3823private:
    +
    3824 value_type val{};
    +
    3825};
    +
    +
    3826
    +
    3827// old compilers might generate wrong alignment for classes which contain
    +
    3828// `double` member. To overcome this, explicit alignment is provided.
    +
    3832template<typename T, typename Derived>
    +
    +
    3833class alignas(T) optional_base
    +
    3834{
    +
    3835public:
    +
    3837 using value_type = T;
    +
    3838
    +
    3840 optional_base() = default;
    +
    3841
    +
    3843 // NOLINTNEXTLINE: it's intentionally implicit
    +
    +
    3844 constexpr optional_base(nullopt_t) noexcept : optional_base{}
    +
    3845 {
    +
    3846 }
    +
    +
    3847
    +
    3849 // NOLINTNEXTLINE: it's intentionally implicit
    +
    +
    3850 constexpr optional_base(value_type val) noexcept : val{val}
    +
    3851 {
    +
    3852 }
    +
    +
    3853
    +
    +
    3855 constexpr value_type value() const noexcept
    +
    3856 {
    +
    3857 return **this;
    +
    3858 }
    +
    +
    3859
    +
    +
    3861 SBEPP_CPP14_CONSTEXPR value_type& operator*() noexcept
    +
    3862 {
    +
    3863 return val;
    +
    3864 }
    +
    +
    3865
    +
    +
    3867 constexpr value_type operator*() const noexcept
    +
    3868 {
    +
    3869 return val;
    +
    3870 }
    +
    +
    3871
    +
    +
    3874 constexpr bool in_range() const noexcept
    +
    3875 {
    +
    3876 return (Derived::min_value() <= val) && (val <= Derived::max_value());
    +
    3877 }
    +
    +
    3878
    +
    +
    3880 SBEPP_CPP14_CONSTEXPR value_type value_or(T default_value) const noexcept
    +
    3881 {
    +
    3882 if(*this)
    +
    3883 {
    +
    3884 return value();
    +
    3885 }
    +
    3886 return default_value;
    +
    3887 }
    +
    +
    3888
    +
    +
    3890 constexpr bool has_value() const noexcept
    +
    3891 {
    +
    3892 return (val != Derived::null_value());
    +
    3893 }
    +
    +
    3894
    +
    +
    3896 constexpr explicit operator bool() const noexcept
    +
    3897 {
    +
    3898 return has_value();
    +
    3899 }
    +
    +
    3900
    +
    3907
    +
    3909 constexpr friend bool
    +
    +
    3910 operator==(const optional_base& lhs, const optional_base& rhs) noexcept
    +
    3911 {
    +
    3912 return *lhs == *rhs;
    +
    3913 }
    +
    +
    3914
    +
    3915#ifdef SBEPP_DOXYGEN
    +
    3917 constexpr friend std::strong_ordering operator<=>(
    +
    3918 const optional_base& lhs, const optional_base& rhs) noexcept;
    +
    3919#endif
    +
    3920
    +
    3921#if SBEPP_HAS_THREE_WAY_COMPARISON
    +
    3922 constexpr friend std::strong_ordering
    +
    3923 operator<=>(const optional_base& lhs, const optional_base& rhs) noexcept
    +
    3924 {
    +
    3925 if(lhs && rhs)
    +
    3926 {
    +
    3927 return *lhs <=> *rhs;
    +
    3928 }
    +
    3929 return lhs.has_value() <=> rhs.has_value();
    +
    3930 }
    +
    3931#else
    +
    3932
    +
    3934 constexpr friend bool
    +
    +
    3935 operator!=(const optional_base& lhs, const optional_base& rhs) noexcept
    +
    3936 {
    +
    3937 return *lhs != *rhs;
    +
    3938 }
    +
    +
    3939
    +
    +
    3941 constexpr friend bool
    +
    3942 operator<(const optional_base& lhs, const optional_base& rhs) noexcept
    +
    3943 {
    +
    3944 return rhs && (!lhs || (*lhs < *rhs));
    +
    3945 }
    +
    +
    3946
    +
    +
    3948 constexpr friend bool
    +
    3949 operator<=(const optional_base& lhs, const optional_base& rhs) noexcept
    +
    3950 {
    +
    3951 return !lhs || (rhs && (*lhs <= *rhs));
    +
    3952 }
    +
    +
    3953
    +
    3955 constexpr friend bool
    +
    +
    3956 operator>(const optional_base& lhs, const optional_base& rhs) noexcept
    +
    3957 {
    +
    3958 return lhs && (!rhs || (*lhs > *rhs));
    +
    3959 }
    +
    +
    3960
    +
    3962 constexpr friend bool
    +
    +
    3963 operator>=(const optional_base& lhs, const optional_base& rhs) noexcept
    +
    3964 {
    +
    3965 return !rhs || (lhs && (*lhs >= *rhs));
    +
    3966 }
    +
    +
    3967#endif
    +
    3969
    +
    3970private:
    +
    3971 value_type val{Derived::null_value()};
    +
    3972};
    +
    +
    3973} // namespace detail
    +
    3974
    +
    3989template<typename Message>
    +
    +
    3990constexpr auto fill_message_header(Message m) noexcept
    +
    3991 -> decltype(m(detail::fill_message_header_tag{}))
    +
    3992{
    +
    3993 return m(detail::fill_message_header_tag{});
    +
    3994}
    +
    +
    3995
    +
    4009template<typename Group, typename Size>
    +
    +
    4010constexpr auto fill_group_header(Group g, Size num_in_group) noexcept
    +
    4011 -> decltype(g(detail::fill_group_header_tag{}, num_in_group))
    +
    4012{
    +
    4013 return g(detail::fill_group_header_tag{}, num_in_group);
    +
    4014}
    +
    +
    4015
    +
    4029template<typename T>
    +
    4030class type_traits;
    +
    4031
    +
    4032#ifdef SBEPP_DOXYGEN
    +
    4033template<typename T>
    +
    + +
    4035{
    +
    4036public:
    +
    4038 using primitive_type = PrimitiveType;
    +
    4039
    +
    4041 using value_type = ValueType;
    +
    4042
    +
    4048 template<typename Byte>
    +
    4049 using value_type = ArrayType<Byte>;
    +
    4050
    +
    4052 static constexpr const char* name() noexcept;
    +
    4053
    +
    4055 static constexpr const char* description() noexcept;
    +
    4056
    +
    4058 static constexpr field_presence presence() noexcept;
    +
    4059
    +
    4064 static constexpr primitive_type min_value() noexcept;
    +
    4065
    +
    4070 static constexpr primitive_type max_value() noexcept;
    +
    4071
    +
    4076 static constexpr primitive_type null_value() noexcept;
    +
    4077
    +
    4079 static constexpr length_t length() noexcept;
    +
    4080
    +
    4085 static constexpr offset_t offset() noexcept;
    +
    4086
    +
    4088 static constexpr const char* semantic_type() noexcept;
    +
    4089
    +
    4091 static constexpr version_t since_version() noexcept;
    +
    4092
    +
    4095 static constexpr version_t deprecated() noexcept;
    +
    4096
    +
    4098 static constexpr const char* character_encoding() noexcept;
    +
    4099};
    +
    +
    4100#endif
    +
    4101
    +
    4110template<typename T>
    +
    4111class schema_traits;
    +
    4112
    +
    4113#ifdef SBEPP_DOXYGEN
    +
    4114template<typename T>
    +
    + +
    4116{
    +
    4117public:
    +
    4119 static constexpr const char* package() noexcept;
    +
    4121 static constexpr schema_id_t id() noexcept;
    +
    4123 static constexpr version_t version() noexcept;
    +
    4125 static constexpr const char* semantic_version() noexcept;
    +
    4127 static constexpr endian byte_order() noexcept;
    +
    4129 static constexpr const char* description() noexcept;
    +
    4135 template<typename Byte>
    +
    4136 using header_type = HeaderComposite<Byte>;
    +
    4138 using header_type_tag = HeaderTypeTag;
    +
    4139};
    +
    +
    4140#endif
    +
    4141
    +
    4150template<typename T>
    +
    4151class enum_traits;
    +
    4152
    +
    4153#ifdef SBEPP_DOXYGEN
    +
    4154template<typename T>
    +
    + +
    4156{
    +
    4157public:
    +
    4159 static constexpr const char* name() noexcept;
    +
    4161 static constexpr const char* description() noexcept;
    +
    4163 using encoding_type = EncodingType;
    +
    4168 static constexpr offset_t offset() noexcept;
    +
    4170 static constexpr version_t since_version() noexcept;
    +
    4173 static constexpr version_t deprecated() noexcept;
    +
    4175 using value_type = ScopedEnumType;
    +
    4176};
    +
    +
    4177#endif
    +
    4178
    +
    4187template<typename T>
    +
    4188class enum_value_traits;
    +
    4189
    +
    4190#ifdef SBEPP_DOXYGEN
    +
    4191template<typename T>
    +
    + +
    4193{
    +
    4194public:
    +
    4196 static constexpr const char* name() noexcept;
    +
    4198 static constexpr const char* description() noexcept;
    +
    4200 static constexpr version_t since_version() noexcept;
    +
    4203 static constexpr version_t deprecated() noexcept;
    +
    4205 static constexpr ScopedEnumType value() noexcept;
    +
    4206};
    +
    +
    4207#endif
    +
    4208
    +
    4217template<typename T>
    +
    4218class set_traits;
    +
    4219
    +
    4220#ifdef SBEPP_DOXYGEN
    +
    4221template<typename T>
    +
    + +
    4223{
    +
    4224public:
    +
    4226 static constexpr const char* name() noexcept;
    +
    4228 static constexpr const char* description() noexcept;
    +
    4230 static constexpr version_t since_version() noexcept;
    +
    4233 static constexpr version_t deprecated() noexcept;
    +
    4235 using encoding_type = EncodingType;
    +
    4240 static constexpr offset_t offset() noexcept;
    +
    4242 using value_type = SetType;
    +
    4243};
    +
    +
    4244#endif
    +
    4245
    +
    4254template<typename T>
    +
    4255class set_choice_traits;
    +
    4256
    +
    4257#ifdef SBEPP_DOXYGEN
    +
    4258template<typename T>
    +
    + +
    4260{
    +
    4261public:
    +
    4263 static constexpr const char* name() noexcept;
    +
    4265 static constexpr const char* description() noexcept;
    +
    4267 static constexpr version_t since_version() noexcept;
    +
    4270 static constexpr version_t deprecated() noexcept;
    +
    4272 static constexpr choice_index_t index() noexcept;
    +
    4273};
    +
    +
    4274#endif
    +
    4275
    +
    4284template<typename T>
    +
    4285class composite_traits;
    +
    4286
    +
    4287#ifdef SBEPP_DOXYGEN
    +
    4288template<typename T>
    +
    + +
    4290{
    +
    4291public:
    +
    4293 static constexpr const char* name() noexcept;
    +
    4295 static constexpr const char* description() noexcept;
    +
    4300 static constexpr offset_t offset() noexcept;
    +
    4302 static constexpr const char* semantic_type() noexcept;
    +
    4304 static constexpr version_t since_version() noexcept;
    +
    4306 // !schema
    +
    4307 static constexpr version_t deprecated() noexcept;
    +
    4313 template<typename Byte>
    +
    4314 using value_type = CompositeType<Byte>;
    +
    4316 static constexpr std::size_t size_bytes() noexcept;
    +
    4317};
    +
    +
    4318#endif
    +
    4319
    +
    4328template<typename T>
    +
    4329class message_traits;
    +
    4330
    +
    4331#ifdef SBEPP_DOXYGEN
    +
    4332template<typename T>
    +
    + +
    4334{
    +
    4335public:
    +
    4337 static constexpr const char* name() noexcept;
    +
    4339 static constexpr const char* description() noexcept;
    +
    4341 static constexpr message_id_t id() noexcept;
    +
    4343 static constexpr block_length_t block_length() noexcept;
    +
    4345 static constexpr const char* semantic_type() noexcept;
    +
    4347 static constexpr version_t since_version() noexcept;
    +
    4350 static constexpr version_t deprecated() noexcept;
    +
    4356 template<typename Byte>
    +
    4357 using value_type = MessageType<Byte>;
    +
    4359 using schema_tag = SchemaTag;
    +
    4360
    +
    4438 static constexpr std::size_t size_bytes(...) noexcept;
    +
    4439};
    +
    +
    4440#endif
    +
    4441
    +
    4450template<typename T>
    +
    4451class field_traits;
    +
    4452
    +
    4453#ifdef SBEPP_DOXYGEN
    +
    4454template<typename T>
    +
    + +
    4456{
    +
    4457public:
    +
    4459 static constexpr const char* name() noexcept;
    +
    4461 static constexpr member_id_t id() noexcept;
    +
    4463 static constexpr const char* description() noexcept;
    +
    4469 static constexpr field_presence presence() noexcept;
    +
    4471 static constexpr offset_t offset() noexcept;
    +
    4473 static constexpr version_t since_version() noexcept;
    +
    4476 static constexpr version_t deprecated() noexcept;
    +
    4478 using value_type = ValueType;
    +
    4484 template<typename Byte>
    +
    4485 using value_type = Type<Byte>;
    +
    4487 using value_type_tag = TypeTag;
    +
    4488};
    +
    +
    4489#endif
    +
    4490
    +
    4499template<typename T>
    +
    4500class group_traits;
    +
    4501
    +
    4502#ifdef SBEPP_DOXYGEN
    +
    4503template<typename T>
    +
    + +
    4505{
    +
    4506public:
    +
    4508 static constexpr const char* name() noexcept;
    +
    4510 static constexpr const char* description() noexcept;
    +
    4512 static constexpr member_id_t id() noexcept;
    +
    4514 static constexpr block_length_t block_length() noexcept;
    +
    4516 static constexpr const char* semantic_type() noexcept;
    +
    4518 static constexpr version_t since_version() noexcept;
    +
    4521 static constexpr version_t deprecated() noexcept;
    +
    4527 template<typename Byte>
    +
    4528 using value_type = GroupType<Byte>;
    +
    4534 template<typename Byte>
    +
    4535 using dimension_type = HeaderType<Byte>;
    +
    4537 using dimension_type_tag = HeaderTag;
    +
    4543 template<typename Byte>
    +
    4544 using entry_type = EntryType<Byte>;
    +
    4556 static constexpr std::size_t
    +
    4557 size_bytes(const NumInGroupType num_in_group, ...) noexcept;
    +
    4558};
    +
    +
    4559#endif
    +
    4560
    +
    4569template<typename T>
    +
    4570class data_traits;
    +
    4571
    +
    4572#ifdef SBEPP_DOXYGEN
    +
    4573template<typename T>
    +
    + +
    4575{
    +
    4576public:
    +
    4578 static constexpr const char* name() noexcept;
    +
    4580 static constexpr member_id_t id() noexcept;
    +
    4582 static constexpr const char* description() noexcept;
    +
    4584 static constexpr version_t since_version() noexcept;
    +
    4587 static constexpr version_t deprecated() noexcept;
    +
    4593 template<typename Byte>
    +
    4594 using value_type = DataType;
    +
    4596 using length_type = LengthType;
    +
    4598 using length_type_tag = LengthTypeTag;
    +
    4605 static constexpr std::size_t
    +
    4606 size_bytes(const length_type::value_type size) noexcept;
    +
    4607};
    +
    +
    4608#endif
    +
    4633template<typename ValueType>
    +
    4634struct traits_tag;
    +
    4635
    +
    4636#ifdef SBEPP_DOXYGEN
    +
    4637template<typename ValueType>
    +
    + +
    4639{
    +
    4641 using type = Tag;
    +
    4642};
    +
    +
    4643#endif
    +
    4644
    +
    4646template<typename ValueType>
    + +
    4648
    +
    4649template<typename Byte, typename Value, std::size_t N, typename Tag>
    +
    4650struct traits_tag<detail::static_array_ref<Byte, Value, N, Tag>>
    +
    4651{
    +
    4652 using type = Tag;
    +
    4653};
    +
    4654
    +
    4655// NOLINTNEXTLINE: macro is required here
    +
    4656#define SBEPP_BUILT_IN_IMPL(NAME, TYPE, MIN, MAX, NULL) \
    +
    4657 \
    +
    4658 \
    +
    4659 class NAME##_t : public detail::required_base<TYPE, NAME##_t> \
    +
    4660 { \
    +
    4661 public: \
    +
    4662 using detail::required_base<TYPE, NAME##_t>::required_base; \
    +
    4663 \
    +
    4664 \
    +
    4665 static constexpr value_type min_value() noexcept \
    +
    4666 { \
    +
    4667 return {MIN}; \
    +
    4668 } \
    +
    4669 \
    +
    4670 \
    +
    4671 static constexpr value_type max_value() noexcept \
    +
    4672 { \
    +
    4673 return {MAX}; \
    +
    4674 } \
    +
    4675 }; \
    +
    4676 \
    +
    4677
    +
    4678 \
    +
    4679 class NAME##_opt_t : public detail::optional_base<TYPE, NAME##_opt_t> \
    +
    4680 { \
    +
    4681 public: \
    +
    4682 using detail::optional_base<TYPE, NAME##_opt_t>::optional_base; \
    +
    4683 \
    +
    4684 \
    +
    4685 static constexpr value_type min_value() noexcept \
    +
    4686 { \
    +
    4687 return {MIN}; \
    +
    4688 } \
    +
    4689 \
    +
    4690 \
    +
    4691 static constexpr value_type max_value() noexcept \
    +
    4692 { \
    +
    4693 return {MAX}; \
    +
    4694 } \
    +
    4695 \
    +
    4696 \
    +
    4697 static constexpr value_type null_value() noexcept \
    +
    4698 { \
    +
    4699 return {NULL}; \
    +
    4700 } \
    +
    4701 }; \
    +
    4702 \
    +
    4703 template<> \
    +
    4704 class type_traits<NAME##_t> \
    +
    4705 { \
    +
    4706 public: \
    +
    4707 static constexpr const char* name() noexcept \
    +
    4708 { \
    +
    4709 return #NAME; \
    +
    4710 } \
    +
    4711 \
    +
    4712 static constexpr const char* description() noexcept \
    +
    4713 { \
    +
    4714 return ""; \
    +
    4715 } \
    +
    4716 \
    +
    4717 static constexpr field_presence presence() noexcept \
    +
    4718 { \
    +
    4719 return field_presence::required; \
    +
    4720 } \
    +
    4721 \
    +
    4722 static constexpr TYPE min_value() noexcept \
    +
    4723 { \
    +
    4724 return NAME##_t::min_value(); \
    +
    4725 } \
    +
    4726 \
    +
    4727 static constexpr TYPE max_value() noexcept \
    +
    4728 { \
    +
    4729 return NAME##_t::max_value(); \
    +
    4730 } \
    +
    4731 \
    +
    4732 static constexpr length_t length() noexcept \
    +
    4733 { \
    +
    4734 return 1; \
    +
    4735 } \
    +
    4736 \
    +
    4737 static constexpr const char* semantic_type() noexcept \
    +
    4738 { \
    +
    4739 return ""; \
    +
    4740 } \
    +
    4741 \
    +
    4742 static constexpr version_t since_version() noexcept \
    +
    4743 { \
    +
    4744 return 0; \
    +
    4745 } \
    +
    4746 \
    +
    4747 using value_type = NAME##_t; \
    +
    4748 using primitive_type = value_type::value_type; \
    +
    4749 }; \
    +
    4750 \
    +
    4751 template<> \
    +
    4752 struct traits_tag<NAME##_t> \
    +
    4753 { \
    +
    4754 using type = NAME##_t; \
    +
    4755 }; \
    +
    4756 \
    +
    4757 template<> \
    +
    4758 class type_traits<NAME##_opt_t> \
    +
    4759 { \
    +
    4760 public: \
    +
    4761 static constexpr const char* name() noexcept \
    +
    4762 { \
    +
    4763 return #NAME; \
    +
    4764 } \
    +
    4765 \
    +
    4766 static constexpr const char* description() noexcept \
    +
    4767 { \
    +
    4768 return ""; \
    +
    4769 } \
    +
    4770 \
    +
    4771 static constexpr field_presence presence() noexcept \
    +
    4772 { \
    +
    4773 return field_presence::optional; \
    +
    4774 } \
    +
    4775 \
    +
    4776 static constexpr TYPE min_value() noexcept \
    +
    4777 { \
    +
    4778 return NAME##_opt_t::min_value(); \
    +
    4779 } \
    +
    4780 \
    +
    4781 static constexpr TYPE max_value() noexcept \
    +
    4782 { \
    +
    4783 return NAME##_opt_t::max_value(); \
    +
    4784 } \
    +
    4785 \
    +
    4786 static constexpr TYPE null_value() noexcept \
    +
    4787 { \
    +
    4788 return NAME##_opt_t::null_value(); \
    +
    4789 } \
    +
    4790 \
    +
    4791 static constexpr length_t length() noexcept \
    +
    4792 { \
    +
    4793 return 1; \
    +
    4794 } \
    +
    4795 \
    +
    4796 static constexpr const char* semantic_type() noexcept \
    +
    4797 { \
    +
    4798 return ""; \
    +
    4799 } \
    +
    4800 \
    +
    4801 static constexpr version_t since_version() noexcept \
    +
    4802 { \
    +
    4803 return 0; \
    +
    4804 } \
    +
    4805 \
    +
    4806 using value_type = NAME##_opt_t; \
    +
    4807 using primitive_type = value_type::value_type; \
    +
    4808 }; \
    +
    4809 \
    +
    4810 template<> \
    +
    4811 struct traits_tag<NAME##_opt_t> \
    +
    4812 { \
    +
    4813 using type = NAME##_opt_t; \
    +
    4814 }
    + +
    4816SBEPP_BUILT_IN_IMPL(char, char, 0x20, 0x7E, 0);
    +
    4817SBEPP_BUILT_IN_IMPL(
    +
    4818 int8,
    +
    4819 std::int8_t,
    +
    4820 std::numeric_limits<std::int8_t>::min() + 1,
    +
    4821 std::numeric_limits<std::int8_t>::max(),
    +
    4822 std::numeric_limits<std::int8_t>::min());
    +
    4823SBEPP_BUILT_IN_IMPL(
    +
    4824 uint8,
    +
    4825 std::uint8_t,
    +
    4826 std::numeric_limits<std::uint8_t>::min(),
    +
    4827 std::numeric_limits<std::uint8_t>::max() - 1,
    +
    4828 std::numeric_limits<std::uint8_t>::max());
    +
    4829SBEPP_BUILT_IN_IMPL(
    +
    4830 int16,
    +
    4831 std::int16_t,
    +
    4832 std::numeric_limits<std::int16_t>::min() + 1,
    +
    4833 std::numeric_limits<std::int16_t>::max(),
    +
    4834 std::numeric_limits<std::int16_t>::min());
    +
    4835SBEPP_BUILT_IN_IMPL(
    +
    4836 uint16,
    +
    4837 std::uint16_t,
    +
    4838 std::numeric_limits<std::uint16_t>::min(),
    +
    4839 std::numeric_limits<std::uint16_t>::max() - 1,
    +
    4840 std::numeric_limits<std::uint16_t>::max());
    +
    4841SBEPP_BUILT_IN_IMPL(
    +
    4842 int32,
    +
    4843 std::int32_t,
    +
    4844 std::numeric_limits<std::int32_t>::min() + 1,
    +
    4845 std::numeric_limits<std::int32_t>::max(),
    +
    4846 std::numeric_limits<std::int32_t>::min());
    +
    4847SBEPP_BUILT_IN_IMPL(
    +
    4848 uint32,
    +
    4849 std::uint32_t,
    +
    4850 std::numeric_limits<std::uint32_t>::min(),
    +
    4851 std::numeric_limits<std::uint32_t>::max() - 1,
    +
    4852 std::numeric_limits<std::uint32_t>::max());
    +
    4853SBEPP_BUILT_IN_IMPL(
    +
    4854 int64,
    +
    4855 std::int64_t,
    +
    4856 std::numeric_limits<std::int64_t>::min() + 1,
    +
    4857 std::numeric_limits<std::int64_t>::max(),
    +
    4858 std::numeric_limits<std::int64_t>::min());
    +
    4859SBEPP_BUILT_IN_IMPL(
    +
    4860 uint64,
    +
    4861 std::uint64_t,
    +
    4862 std::numeric_limits<std::uint64_t>::min(),
    +
    4863 std::numeric_limits<std::uint64_t>::max() - 1,
    +
    4864 std::numeric_limits<std::uint64_t>::max());
    +
    4865SBEPP_BUILT_IN_IMPL(
    +
    4866 float,
    +
    4867 float,
    +
    4868 std::numeric_limits<float>::min(),
    +
    4869 std::numeric_limits<float>::max(),
    +
    4870 std::numeric_limits<float>::quiet_NaN());
    +
    4871SBEPP_BUILT_IN_IMPL(
    +
    4872 double,
    +
    4873 double,
    +
    4874 std::numeric_limits<double>::min(),
    +
    4875 std::numeric_limits<double>::max(),
    +
    4876 std::numeric_limits<double>::quiet_NaN());
    +
    4877
    +
    4878#undef SBEPP_BUILT_IN_IMPL
    +
    4879
    +
    +
    4897template<template<typename> class View, typename Byte>
    +
    4898constexpr View<Byte> make_view(Byte* ptr, const std::size_t size) noexcept
    +
    4899{
    +
    4900 return {ptr, size};
    +
    +
    4901}
    +
    4902
    +
    4921template<template<typename> class View, typename Byte>
    +
    +
    4922constexpr View<typename std::add_const<Byte>::type>
    +
    4923 make_const_view(Byte* ptr, const std::size_t size) noexcept
    +
    4924{
    +
    4925 return {ptr, size};
    +
    +
    4926}
    +
    4927
    +
    4934struct unknown_enum_value_tag
    +
    4935{
    +
    4936};
    +
    4937
    +
    4938namespace detail
    +
    4939{
    +
    4940// taken from https://stackoverflow.com/a/34672753
    +
    4941template<template<typename...> class Base, typename Derived>
    +
    4942struct is_base_of_tmp_impl
    +
    4943{
    +
    4944 static constexpr std::false_type test(...);
    +
    4945
    +
    4946 template<typename... Ts>
    +
    4947 static constexpr std::true_type test(Base<Ts...>*);
    +
    4948
    +
    4949 using type = decltype(test(std::declval<Derived*>()));
    +
    4950};
    +
    4951
    +
    4952template<template<typename...> class Base, typename Derived>
    +
    4953using is_base_of_tmp = typename is_base_of_tmp_impl<Base, Derived>::type;
    +
    4954
    +
    4955#if SBEPP_HAS_CONCEPTS
    +
    4956template<typename Derived, template<typename...> class Base>
    +
    4957concept derived_from_tmp = is_base_of_tmp<Base, Derived>::value;
    +
    4958#endif
    +
    4959} // namespace detail
    +
    4960
    +
    4961namespace detail
    +
    4962{
    +
    4963template<typename Derived>
    +
    4964struct is_array_type_impl
    +
    4965{
    +
    4966 static constexpr std::false_type test(...);
    +
    4967
    +
    4968 template<typename T1, typename T2, std::size_t N, typename T3>
    +
    4969 static constexpr std::true_type
    +
    4970 test(detail::static_array_ref<T1, T2, N, T3>*);
    +
    4971
    +
    4972 using type = decltype(test(std::declval<Derived*>()));
    +
    4973};
    +
    4974} // namespace detail
    +
    4975
    +
    4977template<typename T>
    +
    4978using is_array_type = typename detail::is_array_type_impl<T>::type;
    +
    4979
    +
    4981template<typename T>
    +
    4982using is_required_type = detail::is_base_of_tmp<detail::required_base, T>;
    +
    4983
    +
    4985template<typename T>
    +
    4986using is_optional_type = detail::is_base_of_tmp<detail::optional_base, T>;
    +
    4987
    +
    4989template<typename T>
    +
    4990using is_non_array_type = std::integral_constant<
    +
    4991 bool,
    + +
    4993
    +
    4995template<typename T>
    +
    4996using is_type = std::integral_constant<
    +
    4997 bool,
    + + +
    5000
    +
    +
    5002template<typename T, typename = void>
    +
    5003struct is_enum : std::false_type
    +
    5004{
    +
    +
    5005};
    +
    5006
    +
    5007template<typename T>
    +
    5008struct is_enum<
    +
    5009 T,
    +
    5010 detail::void_t<decltype(tag_invoke(
    +
    5011 std::declval<detail::visit_tag>(),
    +
    5012 std::declval<T>(),
    +
    5013 std::declval<int&>()))>> : std::true_type
    +
    5014{
    +
    5015};
    +
    5016
    +
    5018template<typename T>
    +
    5019using is_set = detail::is_base_of_tmp<detail::bitset_base, T>;
    +
    5020
    +
    5022template<typename T>
    +
    5023using is_composite = detail::is_base_of_tmp<detail::composite_base, T>;
    +
    5024
    +
    5026template<typename T>
    +
    5027using is_message = detail::is_base_of_tmp<detail::message_base, T>;
    +
    5028
    +
    5030template<typename T>
    +
    5031using is_flat_group = detail::is_base_of_tmp<detail::flat_group_base, T>;
    +
    5032
    +
    5034template<typename T>
    +
    5035using is_nested_group = detail::is_base_of_tmp<detail::nested_group_base, T>;
    +
    5036
    +
    5038template<typename T>
    +
    5039using is_group = std::integral_constant<
    +
    5040 bool,
    + +
    5042
    +
    5044template<typename T>
    +
    5045using is_group_entry = detail::is_base_of_tmp<detail::entry_base, T>;
    +
    5046
    +
    5047namespace detail
    +
    5048{
    +
    5049template<typename Derived>
    +
    5050struct is_data_impl
    +
    5051{
    +
    5052 static constexpr std::false_type test(...);
    +
    5053
    +
    5054 template<typename T1, typename T2, typename T3, endian E>
    +
    5055 static constexpr std::true_type
    + +
    5057
    +
    5058 using type = decltype(test(std::declval<Derived*>()));
    +
    5059};
    +
    5060} // namespace detail
    +
    5061
    +
    5063template<typename T>
    +
    5064using is_data = typename detail::is_data_impl<T>::type;
    +
    5065
    +
    5066#if SBEPP_HAS_INLINE_VARS
    +
    5068template<typename T>
    +
    5069inline constexpr auto is_array_type_v = is_array_type<T>::value;
    +
    5070
    +
    5072template<typename T>
    +
    5073inline constexpr auto is_required_type_v = is_required_type<T>::value;
    +
    5074
    +
    5076template<typename T>
    +
    5077inline constexpr auto is_optional_type_v = is_optional_type<T>::value;
    +
    5078
    +
    5080template<typename T>
    +
    5081inline constexpr auto is_non_array_type_v = is_non_array_type<T>::value;
    +
    5082
    +
    5084template<typename T>
    +
    5085inline constexpr auto is_type_v = is_type<T>::value;
    +
    5086
    +
    5088template<typename T>
    +
    5089inline constexpr auto is_enum_v = is_enum<T>::value;
    +
    5090
    +
    5092template<typename T>
    +
    5093inline constexpr auto is_set_v = is_set<T>::value;
    +
    5094
    +
    5096template<typename T>
    +
    5097inline constexpr auto is_composite_v = is_composite<T>::value;
    +
    5098
    +
    5100template<typename T>
    +
    5101inline constexpr auto is_message_v = is_message<T>::value;
    +
    5102
    +
    5104template<typename T>
    +
    5105inline constexpr auto is_flat_group_v = is_flat_group<T>::value;
    +
    5106
    +
    5108template<typename T>
    +
    5109inline constexpr auto is_nested_group_v = is_nested_group<T>::value;
    +
    5110
    +
    5112template<typename T>
    +
    5113inline constexpr auto is_group_v = is_group<T>::value;
    +
    5114
    +
    5116template<typename T>
    +
    5117inline constexpr auto is_data_v = is_data<T>::value;
    +
    5118#endif
    +
    5119
    +
    5120#if SBEPP_HAS_CONCEPTS
    +
    5122template<typename T>
    +
    5123concept array_type = is_array_type_v<T>;
    +
    5124
    +
    5126template<typename T>
    +
    5127concept required_type = is_required_type_v<T>;
    +
    5128
    +
    5130template<typename T>
    +
    5131concept optional_type = is_optional_type_v<T>;
    +
    5132
    +
    5134template<typename T>
    +
    5135concept non_array_type = is_non_array_type_v<T>;
    +
    5136
    +
    5138template<typename T>
    +
    5139concept type = is_type_v<T>;
    +
    5140
    +
    5142template<typename T>
    +
    5143concept enumeration = is_enum_v<T>;
    +
    5144
    +
    5146template<typename T>
    +
    5147concept set = is_set_v<T>;
    +
    5148
    +
    5150template<typename T>
    +
    5151concept composite = is_composite_v<T>;
    +
    5152
    +
    5154template<typename T>
    +
    5155concept message = is_message_v<T>;
    +
    5156
    +
    5158template<typename T>
    +
    5159concept flat_group = is_flat_group_v<T>;
    +
    5160
    +
    5162template<typename T>
    +
    5163concept nested_group = is_nested_group_v<T>;
    +
    5164
    +
    5166template<typename T>
    +
    5167concept group = is_group_v<T>;
    +
    5168
    +
    5170template<typename T>
    +
    5171concept data = is_data_v<T>;
    +
    5172#endif
    +
    5173
    +
    5174namespace detail
    +
    5175{
    +
    5176template<typename T>
    +
    5177using is_visitable_view = std::integral_constant<
    +
    5178 bool,
    +
    5179 is_message<T>::value || is_group<T>::value || is_group_entry<T>::value
    +
    5180 || is_composite<T>::value>;
    +
    5181}
    +
    5182
    +
    5194template<
    +
    5195 typename Visitor,
    +
    5196 typename View,
    +
    5197 typename Cursor,
    +
    5198 typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    +
    +
    5199SBEPP_CPP14_CONSTEXPR Visitor&&
    +
    5200 visit(View view, Cursor& c, Visitor&& visitor = {})
    +
    5201{
    +
    5202 view(detail::visit_tag{}, visitor, c);
    +
    5203 return std::forward<Visitor>(visitor);
    +
    +
    5204}
    +
    5205
    +
    5216template<
    +
    5217 typename Visitor,
    +
    5218 typename View,
    +
    +
    5219 typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    +
    5220SBEPP_CPP14_CONSTEXPR Visitor&& visit(View view, Visitor&& visitor = {})
    +
    5221{
    +
    5222 auto c = sbepp::init_cursor(view);
    +
    5223 return sbepp::visit(view, c, std::forward<Visitor>(visitor));
    +
    +
    5224}
    +
    5225
    +
    5226#ifndef SBEPP_DOXYGEN
    +
    5227template<typename Visitor, typename Set>
    +
    5228SBEPP_CPP14_CONSTEXPR detail::enable_if_t<is_set<Set>::value, Visitor&&>
    +
    5229 visit(Set s, Visitor&& visitor = {})
    +
    5230{
    +
    5231 s(detail::visit_tag{}, visitor);
    +
    5232 return std::forward<Visitor>(visitor);
    +
    5233}
    +
    5234
    +
    5235template<typename Visitor, typename Enum>
    +
    5236SBEPP_CPP14_CONSTEXPR detail::enable_if_t<is_enum<Enum>::value, Visitor&&>
    +
    5237 visit(Enum e, Visitor&& visitor = {})
    +
    5238{
    +
    5239 tag_invoke(detail::visit_tag{}, e, visitor);
    +
    5240 return std::forward<Visitor>(visitor);
    +
    5241}
    +
    5242
    +
    5243#else
    +
    5244
    +
    5261template<typename Visitor, typename Set>
    +
    5262SBEPP_CPP14_CONSTEXPR Visitor&& visit(Set s, Visitor&& visitor = {});
    +
    5263
    +
    5280template<typename Visitor, typename Enum>
    +
    5281SBEPP_CPP14_CONSTEXPR Visitor&& visit(Enum e, Visitor&& visitor = {});
    +
    5282#endif
    +
    5283
    +
    5296template<
    +
    5297 typename Visitor,
    +
    5298 typename View,
    +
    5299 typename Cursor,
    +
    5300 typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    +
    +
    5301SBEPP_CPP14_CONSTEXPR Visitor&&
    +
    5302 visit_children(View view, Cursor& c, Visitor&& visitor = {})
    +
    5303{
    +
    5304 view(detail::visit_children_tag{}, visitor, c);
    +
    5305 return std::forward<Visitor>(visitor);
    +
    +
    5306}
    +
    5307
    +
    5318template<
    +
    5319 typename Visitor,
    +
    5320 typename View,
    +
    5321 typename = detail::enable_if_t<detail::is_visitable_view<View>::value>>
    +
    +
    5322SBEPP_CPP14_CONSTEXPR Visitor&&
    +
    5323 visit_children(View view, Visitor&& visitor = {})
    +
    5324{
    +
    5325 auto c = sbepp::init_cursor(view);
    +
    5326 return sbepp::visit_children(view, c, std::forward<Visitor>(visitor));
    +
    +
    5327}
    +
    5328
    +
    5329namespace detail
    +
    5330{
    +
    5331class enum_to_string_visitor
    +
    5332{
    +
    5333public:
    +
    5334 template<typename Enum, typename Tag>
    +
    5335 SBEPP_CPP14_CONSTEXPR void on_enum_value(Enum /*e*/, Tag) noexcept
    +
    5336 {
    + +
    5338 }
    +
    5339
    +
    5340 template<typename Enum>
    +
    5341 SBEPP_CPP14_CONSTEXPR void
    +
    5342 on_enum_value(Enum /*e*/, sbepp::unknown_enum_value_tag) noexcept
    +
    5343 {
    +
    5344 name_value = nullptr;
    +
    5345 }
    +
    5346
    +
    5347 constexpr const char* name() const noexcept
    +
    5348 {
    +
    5349 return name_value;
    +
    5350 }
    +
    5351
    +
    5352private:
    +
    5353 const char* name_value;
    +
    5354};
    +
    5355} // namespace detail
    +
    5356
    +
    +
    5367template<typename E, typename = detail::enable_if_t<is_enum<E>::value>>
    +
    5368SBEPP_DEPRECATED constexpr const char* enum_to_string(const E e) noexcept
    +
    5369{
    +
    5370 return visit<detail::enum_to_string_visitor>(e).name();
    +
    +
    5371}
    +
    5372
    +
    5384template<typename Set, typename Visitor>
    +
    +
    5385SBEPP_DEPRECATED constexpr auto
    +
    5386 visit_set(const Set s, Visitor&& visitor) noexcept
    +
    5387 -> decltype(s(detail::visit_set_tag{}, std::forward<Visitor>(visitor)))
    +
    5388{
    +
    5389 return s(detail::visit_set_tag{}, std::forward<Visitor>(visitor));
    +
    +
    5390}
    +
    5391
    +
    5392namespace detail
    +
    5393{
    +
    5394class size_bytes_checked_visitor
    +
    5395{
    +
    5396public:
    +
    5397 constexpr explicit size_bytes_checked_visitor(
    +
    5398 const std::size_t size) noexcept
    +
    5399 : size{size}
    +
    5400 {
    +
    5401 }
    +
    5402
    +
    5403 template<typename T, typename Cursor, typename Tag>
    +
    5404 SBEPP_CPP14_CONSTEXPR void on_message(T m, Cursor& c, Tag) noexcept
    +
    5405 {
    +
    5406 const auto header = sbepp::get_header(m);
    +
    5407 const auto header_size = sbepp::size_bytes(header);
    +
    5408 if(!validate_and_subtract(header_size))
    +
    5409 {
    +
    5410 return;
    +
    5411 }
    +
    5412
    +
    5413 if(!validate_and_subtract(*header.blockLength()))
    +
    5414 {
    +
    5415 return;
    +
    5416 }
    +
    5417
    +
    5418 sbepp::visit_children(m, c, *this);
    +
    5419 }
    +
    5420
    +
    5421 template<typename T, typename Cursor, typename Tag>
    +
    5422 SBEPP_CPP14_CONSTEXPR bool on_group(T g, Cursor& c, Tag) noexcept
    +
    5423 {
    +
    5424 const auto header = sbepp::get_header(g);
    +
    5425 const auto header_size = sbepp::size_bytes(header);
    +
    5426 if(!validate_and_subtract(header_size))
    +
    5427 {
    +
    5428 return true;
    +
    5429 }
    +
    5430
    +
    5431 const auto prev_block_length =
    +
    5432 set_group_block_length(*header.blockLength());
    +
    5433 sbepp::visit_children(g, c, *this);
    +
    5434 set_group_block_length(prev_block_length);
    +
    5435
    +
    5436 return !is_valid();
    +
    5437 }
    +
    5438
    +
    5439 template<typename T, typename Cursor>
    +
    5440 SBEPP_CPP14_CONSTEXPR bool on_entry(T e, Cursor& c) noexcept
    +
    5441 {
    +
    5442 if(!validate_and_subtract(group_block_length))
    +
    5443 {
    +
    5444 return true;
    +
    5445 }
    +
    5446
    +
    5447 return !sbepp::visit_children(e, c, *this).is_valid();
    +
    5448 }
    +
    5449
    +
    5450 template<typename T, typename Tag>
    +
    5451 SBEPP_CPP14_CONSTEXPR bool on_data(T d, Tag) noexcept
    +
    5452 {
    +
    5453 return !validate_and_subtract(sbepp::size_bytes(d));
    +
    5454 }
    +
    5455
    +
    5456 // ignore them all because we validate `blockLength`
    +
    5457 template<typename T, typename Tag>
    +
    5458 constexpr bool on_field(T, Tag) const noexcept
    +
    5459 {
    +
    5460 return {};
    +
    5461 }
    +
    5462
    +
    5463 constexpr bool is_valid() const noexcept
    +
    5464 {
    +
    5465 return valid;
    +
    5466 }
    +
    5467
    +
    5468 // returns previous value
    +
    5469 SBEPP_CPP14_CONSTEXPR std::size_t
    +
    5470 set_group_block_length(const std::size_t block_length) noexcept
    +
    5471 {
    +
    5472 auto prev = group_block_length;
    +
    5473 group_block_length = block_length;
    +
    5474 return prev;
    +
    5475 }
    +
    5476
    +
    5477 constexpr std::size_t get_size() const noexcept
    +
    5478 {
    +
    5479 return size;
    +
    5480 }
    +
    5481
    +
    5482private:
    +
    5483 std::size_t size;
    +
    5484 bool valid{true};
    +
    5485 // current group's blockLength, used to validate entry
    +
    5486 std::size_t group_block_length{};
    +
    5487
    +
    5488 SBEPP_CPP14_CONSTEXPR bool
    +
    5489 validate_and_subtract(const std::size_t n) noexcept
    +
    5490 {
    +
    5491 if(size < n)
    +
    5492 {
    +
    5493 valid = false;
    +
    5494 }
    +
    5495 else
    +
    5496 {
    +
    5497 size -= n;
    +
    5498 }
    +
    5499
    +
    5500 return valid;
    +
    5501 }
    +
    5502};
    +
    5503} // namespace detail
    +
    5504
    +
    5506struct size_bytes_checked_result
    +
    5507{
    +
    5509 bool valid;
    +
    5511 std::size_t size;
    +
    5512};
    +
    5513
    +
    5514// can be used with message/group
    +
    5525template<typename View>
    +
    +
    5526SBEPP_CPP20_CONSTEXPR size_bytes_checked_result
    +
    5527 size_bytes_checked(View view, std::size_t size) noexcept
    +
    5528{
    +
    5529 // `init_cursor` skips header, we need to ensure there's enough space for it
    +
    5530 if(!sbepp::addressof(view) || (size < detail::get_header_size(view)))
    +
    5531 {
    +
    5532 return {};
    +
    5533 }
    +
    5534
    +
    5535 detail::size_bytes_checked_visitor visitor{size};
    +
    5536 auto c = sbepp::init_cursor(view);
    +
    5537 sbepp::visit(view, c, visitor);
    +
    5538 if(visitor.is_valid())
    +
    5539 {
    +
    5540 return {true, size - visitor.get_size()};
    +
    5541 }
    +
    5542 return {};
    +
    +
    5543}
    +
    5544} // namespace sbepp
    +
    5545
    +
    5546#if SBEPP_HAS_RANGES && SBEPP_HAS_CONCEPTS
    +
    5547
    +
    5548template<typename Byte, typename Value, std::size_t N, typename Tag>
    +
    5549inline constexpr bool std::ranges::enable_borrowed_range<
    + +
    5551
    +
    5552template<typename Byte, typename Value, typename Length, sbepp::endian E>
    +
    5553inline constexpr bool std::ranges::enable_borrowed_range<
    + +
    5555
    +
    5556template<sbepp::detail::derived_from_tmp<sbepp::detail::flat_group_base> T>
    +
    5557inline constexpr bool std::ranges::enable_borrowed_range<T> = true;
    +
    5558
    +
    5559template<sbepp::detail::derived_from_tmp<sbepp::detail::nested_group_base> T>
    +
    5560inline constexpr bool std::ranges::enable_borrowed_range<T> = true;
    +
    5561#endif
    +
    5562
    +
    5563#undef SBEPP_CPP17_INLINE_VAR
    +
    5564#undef SBEPP_DEPRECATED
    +
    5565#undef SBEPP_CPLUSPLUS
    +
    5566
    +
    5567SBEPP_WARNINGS_ON();
    +
    Provides various traits/attributes of a <composite> element.
    Definition sbepp.hpp:4290
    +
    CompositeType< Byte > value_type
    Representation type.
    Definition sbepp.hpp:4314
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    Represents cursor which is used in cursor-based API. Clients should not use undocumented methods.
    Definition sbepp.hpp:783
    +
    constexpr Byte * pointer() const noexcept
    access underlying pointer
    Definition sbepp.hpp:849
    +
    constexpr cursor(cursor< Byte2 > other) noexcept
    Construct from another cursor. Enabled only if Byte2* is convertible to Byte*.
    Definition sbepp.hpp:812
    +
    Byte byte_type
    same as Byte
    Definition sbepp.hpp:786
    +
    cursor()=default
    Construct a new cursor object initialized with nullptr
    +
    constexpr Byte *& pointer() noexcept
    access underlying pointer. Might be useful in rare cases to initialize cursor with a particular value...
    Definition sbepp.hpp:839
    +
    constexpr cursor & operator=(cursor< Byte2 > other) noexcept
    Assign from another cursor. Enabled only if Byte2* is convertible to Byte
    Definition sbepp.hpp:827
    +
    Provides various traits/attributes of a <data> element.
    Definition sbepp.hpp:4575
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    DataType value_type
    Representation type.
    Definition sbepp.hpp:4594
    +
    LengthTypeTag length_type_tag
    length_type tag
    Definition sbepp.hpp:4598
    +
    LengthType length_type
    Length type.
    Definition sbepp.hpp:4596
    +
    Base class for bitsets.
    Definition sbepp.hpp:2736
    +
    constexpr T operator*() const noexcept
    Returns underlying value.
    Definition sbepp.hpp:2753
    +
    constexpr friend bool operator==(const bitset_base &lhs, const bitset_base &rhs) noexcept
    Tests if underlying values are equal.
    Definition sbepp.hpp:2772
    +
    constexpr T & operator*() noexcept
    Returns reference to underlying value.
    Definition sbepp.hpp:2747
    +
    constexpr bitset_base(T value) noexcept
    Constructs from given value.
    Definition sbepp.hpp:2742
    +
    constexpr friend bool operator!=(const bitset_base &lhs, const bitset_base &rhs) noexcept
    Tests if underlying values are not equal.
    Definition sbepp.hpp:2779
    +
    bitset_base()=default
    Default constructs underlying value to 0
    +
    Base class for all reference semantics types.
    Definition sbepp.hpp:714
    +
    constexpr byte_range(Byte *ptr, const std::size_t size) noexcept
    Constructs from pointer and size.
    Definition sbepp.hpp:736
    +
    constexpr byte_range(const byte_range< Byte2 > &other) noexcept
    Copy constructor. Available if Byte2* is convertible to Byte*
    Definition sbepp.hpp:744
    +
    byte_range()=default
    Initializes to nullptr
    +
    constexpr byte_range(Byte *begin, Byte *end) noexcept
    Constructs from a pair of pointers.
    Definition sbepp.hpp:725
    +
    Base class for composites.
    Definition sbepp.hpp:1740
    +
    Represents reference to dynamic arrays used for <data> elements.
    Definition sbepp.hpp:3304
    +
    constexpr sbe_size_type sbe_size() const noexcept
    Returns SBE size representation.
    Definition sbepp.hpp:3394
    +
    pointer iterator
    iterator type. Satisfies std::random_access_iterator
    Definition sbepp.hpp:3326
    +
    std::reverse_iterator< iterator > reverse_iterator
    reverse iterator type
    Definition sbepp.hpp:3328
    +
    constexpr iterator insert(iterator pos, std::initializer_list< value_type > ilist) const noexcept
    Inserts elements from ilist before pos
    Definition sbepp.hpp:3553
    +
    constexpr reverse_iterator rend() const noexcept
    Returns a reverse iterator to the end.
    Definition sbepp.hpp:3352
    +
    static constexpr size_type max_size() noexcept
    Returns max value of SBE length representation.
    Definition sbepp.hpp:3412
    +
    constexpr iterator erase(iterator first, iterator last) const noexcept
    Erases elements in [first; last) range.
    Definition sbepp.hpp:3500
    +
    constexpr void assign_string(const char *str) const noexcept
    Assigns null-terminated string.
    Definition sbepp.hpp:3619
    +
    constexpr iterator insert(iterator pos, InputIt first, InputIt last) const
    Inserts elements from [first; last) range before pos
    Definition sbepp.hpp:3543
    +
    constexpr void assign(std::initializer_list< value_type > ilist) const noexcept
    Replaces the contents of the container with the elements from ilist
    Definition sbepp.hpp:3583
    +
    constexpr reference back() const noexcept
    Access the last element.
    Definition sbepp.hpp:3367
    +
    constexpr void resize(size_type count, sbepp::default_init_t) const noexcept
    Sets size to count, default initializes new elements.
    Definition sbepp.hpp:3458
    +
    element_type * pointer
    element pointer type
    Definition sbepp.hpp:3324
    +
    constexpr void push_back(value_type value) const noexcept
    Adds new element to the end.
    Definition sbepp.hpp:3472
    +
    constexpr iterator insert(iterator pos, const value_type value) const noexcept
    Inserts value before pos
    Definition sbepp.hpp:3511
    +
    constexpr reference operator[](size_type pos) const noexcept
    Access element at pos
    Definition sbepp.hpp:3387
    +
    constexpr void resize(size_type count) const noexcept
    Sets size to count, value initializes new elements.
    Definition sbepp.hpp:3426
    +
    constexpr reference front() const noexcept
    Access the first element.
    Definition sbepp.hpp:3359
    +
    std::ptrdiff_t difference_type
    std::ptrdiff_t
    Definition sbepp.hpp:3320
    +
    constexpr void pop_back() const noexcept
    Removes the last element.
    Definition sbepp.hpp:3481
    +
    Value value_type
    same as Value
    Definition sbepp.hpp:3314
    +
    constexpr dynamic_array_ref< Byte, detail::remove_cv_t< Byte >, Length, E > raw() const noexcept
    Returns dynamic_array_ref<Byte, Byte, Length, E>.
    Definition sbepp.hpp:3600
    +
    detail::apply_cv_qualifiers_t< Byte, Value > element_type
    final element type. value_type with the same cv-qualifiers as Byte
    Definition sbepp.hpp:3312
    +
    constexpr iterator begin() const noexcept
    Returns an iterator to the beginning.
    Definition sbepp.hpp:3334
    +
    constexpr void assign_range(R &&r) const
    Assigns range.
    Definition sbepp.hpp:3638
    +
    constexpr iterator insert(iterator pos, size_type count, const value_type value) const noexcept
    Inserts count copies of value before pos
    Definition sbepp.hpp:3523
    +
    constexpr void assign(size_type count, const value_type value) const noexcept
    Replaces the contents of the container with count copies of value
    Definition sbepp.hpp:3563
    +
    constexpr pointer data() const noexcept
    Direct access to the underlying array.
    Definition sbepp.hpp:3380
    +
    constexpr iterator erase(iterator pos) const noexcept
    Erases element at pos
    Definition sbepp.hpp:3489
    +
    constexpr void clear() const noexcept
    Sets size to 0.
    Definition sbepp.hpp:3419
    +
    constexpr bool empty() const noexcept
    Checks if size() != 0
    Definition sbepp.hpp:3406
    +
    constexpr reverse_iterator rbegin() const noexcept
    Returns a reverse iterator to the beginning.
    Definition sbepp.hpp:3346
    +
    constexpr void resize(size_type count, value_type value) const noexcept
    Sets size to count, initializes new elements with value
    Definition sbepp.hpp:3442
    +
    constexpr void assign(InputIt first, InputIt last) const
    Replaces the contents of the container with the elements from [first; last) range.
    Definition sbepp.hpp:3572
    +
    constexpr iterator end() const noexcept
    Returns an iterator to the end.
    Definition sbepp.hpp:3340
    +
    constexpr size_type size() const noexcept
    Returns raw size.
    Definition sbepp.hpp:3400
    +
    typename sbe_size_type::value_type size_type
    raw size type
    Definition sbepp.hpp:3318
    +
    Length sbe_size_type
    length SBE representation of data's encoding
    Definition sbepp.hpp:3316
    +
    element_type & reference
    element reference type
    Definition sbepp.hpp:3322
    +
    Base class for group entries.
    Definition sbepp.hpp:1791
    +
    constexpr entry_base(cursor< Byte2 > &c, Byte *end_ptr, BlockLengthType block_length) noexcept
    Constructs from cursor.
    Definition sbepp.hpp:1819
    +
    constexpr entry_base(const entry_base< Byte2, BlockLengthType > &other) noexcept
    Constructs from entry_base of compatible byte type. Available if Byte2* is convertible to Byte*
    Definition sbepp.hpp:1831
    +
    constexpr entry_base(Byte *ptr, const std::size_t size, const BlockLengthType block_length) noexcept
    Constructs from pointer and size.
    Definition sbepp.hpp:1809
    +
    entry_base()=default
    Constructs using nullptr
    +
    constexpr entry_base(Byte *ptr, Byte *end, BlockLengthType block_length) noexcept
    Constructs from two pointers.
    Definition sbepp.hpp:1802
    +
    Base class for a flat group.
    Definition sbepp.hpp:2279
    +
    random_access_iterator< Byte, Entry, typename std::decay< decltype(std::declval< Dimension >().blockLength().value())>::type, difference_type, size_type > iterator
    Random access iterator to value_type. Satisfies std::random_access_iterator
    Definition sbepp.hpp:2294
    +
    constexpr void clear() const noexcept
    Resizes to 0
    Definition sbepp.hpp:2401
    +
    constexpr sbe_size_type sbe_size() const noexcept
    Returns header's numInGroup
    Definition sbepp.hpp:2325
    +
    typename cursor_range_t< Byte2 >::iterator cursor_iterator
    cursor_range_t::iterator. Satisfies std::input_iterator
    Definition sbepp.hpp:2473
    +
    constexpr reference front() const noexcept
    Returns the first entry.
    Definition sbepp.hpp:2385
    +
    constexpr cursor_range_t< Byte2 > cursor_subrange(cursor< Byte2 > &c, const size_type pos) const noexcept
    Returns cursor range to [pos; size()) entries.
    Definition sbepp.hpp:2437
    +
    detail::cursor_range< value_type, size_type, cursor< Byte2 >, typename std::decay< decltype(std::declval< Dimension >().blockLength().value())>::type, Byte > cursor_range_t
    Type of a cursor range. Satisfies std::ranges::input_range
    Definition sbepp.hpp:2408
    +
    typename std::decay< decltype(std::declval< Dimension >().numInGroup())>::type sbe_size_type
    numInGroup value type
    Definition sbepp.hpp:2286
    +
    Entry value_type
    Entry type.
    Definition sbepp.hpp:2282
    +
    constexpr reference operator[](size_type pos) const noexcept
    Access group entry at pos
    Definition sbepp.hpp:2377
    +
    constexpr size_type size() const noexcept
    Returns raw size.
    Definition sbepp.hpp:2331
    +
    constexpr iterator begin() const noexcept
    Returns an iterator to the beginning.
    Definition sbepp.hpp:2355
    +
    constexpr cursor_iterator< Byte2 > cursor_begin(cursor< Byte2 > &c) const noexcept
    Returns cursor iterator to the beginning.
    Definition sbepp.hpp:2480
    +
    constexpr cursor_range_t< Byte2 > cursor_range(cursor< Byte2 > &c) const noexcept
    Returns cursor range to all group entries.
    Definition sbepp.hpp:2421
    +
    constexpr bool empty() const noexcept
    Checks if size() == 0
    Definition sbepp.hpp:2343
    +
    constexpr iterator end() const noexcept
    Returns an iterator to the end.
    Definition sbepp.hpp:2366
    +
    constexpr void resize(const size_type count) const noexcept
    Sets numInGroup to count
    Definition sbepp.hpp:2337
    +
    constexpr cursor_iterator< Byte2 > cursor_end(cursor< Byte2 > &c) const noexcept
    Returns cursor iterator to the end.
    Definition sbepp.hpp:2490
    +
    static constexpr size_type max_size() noexcept
    Returns numInGroup's maxValue
    Definition sbepp.hpp:2349
    +
    constexpr reference back() const noexcept
    Returns the last entry.
    Definition sbepp.hpp:2393
    +
    typename std::make_signed< size_type >::type difference_type
    signed size_type
    Definition sbepp.hpp:2291
    +
    constexpr cursor_range_t< Byte2 > cursor_subrange(cursor< Byte2 > &c, const size_type pos, const size_type count) const noexcept
    Returns cursor range to [pos; pos+count) entries.
    Definition sbepp.hpp:2455
    +
    typename sbe_size_type::value_type size_type
    Raw size type.
    Definition sbepp.hpp:2289
    +
    value_type reference
    value_type
    Definition sbepp.hpp:2284
    +
    Base class for messages.
    Definition sbepp.hpp:1749
    +
    Base class for a nested group.
    Definition sbepp.hpp:2513
    +
    constexpr size_type size() const noexcept
    Returns raw size.
    Definition sbepp.hpp:2569
    +
    constexpr iterator end() const noexcept
    Returns an iterator to the end.
    Definition sbepp.hpp:2604
    +
    constexpr cursor_range_t< Byte2 > cursor_subrange(cursor< Byte2 > &c, const size_type pos) const noexcept
    Returns cursor range to [pos; size()) entries.
    Definition sbepp.hpp:2659
    +
    Entry value_type
    entry type
    Definition sbepp.hpp:2516
    +
    static constexpr size_type max_size() noexcept
    Returns numInGroup's maxValue
    Definition sbepp.hpp:2587
    +
    typename cursor_range_t< Byte2 >::iterator cursor_iterator
    cursor_range_t::iterator. Satisfies std::input_iterator
    Definition sbepp.hpp:2695
    +
    value_type reference
    value_type
    Definition sbepp.hpp:2518
    +
    detail::cursor_range< value_type, size_type, cursor< Byte2 >, typename std::decay< decltype(std::declval< Dimension >().blockLength().value())>::type, Byte > cursor_range_t
    Type of a cursor range. Satisfies std::ranges::input_range
    Definition sbepp.hpp:2630
    +
    typename sbe_size_type::value_type size_type
    raw size type
    Definition sbepp.hpp:2523
    +
    typename std::make_signed< size_type >::type difference_type
    signed size_type
    Definition sbepp.hpp:2525
    +
    constexpr sbe_size_type sbe_size() const noexcept
    Returns header's numInGroup
    Definition sbepp.hpp:2563
    +
    constexpr void resize(const size_type count) const noexcept
    Sets numInGroup to count
    Definition sbepp.hpp:2575
    +
    constexpr reference front() const noexcept
    Returns the first element.
    Definition sbepp.hpp:2615
    +
    constexpr cursor_iterator< Byte2 > cursor_end(cursor< Byte2 > &c) const noexcept
    Returns cursor iterator to the end.
    Definition sbepp.hpp:2712
    +
    constexpr void clear() const noexcept
    Resizes to 0
    Definition sbepp.hpp:2623
    +
    constexpr cursor_iterator< Byte2 > cursor_begin(cursor< Byte2 > &c) const noexcept
    Returns cursor iterator to the beginning.
    Definition sbepp.hpp:2702
    +
    constexpr bool empty() const noexcept
    Checks if size() == 0
    Definition sbepp.hpp:2581
    +
    forward_iterator< Byte, Entry, size_type, difference_type, typename std::decay< decltype(std::declval< Dimension >().blockLength().value())>::type > iterator
    Forward iterator to value_type. Satisfies std::forward_iterator
    Definition sbepp.hpp:2529
    +
    constexpr cursor_range_t< Byte2 > cursor_range(cursor< Byte2 > &c) const noexcept
    Returns cursor range to all group entries.
    Definition sbepp.hpp:2643
    +
    constexpr cursor_range_t< Byte2 > cursor_subrange(cursor< Byte2 > &c, const size_type pos, const size_type count) const noexcept
    Returns cursor range to [pos; pos+count) entries.
    Definition sbepp.hpp:2677
    +
    constexpr iterator begin() const noexcept
    Returns an iterator to the beginning.
    Definition sbepp.hpp:2593
    +
    typename std::decay< decltype(std::declval< Dimension >().numInGroup())>::type sbe_size_type
    numInGroup value type
    Definition sbepp.hpp:2520
    +
    Base class for optional types.
    Definition sbepp.hpp:3834
    +
    constexpr value_type value() const noexcept
    Returns underlying value.
    Definition sbepp.hpp:3855
    +
    constexpr friend bool operator!=(const optional_base &lhs, const optional_base &rhs) noexcept
    Tests if lhs is not equal to rhs
    Definition sbepp.hpp:3935
    +
    constexpr optional_base(nullopt_t) noexcept
    Constructs null object.
    Definition sbepp.hpp:3844
    +
    optional_base()=default
    Constructs null object.
    +
    constexpr value_type value_or(T default_value) const noexcept
    Returns value if not null, default_value otherwise.
    Definition sbepp.hpp:3880
    +
    constexpr friend bool operator>=(const optional_base &lhs, const optional_base &rhs) noexcept
    Tests if lhs is greater than or equal to rhs
    Definition sbepp.hpp:3963
    +
    T value_type
    Underlying type.
    Definition sbepp.hpp:3837
    +
    constexpr bool in_range() const noexcept
    Checks if value is in [Derived::min_value(); Derived::max_value()] range.
    Definition sbepp.hpp:3874
    +
    constexpr optional_base(value_type val) noexcept
    Constructs object from given value.
    Definition sbepp.hpp:3850
    +
    constexpr bool has_value() const noexcept
    Checks if has value.
    Definition sbepp.hpp:3890
    +
    constexpr friend bool operator>(const optional_base &lhs, const optional_base &rhs) noexcept
    Tests if lhs is greater than rhs
    Definition sbepp.hpp:3956
    +
    constexpr value_type operator*() const noexcept
    Returns underlying value.
    Definition sbepp.hpp:3867
    +
    constexpr value_type & operator*() noexcept
    Returns reference to underlying value.
    Definition sbepp.hpp:3861
    +
    constexpr friend bool operator==(const optional_base &lhs, const optional_base &rhs) noexcept
    Tests if lhs is equal to rhs
    Definition sbepp.hpp:3910
    +
    constexpr friend std::strong_ordering operator<=>(const optional_base &lhs, const optional_base &rhs) noexcept
    Available only if SBEPP_HAS_THREE_WAY_COMPARISON == 1.
    +
    Base class for required types.
    Definition sbepp.hpp:3727
    +
    constexpr friend bool operator>(const required_base &lhs, const required_base &rhs) noexcept
    Tests if lhs is greater than rhs
    Definition sbepp.hpp:3809
    +
    constexpr friend bool operator>=(const required_base &lhs, const required_base &rhs) noexcept
    Tests if lhs is greater than or equal to rhs
    Definition sbepp.hpp:3816
    +
    constexpr value_type value() const noexcept
    Returns underlying value.
    Definition sbepp.hpp:3742
    +
    constexpr friend bool operator!=(const required_base &lhs, const required_base &rhs) noexcept
    Tests if lhs is not equal to rhs
    Definition sbepp.hpp:3788
    +
    constexpr value_type & operator*() noexcept
    Returns reference to underlying value.
    Definition sbepp.hpp:3748
    +
    constexpr friend bool operator==(const required_base &lhs, const required_base &rhs) noexcept
    Tests if lhs is equal to rhs
    Definition sbepp.hpp:3781
    +
    required_base()=default
    Default constructor. Constructs value-initialized object.
    +
    constexpr bool in_range() const noexcept
    Checks if value is in [Derived::min_value(); Derived::max_value()] range.
    Definition sbepp.hpp:3761
    +
    T value_type
    Underlying type.
    Definition sbepp.hpp:3730
    +
    constexpr value_type operator*() const noexcept
    Returns underlying value.
    Definition sbepp.hpp:3754
    +
    constexpr required_base(value_type val) noexcept
    Constructs from given value.
    Definition sbepp.hpp:3737
    +
    Represents reference to fixed-size array.
    Definition sbepp.hpp:2982
    +
    pointer iterator
    iterator type. Satisfies std::random_access_iterator
    Definition sbepp.hpp:2998
    +
    constexpr reverse_iterator rend() const noexcept
    Returns a reverse iterator to the end.
    Definition sbepp.hpp:3082
    +
    static constexpr bool empty() noexcept
    Checks if size() != 0
    Definition sbepp.hpp:3046
    +
    detail::apply_cv_qualifiers_t< Byte, Value > element_type
    final element type. value_type with the same cv-qualifiers as Byte
    Definition sbepp.hpp:2986
    +
    constexpr reference operator[](size_type pos) const noexcept
    Access element at pos
    Definition sbepp.hpp:3014
    +
    constexpr std::size_t strlen() const noexcept
    Calculates string length from left to right.
    Definition sbepp.hpp:3111
    +
    constexpr iterator assign_string(const char *str, const eos_null eos_mode=eos_null::all) const noexcept
    Assigns null-terminated string.
    Definition sbepp.hpp:3160
    +
    constexpr reference front() const noexcept
    Access the first element.
    Definition sbepp.hpp:3021
    +
    constexpr iterator begin() const noexcept
    Returns an iterator to the beginning.
    Definition sbepp.hpp:3064
    +
    static constexpr size_type size() noexcept
    Returns N
    Definition sbepp.hpp:3052
    +
    constexpr static_array_ref< Byte, detail::remove_cv_t< Byte >, N, Tag > raw() const noexcept
    Returns static_array_ref<Byte, Byte, N, Tag>.
    Definition sbepp.hpp:3099
    +
    constexpr iterator assign(std::initializer_list< value_type > ilist) const noexcept
    Assigns initializer list to first elements.
    Definition sbepp.hpp:3266
    +
    element_type & reference
    element reference type
    Definition sbepp.hpp:2994
    +
    std::reverse_iterator< iterator > reverse_iterator
    reverse iterator type
    Definition sbepp.hpp:3000
    +
    constexpr reference back() const noexcept
    Access the last element.
    Definition sbepp.hpp:3027
    +
    Value value_type
    same as Value
    Definition sbepp.hpp:2988
    +
    Tag tag
    type tag
    Definition sbepp.hpp:3002
    +
    element_type * pointer
    element pointer type
    Definition sbepp.hpp:2996
    +
    constexpr std::size_t strlen_r() const noexcept
    Calculates string length from right to left.
    Definition sbepp.hpp:3136
    +
    std::size_t size_type
    std::size_t
    Definition sbepp.hpp:2990
    +
    constexpr iterator end() const noexcept
    Returns an iterator to the end.
    Definition sbepp.hpp:3070
    +
    constexpr iterator assign_string(R &&r, const eos_null eos_mode=eos_null::all) const
    Assigns string represented by a range.
    Definition sbepp.hpp:3188
    +
    constexpr void fill(const value_type value) const noexcept
    Assigns value to all elements.
    Definition sbepp.hpp:3225
    +
    constexpr iterator assign_range(R &&r) const
    Assigns range.
    Definition sbepp.hpp:3208
    +
    constexpr reverse_iterator rbegin() const noexcept
    Returns a reverse iterator to the beginning.
    Definition sbepp.hpp:3076
    +
    constexpr iterator assign(InputIt first, InputIt last) const
    Assigns elements from [first; last) range to first elements.
    Definition sbepp.hpp:3250
    +
    static constexpr size_type max_size() noexcept
    Returns size()
    Definition sbepp.hpp:3058
    +
    std::ptrdiff_t difference_type
    std::ptrdiff_t
    Definition sbepp.hpp:2992
    +
    constexpr pointer data() const noexcept
    Direct access to the underlying array.
    Definition sbepp.hpp:3033
    +
    constexpr iterator assign(size_type count, const value_type value) const noexcept
    Assigns value to first count elements.
    Definition sbepp.hpp:3240
    +
    Provides various traits/attributes of an <enum> element.
    Definition sbepp.hpp:4156
    +
    EncodingType encoding_type
    Underlying type.
    Definition sbepp.hpp:4163
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    ScopedEnumType value_type
    Representation type.
    Definition sbepp.hpp:4175
    +
    Provides various traits/attributes of a <validValue> element.
    Definition sbepp.hpp:4193
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    Provides various traits/attributes of a <field> element.
    Definition sbepp.hpp:4456
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    ValueType value_type
    Representation type.
    Definition sbepp.hpp:4478
    +
    TypeTag value_type_tag
    value_type's tag. Not available for constants of numeric types
    Definition sbepp.hpp:4487
    +
    Provides various traits/attributes of a <group> element.
    Definition sbepp.hpp:4505
    +
    HeaderType< Byte > dimension_type
    Group dimension composite type.
    Definition sbepp.hpp:4535
    +
    HeaderTag dimension_type_tag
    Dimension composite tag.
    Definition sbepp.hpp:4537
    +
    GroupType< Byte > value_type
    Representation type.
    Definition sbepp.hpp:4528
    +
    EntryType< Byte > entry_type
    Group entry type.
    Definition sbepp.hpp:4544
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    Provides various traits/attributes of a <message> element.
    Definition sbepp.hpp:4334
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    SchemaTag schema_tag
    Schema tag.
    Definition sbepp.hpp:4359
    +
    MessageType< Byte > value_type
    Representation type.
    Definition sbepp.hpp:4357
    +
    Provides various traits/attributes of a <messageSchema> element.
    Definition sbepp.hpp:4116
    +
    HeaderTypeTag header_type_tag
    Message header composite tag. Can be used to access its traits.
    Definition sbepp.hpp:4138
    +
    static constexpr const char * package() noexcept
    Returns package attribute.
    +
    HeaderComposite< Byte > header_type
    Message header composite type.
    Definition sbepp.hpp:4136
    +
    Provides various traits/attributes of a <choice> element.
    Definition sbepp.hpp:4260
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    Provides various traits/attributes of a <set> element.
    Definition sbepp.hpp:4223
    +
    SetType value_type
    Representation type.
    Definition sbepp.hpp:4242
    +
    EncodingType encoding_type
    Underlying type.
    Definition sbepp.hpp:4235
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    Provides various traits and attributes of a <type> element.
    Definition sbepp.hpp:4035
    +
    ValueType value_type
    Representation type.
    Definition sbepp.hpp:4041
    +
    PrimitiveType primitive_type
    Underlying type.
    Definition sbepp.hpp:4038
    +
    static constexpr const char * name() noexcept
    Returns name attribute.
    +
    Concept for sbepp::is_array_type<T>::value
    Definition sbepp.hpp:5122
    +
    Concept for sbepp::is_composite<T>::value
    Definition sbepp.hpp:5150
    +
    Concept for sbepp::is_data<T>::value
    Definition sbepp.hpp:5170
    +
    Concept for sbepp::is_enum<T>::value
    Definition sbepp.hpp:5142
    +
    Concept for sbepp::is_flat_group<T>::value
    Definition sbepp.hpp:5158
    +
    Concept for sbepp::is_group<T>::value
    Definition sbepp.hpp:5166
    +
    Concept for sbepp::is_message<T>::value
    Definition sbepp.hpp:5154
    +
    Concept for sbepp::is_nested_group<T>::value
    Definition sbepp.hpp:5162
    +
    Concept for sbepp::is_non_array_type<T>::value
    Definition sbepp.hpp:5134
    +
    Concept for sbepp::is_optional_type<T>::value
    Definition sbepp.hpp:5130
    +
    Concept for sbepp::is_required_type<T>::value
    Definition sbepp.hpp:5126
    +
    Concept for sbepp::is_set<T>::value
    Definition sbepp.hpp:5146
    +
    Concept for sbepp::is_type<T>::value
    Definition sbepp.hpp:5138
    +
    constexpr detail::skip_cursor_wrapper< Byte > skip(cursor< Byte > &c) noexcept
    Returns a wrapper which moves the cursor to the end of field/group/data without returning the accesse...
    Definition sbepp.hpp:1728
    +
    constexpr detail::dont_move_cursor_wrapper< Byte > dont_move(cursor< Byte > &c) noexcept
    Returns a wrapper which doesn't advance the cursor when it's used.
    Definition sbepp.hpp:1694
    +
    constexpr detail::init_cursor_wrapper< Byte > init(cursor< Byte > &c) noexcept
    Returns a wrapper which will initialize the cursor when it's used and advance after the usage.
    Definition sbepp.hpp:1665
    +
    constexpr detail::init_dont_move_cursor_wrapper< Byte > init_dont_move(cursor< Byte > &c) noexcept
    Returns a wrapper which initializes the cursor but doesn't move it. Behaves like a combination of ini...
    Definition sbepp.hpp:1708
    +
    The main sbepp namespace.
    Definition sbepp.hpp:232
    +
    constexpr auto is_composite_v
    Shorthand for sbepp::is_composite<T>::value
    Definition sbepp.hpp:5096
    +
    constexpr auto is_required_type_v
    Shorthand for sbepp::is_required_type<T>::value
    Definition sbepp.hpp:5072
    +
    constexpr auto is_type_v
    Shorthand for sbepp::is_type<T>::value
    Definition sbepp.hpp:5084
    +
    constexpr std::underlying_type< Enum >::type to_underlying(Enum e) noexcept
    Converts an enumeration to its underlying type. Equivalent to C++23 std::to_underlying()
    Definition sbepp.hpp:2827
    +
    detail::is_base_of_tmp< detail::optional_base, T > is_optional_type
    Checks if T is a non-array optional type.
    Definition sbepp.hpp:4985
    +
    constexpr View< Byte > make_view(Byte *ptr, const std::size_t size) noexcept
    Construct view from memory buffer.
    Definition sbepp.hpp:4897
    +
    typename traits_tag< ValueType >::type traits_tag_t
    Shorthand for sbepp::traits_tag<T>::type
    Definition sbepp.hpp:4647
    +
    constexpr auto is_flat_group_v
    Shorthand for sbepp::is_flat_group<T>::value
    Definition sbepp.hpp:5104
    +
    eos_null
    Represents number of null bytes that can be added after the end-of-string by detail::static_array_ref...
    Definition sbepp.hpp:2895
    + +
    @ all
    All bytes after the last string character will be set to null.
    + +
    constexpr cursor< byte_type_t< View > > init_cursor(View view) noexcept
    Initializes cursor from a message/group view with the same byte type.
    Definition sbepp.hpp:2846
    +
    constexpr auto get_header(T v) noexcept -> decltype(v(detail::get_header_tag{}))
    Returns the header of a message/group.
    Definition sbepp.hpp:1607
    +
    detail::is_base_of_tmp< detail::required_base, T > is_required_type
    Checks if T is a non-array required type.
    Definition sbepp.hpp:4981
    +
    std::integral_constant< bool, is_flat_group< T >::value||is_nested_group< T >::value > is_group
    Checks if T is a group of any kind.
    Definition sbepp.hpp:5038
    +
    detail::is_base_of_tmp< detail::flat_group_base, T > is_flat_group
    Checks if T is a flat group.
    Definition sbepp.hpp:5030
    +
    constexpr auto is_array_type_v
    Shorthand for sbepp::is_array_type<T>::value
    Definition sbepp.hpp:5068
    +
    constexpr nullopt_t nullopt
    Helper constant used to initialize optional types with null value.
    Definition sbepp.hpp:3717
    +
    field_presence
    Represents presence trait value type, e.g. type_traits::presence()
    Definition sbepp.hpp:313
    +
    @ constant
    field is constant
    +
    @ required
    field is required
    +
    @ optional
    field is optional
    +
    constexpr Visitor && visit_children(View view, Cursor &c, Visitor &&visitor={})
    Visit view's children using provided cursor.
    Definition sbepp.hpp:5301
    +
    constexpr auto is_enum_v
    Shorthand for sbepp::is_enum<T>::value
    Definition sbepp.hpp:5088
    +
    constexpr cursor< typename std::add_const< byte_type_t< View > >::type > init_const_cursor(View view) noexcept
    Initializes cursor from a message/group view with const byte type.
    Definition sbepp.hpp:2869
    +
    constexpr auto fill_message_header(Message m) noexcept -> decltype(m(detail::fill_message_header_tag{}))
    Fill message header.
    Definition sbepp.hpp:3990
    +
    constexpr auto is_non_array_type_v
    Shorthand for sbepp::is_non_array_type<T>::value
    Definition sbepp.hpp:5080
    +
    constexpr Visitor && visit(View view, Cursor &c, Visitor &&visitor={})
    Visit a view using given cursor.
    Definition sbepp.hpp:5199
    +
    std::uint8_t choice_index_t
    Represents set_choice_traits::index() value type.
    Definition sbepp.hpp:308
    +
    typename detail::is_data_impl< T >::type is_data
    Checks if T is a data.
    Definition sbepp.hpp:5063
    +
    typename byte_type< View >::type byte_type_t
    Shortcut for byte_type<T>::type
    Definition sbepp.hpp:1639
    +
    detail::is_base_of_tmp< detail::nested_group_base, T > is_nested_group
    Checks if T is a nested group.
    Definition sbepp.hpp:5034
    +
    constexpr const char * enum_to_string(const E e) noexcept
    Converts enum to string.
    Definition sbepp.hpp:5367
    +
    detail::is_base_of_tmp< detail::message_base, T > is_message
    Checks if T is a message.
    Definition sbepp.hpp:5026
    +
    constexpr auto fill_group_header(Group g, Size num_in_group) noexcept -> decltype(g(detail::fill_group_header_tag{}, num_in_group))
    Fill group header.
    Definition sbepp.hpp:4010
    +
    constexpr auto addressof(T v) noexcept -> decltype(v(detail::addressof_tag{}))
    Returns pointer to the underlying data referenced by a view.
    Definition sbepp.hpp:1619
    +
    std::uint64_t offset_t
    Represents offset trait value type, e.g. type_traits::offset()
    Definition sbepp.hpp:294
    +
    std::uint32_t message_id_t
    Represents message_traits::id() value type.
    Definition sbepp.hpp:301
    +
    void assertion_failed(char const *expr, char const *function, char const *file, long line)
    When SBEPP_ASSERT_HANDLER or SBEPP_ENABLE_ASSERTS_WITH_HANDLER is defined, this function is called fo...
    +
    constexpr std::size_t size_bytes(T v) noexcept
    Returns the size of the underlying data represented by message/group/entry/data/composite view,...
    Definition sbepp.hpp:1580
    +
    std::uint64_t version_t
    Represents version trait value type, e.g. type_traits::since_version()
    Definition sbepp.hpp:297
    +
    detail::is_base_of_tmp< detail::bitset_base, T > is_set
    Checks if T is a set.
    Definition sbepp.hpp:5018
    +
    std::integral_constant< bool, is_required_type< T >::value||is_optional_type< T >::value||is_array_type< T >::value > is_type
    Checks if T is a type of any kind.
    Definition sbepp.hpp:4995
    +
    constexpr auto is_group_v
    Shorthand for sbepp::is_group<T>::value
    Definition sbepp.hpp:5112
    +
    constexpr auto visit_set(const Set s, Visitor &&visitor) noexcept -> decltype(s(detail::visit_set_tag{}, std::forward< Visitor >(visitor)))
    Visits set choices in order of their declaration.
    Definition sbepp.hpp:5385
    +
    constexpr default_init_t default_init
    helper to pass default_init_t to dynamic_array_ref::resize().
    Definition sbepp.hpp:2890
    +
    std::integral_constant< bool, is_required_type< T >::value||is_optional_type< T >::value > is_non_array_type
    Checks if T is a non-array type.
    Definition sbepp.hpp:4989
    +
    std::uint16_t member_id_t
    Represents id trait value type, e.g. field_traits::id()
    Definition sbepp.hpp:306
    +
    constexpr auto is_optional_type_v
    Shorthand for sbepp::is_optional_type<T>::value
    Definition sbepp.hpp:5076
    +
    std::uint64_t length_t
    Represents type_traits::length() value type.
    Definition sbepp.hpp:290
    +
    constexpr size_bytes_checked_result size_bytes_checked(View view, std::size_t size) noexcept
    Calculate view size with additional safety checks.
    Definition sbepp.hpp:5526
    +
    constexpr auto is_message_v
    Shorthand for sbepp::is_message<T>::value
    Definition sbepp.hpp:5100
    +
    std::uint64_t block_length_t
    Represents block_length trait value type, e.g. message_traits::block_length()
    Definition sbepp.hpp:304
    +
    constexpr auto is_set_v
    Shorthand for sbepp::is_set<T>::value
    Definition sbepp.hpp:5092
    +
    detail::is_base_of_tmp< detail::entry_base, T > is_group_entry
    Checks if T is a group entry.
    Definition sbepp.hpp:5044
    +
    std::uint32_t schema_id_t
    Represents schema_traits::id() value type.
    Definition sbepp.hpp:299
    +
    constexpr auto is_nested_group_v
    Shorthand for sbepp::is_nested_group<T>::value
    Definition sbepp.hpp:5108
    +
    constexpr View< typename std::add_const< Byte >::type > make_const_view(Byte *ptr, const std::size_t size) noexcept
    Construct read-only view from memory buffer.
    Definition sbepp.hpp:4922
    +
    constexpr auto is_data_v
    Shorthand for sbepp::is_data<T>::value
    Definition sbepp.hpp:5116
    +
    endian
    Represents schema_traits::byte_order() value type. When SBEPP_HAS_ENDIAN is 1, it's just an alias to ...
    Definition sbepp.hpp:337
    +
    @ native
    current platform endianness
    +
    @ little
    little-endian
    +
    @ big
    big-endian
    +
    typename detail::is_array_type_impl< T >::type is_array_type
    Checks is T is an array type.
    Definition sbepp.hpp:4977
    +
    detail::is_base_of_tmp< detail::composite_base, T > is_composite
    Checks if T is a composite.
    Definition sbepp.hpp:5022
    +
    #define SBEPP_BYTE_ORDER
    Must be defined to either little or big when native endianness cannot be detected automatically.
    Definition sbepp.hpp:327
    +
    Trait to get view's byte type.
    Definition sbepp.hpp:1631
    +
    typename std::remove_pointer< decltype(sbepp::addressof( std::declval< View >()))>::type type
    holds View's byte type
    Definition sbepp.hpp:1633
    +
    tag for dynamic_array_ref::resize(). Used to skip value initialization.
    Definition sbepp.hpp:2881
    +
    Checks if T is an enumeration.
    Definition sbepp.hpp:5003
    +
    Tag type used to initialize optional types with null value.
    Definition sbepp.hpp:3706
    +
    Result type of size_bytes_checked
    Definition sbepp.hpp:5506
    +
    Maps representation type to its tag.
    Definition sbepp.hpp:4639
    +
    Tag type
    Tag to access ValueType's traits.
    Definition sbepp.hpp:4641
    +
    Tag for unknown enum values.
    Definition sbepp.hpp:4934
    +
    +
    + + + + diff --git a/1.4.1/sbeppc.html b/1.4.1/sbeppc.html new file mode 100644 index 0000000..40c9c95 --- /dev/null +++ b/1.4.1/sbeppc.html @@ -0,0 +1,150 @@ + + + + + + + + +sbepp: Using the schema compiler + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Using the schema compiler
    +
    +
    +

    Usage:

    +
    sbeppc [OPTIONS]... FILE
    +
    +
    Options:
    +
    --schema-name NAME override schema name. Uses `messageSchema.package` by
    +
    default
    +
    --output-dir DIR output directory. Uses current directory by default
    +
    --inject-include PATH injects `#include "PATH"` directive at the top of
    +
    `schema/schema.hpp`
    +
    --version print version and exit
    +
    --help print this help and exit
    +
    -- end of optional arguments
    +

    Here's an example of the resulting file structure:

    +
    output_dir/schema_name/ # `schema_name` directory is generated by sbeppc
    +
    schema_name.hpp # contains everything
    +
    +
    schema/
    +
    schema.hpp # contains tags
    +
    +
    types/ # contains public types
    +
    type_a.hpp # file per type
    +
    type_b.hpp
    +
    # ...
    +
    +
    messages/ # contains messages
    +
    message_a.hpp # file per message
    +
    message_b.hpp
    +
    # ...
    +

    Here, schema, types and messages are hardcoded names, files for type/message will have the same name as their corresponding entity in XML schema.
    + Each of those headers includes its type dependencies so usually one needs to include only the message-related headers.

    +
    Note
    Existing files are always overwritten.
    +

    In the description above, schema_name is by default taken from messageSchema.package attribute. This name is also used for a top-level namespace name and thus should follow C++ naming rules. However, SBE requirements for messageSchema.package are much weaker, actually, this attribute is optional. For cases when default name is not valid/desired, there's a --schema-name option to specify/override schema name.

    +
    Note
    sbeppc is not a reference SBE schema validation tool. It implements the standard only to extent required for correct data representation. It does its best but please don't rely on it for complete schema validation.
    +
    +
    +
    + + + + diff --git a/1.4.1/search/all_0.js b/1.4.1/search/all_0.js new file mode 100644 index 0000000..5b0d619 --- /dev/null +++ b/1.4.1/search/all_0.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['a_20message_0',['Estimating buffer size to encode a message',['../examples.html#example-size-bytes',1,'']]], + ['a_20message_20using_20cursor_20based_20accessors_1',['A message using cursor based accessors',['../examples.html#autotoc_md55',1,'Decoding a message using cursor-based accessors'],['../examples.html#autotoc_md51',1,'Encoding a message using cursor-based accessors']]], + ['a_20message_20using_20normal_20accessors_2',['A message using normal accessors',['../examples.html#autotoc_md53',1,'Decoding a message using normal accessors'],['../examples.html#autotoc_md49',1,'Encoding a message using normal accessors']]], + ['accessors_3',['Accessors',['../representation.html#cursor-accessors',1,'Cursor-based accessors'],['../examples.html#autotoc_md55',1,'Decoding a message using cursor-based accessors'],['../examples.html#autotoc_md53',1,'Decoding a message using normal accessors'],['../examples.html#autotoc_md51',1,'Encoding a message using cursor-based accessors'],['../examples.html#autotoc_md49',1,'Encoding a message using normal accessors'],['../representation.html#accessors',1,'Field accessors']]], + ['addressof_4',['addressof',['../namespacesbepp.html#a870241790cb5759575b9f57d654392c2',1,'sbepp']]], + ['all_5',['all',['../namespacesbepp.html#a0ee177accf7d675a768848bb29e1512faa181a603769c1f98ad927e7367c7aa51',1,'sbepp']]], + ['and_20compatibility_6',['Versioning and compatibility',['../integration.html#versioning',1,'']]], + ['and_20sets_7',['Visiting enums and sets',['../visit-api.html#autotoc_md47',1,'']]], + ['api_8',['Visit API',['../visit-api.html',1,'']]], + ['arrays_9',['Fixed-size arrays',['../representation.html#autotoc_md31',1,'']]], + ['assertion_5ffailed_10',['assertion_failed',['../namespacesbepp.html#a9005f92162d3e00f4c4d1bd2e311f8b0',1,'sbepp']]], + ['assign_11',['assign',['../classsbepp_1_1detail_1_1static__array__ref.html#affc0a2f84dbd5fcc712f1692b7b372e0',1,'sbepp::detail::static_array_ref::assign(size_type count, const value_type value) const noexcept'],['../classsbepp_1_1detail_1_1static__array__ref.html#ae223375ae96f2b4a72cf5002c3ff38ea',1,'sbepp::detail::static_array_ref::assign(InputIt first, InputIt last) const'],['../classsbepp_1_1detail_1_1static__array__ref.html#a65e5c092105176c368e91706e948fca0',1,'sbepp::detail::static_array_ref::assign(std::initializer_list< value_type > ilist) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ab0bc4620ab86a21f2ddbfe18406eca1c',1,'sbepp::detail::dynamic_array_ref::assign(size_type count, const value_type value) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ad08611247f13c99807af0368180861f5',1,'sbepp::detail::dynamic_array_ref::assign(InputIt first, InputIt last) const'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a2cb21d19a322367df856b3fdf1243cf6',1,'sbepp::detail::dynamic_array_ref::assign(std::initializer_list< value_type > ilist) const noexcept']]], + ['assign_5frange_12',['assign_range',['../classsbepp_1_1detail_1_1static__array__ref.html#add93caee008d318e2faca8d31986f7f0',1,'sbepp::detail::static_array_ref::assign_range()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#aa9373ed8d2dbb0c7f755531074356a24',1,'sbepp::detail::dynamic_array_ref::assign_range()']]], + ['assign_5fstring_13',['assign_string',['../classsbepp_1_1detail_1_1static__array__ref.html#a1f63ff3a5b0cf99df9b632733ff507f3',1,'sbepp::detail::static_array_ref::assign_string(const char *str, const eos_null eos_mode=eos_null::all) const noexcept'],['../classsbepp_1_1detail_1_1static__array__ref.html#acfbcf354ba60eec9135579bf059d93cd',1,'sbepp::detail::static_array_ref::assign_string(R &&r, const eos_null eos_mode=eos_null::all) const'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a27476f9cf708075e344b509d3e7772e2',1,'sbepp::detail::dynamic_array_ref::assign_string()']]] +]; diff --git a/1.4.1/search/all_1.js b/1.4.1/search/all_1.js new file mode 100644 index 0000000..58a45a4 --- /dev/null +++ b/1.4.1/search/all_1.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['back_0',['back',['../classsbepp_1_1detail_1_1flat__group__base.html#ad29ce8e67aad9180fe3340ba84f73f3f',1,'sbepp::detail::flat_group_base::back()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a8161979b4c364af8280eab33295a846d',1,'sbepp::detail::static_array_ref::back()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a2d1259db5d27d8d7db07a1683f475f1d',1,'sbepp::detail::dynamic_array_ref::back()']]], + ['based_20accessors_1',['Based accessors',['../representation.html#cursor-accessors',1,'Cursor-based accessors'],['../examples.html#autotoc_md55',1,'Decoding a message using cursor-based accessors'],['../examples.html#autotoc_md51',1,'Encoding a message using cursor-based accessors']]], + ['begin_2',['begin',['../classsbepp_1_1detail_1_1flat__group__base.html#a7e1d6a86257a96bed56bd00fb8b7e609',1,'sbepp::detail::flat_group_base::begin()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ae7cb7867e43f254ef4ed0f3bee35cdb6',1,'sbepp::detail::nested_group_base::begin()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a52cfd8c882748794a264f46b0e0c713d',1,'sbepp::detail::static_array_ref::begin()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a84298bef272e521a534e5c399facd85a',1,'sbepp::detail::dynamic_array_ref::begin()']]], + ['benchmarks_3',['Benchmarks',['../benchmarks.html',1,'']]], + ['big_4',['big',['../namespacesbepp.html#af318e06df8931dd69380221b420caec5ad861877da56b8b4ceb35c8cbfdf65bb4',1,'sbepp']]], + ['bitset_5fbase_5',['bitset_base',['../classsbepp_1_1detail_1_1bitset__base.html',1,'sbepp::detail::bitset_base< T >'],['../classsbepp_1_1detail_1_1bitset__base.html#aff9292d5470a65ccbac45033c271d186',1,'sbepp::detail::bitset_base::bitset_base()=default'],['../classsbepp_1_1detail_1_1bitset__base.html#a8218ec7a0569f6bd0c54bf1ed020e0a5',1,'sbepp::detail::bitset_base::bitset_base(T value) noexcept']]], + ['block_5flength_6',['block_length',['../classsbepp_1_1message__traits.html#ad50a4bd3f1a15fb6f7b7025370a78373',1,'sbepp::message_traits::block_length()'],['../classsbepp_1_1group__traits.html#a0156efd41771f12de1e50ae88330cc63',1,'sbepp::group_traits::block_length()']]], + ['block_5flength_5ft_7',['block_length_t',['../namespacesbepp.html#ac0fdcdd3dfa93ad4aaac66379da7b0c5',1,'sbepp']]], + ['buffer_20size_20to_20encode_20a_20message_8',['Estimating buffer size to encode a message',['../examples.html#example-size-bytes',1,'']]], + ['byte_5forder_9',['byte_order',['../classsbepp_1_1schema__traits.html#ad6ebc5adc1b8a2385cb92f1f4d3bbab3',1,'sbepp::schema_traits']]], + ['byte_5frange_10',['byte_range',['../classsbepp_1_1detail_1_1byte__range.html',1,'sbepp::detail::byte_range< Byte >'],['../classsbepp_1_1detail_1_1byte__range.html#a7c71293de61b7e01d5f7ca29d72e394a',1,'sbepp::detail::byte_range::byte_range()=default'],['../classsbepp_1_1detail_1_1byte__range.html#aec6ab4f07a9910cb8baf29c41c62542b',1,'sbepp::detail::byte_range::byte_range(Byte *begin, Byte *end) noexcept'],['../classsbepp_1_1detail_1_1byte__range.html#a14cd2d9c6afb4a77d44eeb0dc18523f9',1,'sbepp::detail::byte_range::byte_range(Byte *ptr, const std::size_t size) noexcept'],['../classsbepp_1_1detail_1_1byte__range.html#a4d4774d319e0e9335f7103528aee55f8',1,'sbepp::detail::byte_range::byte_range(const byte_range< Byte2 > &other) noexcept']]], + ['byte_5ftype_11',['byte_type',['../structsbepp_1_1byte__type.html',1,'sbepp::byte_type< View >'],['../classsbepp_1_1cursor.html#a36cf06c2b21b3d0b48e39ca1e3be6ad0',1,'sbepp::cursor::byte_type']]], + ['byte_5ftype_5ft_12',['byte_type_t',['../namespacesbepp.html#a62faab2402f172fb1d0dde766f51b3d7',1,'sbepp']]] +]; diff --git a/1.4.1/search/all_10.js b/1.4.1/search/all_10.js new file mode 100644 index 0000000..c4f32c6 --- /dev/null +++ b/1.4.1/search/all_10.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['tag_0',['tag',['../classsbepp_1_1detail_1_1static__array__ref.html#a8f35529c37c4d55f3a28a73996dfcf68',1,'sbepp::detail::static_array_ref']]], + ['tags_1',['Tags',['../traits.html#tags',1,'']]], + ['the_20fly_2',['Compiling schema on-the-fly',['../integration.html#autotoc_md4',1,'']]], + ['the_20schema_20compiler_3',['Using the schema compiler',['../sbeppc.html',1,'']]], + ['to_20encode_20a_20message_4',['Estimating buffer size to encode a message',['../examples.html#example-size-bytes',1,'']]], + ['to_20reallogic_5',['How it compares to RealLogic',['../index.html#autotoc_md1',1,'']]], + ['to_5funderlying_6',['to_underlying',['../namespacesbepp.html#a0d0a0af58987f30ee37fda64c15cc316',1,'sbepp']]], + ['traits_7',['Traits',['../representation.html#autotoc_md13',1,'Representation types vs. traits'],['../traits.html',1,'Traits'],['../traits.html#autotoc_md41',1,'Using traits']]], + ['traits_20list_8',['Traits list',['../group__traits-list.html',1,'']]], + ['traits_5ftag_9',['traits_tag',['../structsbepp_1_1traits__tag.html',1,'sbepp']]], + ['traits_5ftag_5ft_10',['traits_tag_t',['../namespacesbepp.html#a0ddc0b9ce9e876a0ac772b4d1af64b4b',1,'sbepp']]], + ['type_11',['type',['../structsbepp_1_1byte__type.html#a5309c044561c3ad72f35fa55f6d61ed7',1,'sbepp::byte_type::type'],['../structsbepp_1_1traits__tag.html#a18958c7e8785cc5a83cb1cee0873d588',1,'sbepp::traits_tag::type']]], + ['type_5ftraits_12',['type_traits',['../classsbepp_1_1type__traits.html',1,'sbepp']]], + ['types_13',['Optional/required types',['../representation.html#non-array-types',1,'']]], + ['types_20vs_20traits_14',['Representation types vs. traits',['../representation.html#autotoc_md13',1,'']]] +]; diff --git a/1.4.1/search/all_11.js b/1.4.1/search/all_11.js new file mode 100644 index 0000000..45cd361 --- /dev/null +++ b/1.4.1/search/all_11.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['uint16_5fopt_5ft_0',['uint16_opt_t',['../classsbepp_1_1uint16__opt__t.html',1,'sbepp']]], + ['uint16_5ft_1',['uint16_t',['../classsbepp_1_1uint16__t.html',1,'sbepp']]], + ['uint32_5fopt_5ft_2',['uint32_opt_t',['../classsbepp_1_1uint32__opt__t.html',1,'sbepp']]], + ['uint32_5ft_3',['uint32_t',['../classsbepp_1_1uint32__t.html',1,'sbepp']]], + ['uint64_5fopt_5ft_4',['uint64_opt_t',['../classsbepp_1_1uint64__opt__t.html',1,'sbepp']]], + ['uint64_5ft_5',['uint64_t',['../classsbepp_1_1uint64__t.html',1,'sbepp']]], + ['uint8_5fopt_5ft_6',['uint8_opt_t',['../classsbepp_1_1uint8__opt__t.html',1,'sbepp']]], + ['uint8_5ft_7',['uint8_t',['../classsbepp_1_1uint8__t.html',1,'sbepp']]], + ['unknown_5fenum_5fvalue_5ftag_8',['unknown_enum_value_tag',['../structsbepp_1_1unknown__enum__value__tag.html',1,'sbepp']]], + ['using_20cursor_20based_20accessors_9',['Using cursor based accessors',['../examples.html#autotoc_md55',1,'Decoding a message using cursor-based accessors'],['../examples.html#autotoc_md51',1,'Encoding a message using cursor-based accessors']]], + ['using_20normal_20accessors_10',['Using normal accessors',['../examples.html#autotoc_md53',1,'Decoding a message using normal accessors'],['../examples.html#autotoc_md49',1,'Encoding a message using normal accessors']]], + ['using_20pre_20compiled_20schema_11',['Using pre-compiled schema',['../integration.html#autotoc_md11',1,'']]], + ['using_20the_20schema_20compiler_12',['Using the schema compiler',['../sbeppc.html',1,'']]], + ['using_20traits_13',['Using traits',['../traits.html#autotoc_md41',1,'']]] +]; diff --git a/1.4.1/search/all_12.js b/1.4.1/search/all_12.js new file mode 100644 index 0000000..e5a529e --- /dev/null +++ b/1.4.1/search/all_12.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['valid_0',['valid',['../structsbepp_1_1size__bytes__checked__result.html#a9627848534794b032e8c5e53e796b83d',1,'sbepp::size_bytes_checked_result']]], + ['value_1',['value',['../classsbepp_1_1detail_1_1required__base.html#a41b70ceece0da5f77cd12093da043bed',1,'sbepp::detail::required_base::value()'],['../classsbepp_1_1detail_1_1optional__base.html#a26c508ad9e9f3285170f5745112a6b0b',1,'sbepp::detail::optional_base::value()'],['../classsbepp_1_1enum__value__traits.html#a604abf8cf38677d33f93d81f972b8679',1,'sbepp::enum_value_traits::value()']]], + ['value_5for_2',['value_or',['../classsbepp_1_1detail_1_1optional__base.html#a573de5ba1180952c1493c9e1dd071d06',1,'sbepp::detail::optional_base']]], + ['value_5ftype_3',['value_type',['../classsbepp_1_1detail_1_1flat__group__base.html#a73d80a5fb9f0a8438ed8ea26b3826bde',1,'sbepp::detail::flat_group_base::value_type'],['../classsbepp_1_1detail_1_1nested__group__base.html#a2a8c53fdd91117bc3aa24392469d31c4',1,'sbepp::detail::nested_group_base::value_type'],['../classsbepp_1_1detail_1_1static__array__ref.html#a8e1cca220f7deac75b4f752714360f0a',1,'sbepp::detail::static_array_ref::value_type'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a67a2ca78d220b51c46c08b41549f136c',1,'sbepp::detail::dynamic_array_ref::value_type'],['../classsbepp_1_1detail_1_1required__base.html#abb2ddc0f7b35df32f2ab11f803c10229',1,'sbepp::detail::required_base::value_type'],['../classsbepp_1_1detail_1_1optional__base.html#a641442faa106a5fb5446b98e9532796b',1,'sbepp::detail::optional_base::value_type'],['../classsbepp_1_1type__traits.html#a4dc3777d81e9e0c4336dc6e5bf2cbc44',1,'sbepp::type_traits::value_type'],['../classsbepp_1_1type__traits.html#a06fc70c0e31a82d714dc4f9a784629ff',1,'sbepp::type_traits::value_type'],['../classsbepp_1_1enum__traits.html#a97d5396e90699ee5006e3171c3d42a50',1,'sbepp::enum_traits::value_type'],['../classsbepp_1_1set__traits.html#a63df09f2bfc8ed24301e619f235a6fe3',1,'sbepp::set_traits::value_type'],['../classsbepp_1_1composite__traits.html#a0b92c7c81c1973207accafaeb65302da',1,'sbepp::composite_traits::value_type'],['../classsbepp_1_1message__traits.html#adc2fc3fc714037828f2bd6d95c6b8923',1,'sbepp::message_traits::value_type'],['../classsbepp_1_1field__traits.html#aa9c7c11286357ceff0d7a752b872a4b0',1,'sbepp::field_traits::value_type'],['../classsbepp_1_1field__traits.html#a78d393a2b7bac944e0aa51d63b6d4a70',1,'sbepp::field_traits::value_type'],['../classsbepp_1_1group__traits.html#a9930513918c1e1d15014211e2d54ad72',1,'sbepp::group_traits::value_type'],['../classsbepp_1_1data__traits.html#a83ed2fb355c41064edd17fb7f6498a54',1,'sbepp::data_traits::value_type']]], + ['value_5ftype_5ftag_4',['value_type_tag',['../classsbepp_1_1field__traits.html#ad4c5e229a263bcd729f91992e4a66abd',1,'sbepp::field_traits']]], + ['version_5',['version',['../classsbepp_1_1schema__traits.html#a34fc19d3d1d2837bbdf4804d722d8cf5',1,'sbepp::schema_traits']]], + ['version_5ft_6',['version_t',['../namespacesbepp.html#a97309329a3ef93149d698a0c5a9da6ba',1,'sbepp']]], + ['versioning_20and_20compatibility_7',['Versioning and compatibility',['../integration.html#versioning',1,'']]], + ['views_8',['Visiting parent views',['../visit-api.html#autotoc_md43',1,'']]], + ['visit_9',['visit',['../namespacesbepp.html#a47c1cd81154bc5c56524604f74d52d27',1,'sbepp::visit(View view, Cursor &c, Visitor &&visitor={})'],['../namespacesbepp.html#a79950b0d08ddf3eafafb25a5693a6e2a',1,'sbepp::visit(View view, Visitor &&visitor={})'],['../namespacesbepp.html#a3dafbabb41e8a71abde1535551de2c6d',1,'sbepp::visit(Set s, Visitor &&visitor={})'],['../namespacesbepp.html#abf05c2c5e3e81c441cce4db02c0c642b',1,'sbepp::visit(Enum e, Visitor &&visitor={})']]], + ['visit_20api_10',['Visit API',['../visit-api.html',1,'']]], + ['visit_5fchildren_11',['visit_children',['../namespacesbepp.html#a23abc2b6b892aea5b2b7f6dde6c24e69',1,'sbepp::visit_children(View view, Cursor &c, Visitor &&visitor={})'],['../namespacesbepp.html#a306622dcac701f3c76abd3ea7c2902b6',1,'sbepp::visit_children(View view, Visitor &&visitor={})']]], + ['visit_5fset_12',['visit_set',['../namespacesbepp.html#aa253364a4276b55c0a157aefaa185c37',1,'sbepp']]], + ['visiting_20children_13',['Visiting children',['../visit-api.html#autotoc_md45',1,'']]], + ['visiting_20enums_20and_20sets_14',['Visiting enums and sets',['../visit-api.html#autotoc_md47',1,'']]], + ['visiting_20parent_20views_15',['Visiting parent views',['../visit-api.html#autotoc_md43',1,'']]], + ['vs_20decoding_16',['Encoding vs. decoding',['../representation.html#autotoc_md21',1,'']]], + ['vs_20traits_17',['Representation types vs. traits',['../representation.html#autotoc_md13',1,'']]] +]; diff --git a/1.4.1/search/all_13.js b/1.4.1/search/all_13.js new file mode 100644 index 0000000..732ad52 --- /dev/null +++ b/1.4.1/search/all_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['works_0',['How it works',['../index.html#autotoc_md0',1,'']]] +]; diff --git a/1.4.1/search/all_14.js b/1.4.1/search/all_14.js new file mode 100644 index 0000000..f7bc40c --- /dev/null +++ b/1.4.1/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['your_20project_0',['Integration into your project',['../integration.html',1,'']]] +]; diff --git a/1.4.1/search/all_2.js b/1.4.1/search/all_2.js new file mode 100644 index 0000000..06a700f --- /dev/null +++ b/1.4.1/search/all_2.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['char_5fopt_5ft_0',['char_opt_t',['../classsbepp_1_1char__opt__t.html',1,'sbepp']]], + ['char_5ft_1',['char_t',['../classsbepp_1_1char__t.html',1,'sbepp']]], + ['character_5fencoding_2',['character_encoding',['../classsbepp_1_1type__traits.html#a323337b97d9f115a64f732a1f947bfb4',1,'sbepp::type_traits']]], + ['checks_3',['Safety checks',['../representation.html#autotoc_md20',1,'']]], + ['children_4',['Visiting children',['../visit-api.html#autotoc_md45',1,'']]], + ['choice_5findex_5ft_5',['choice_index_t',['../namespacesbepp.html#a55be97e1f98cb33e38dfa96e8309179c',1,'sbepp']]], + ['clear_6',['clear',['../classsbepp_1_1detail_1_1flat__group__base.html#a2c73368a3be5a993f23185cd58320b11',1,'sbepp::detail::flat_group_base::clear()'],['../classsbepp_1_1detail_1_1nested__group__base.html#abcc1b411ab284958f0b08f49720d0cfa',1,'sbepp::detail::nested_group_base::clear()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ab5ad7952ef0fe9926a1d9491896e167e',1,'sbepp::detail::dynamic_array_ref::clear()']]], + ['cmake_7',['CMake',['../installation.html#installation-cmake',1,'']]], + ['cmake_20helpers_8',['CMake helpers',['../integration.html#autotoc_md6',1,'']]], + ['compares_20to_20reallogic_9',['How it compares to RealLogic',['../index.html#autotoc_md1',1,'']]], + ['compatibility_10',['Versioning and compatibility',['../integration.html#versioning',1,'']]], + ['compilation_11',['Manual schema compilation',['../integration.html#autotoc_md9',1,'']]], + ['compiled_20schema_12',['Using pre-compiled schema',['../integration.html#autotoc_md11',1,'']]], + ['compiler_13',['Using the schema compiler',['../sbeppc.html',1,'']]], + ['compiler_20features_14',['Compiler features',['../group__compiler-features.html',1,'']]], + ['compiling_20schema_20on_20the_20fly_15',['Compiling schema on-the-fly',['../integration.html#autotoc_md4',1,'']]], + ['composite_5fbase_16',['composite_base',['../classsbepp_1_1detail_1_1composite__base.html',1,'sbepp::detail']]], + ['composite_5ftraits_17',['composite_traits',['../classsbepp_1_1composite__traits.html',1,'sbepp']]], + ['composites_18',['Composites',['../representation.html#composites',1,'']]], + ['conan_20package_19',['Conan package',['../installation.html#installation-conan',1,'']]], + ['constant_20',['constant',['../namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530a617ac08757d38a5a7ed91c224f0e90a0',1,'sbepp']]], + ['constants_21',['Constants',['../representation.html#constants',1,'']]], + ['cursor_22',['cursor',['../classsbepp_1_1cursor.html',1,'sbepp::cursor< Byte >'],['../classsbepp_1_1cursor.html#a939a73d3177034f1504ad4bf323c18d1',1,'sbepp::cursor::cursor()=default'],['../classsbepp_1_1cursor.html#a1a02c8cd73c25c19372403426dfb7a1b',1,'sbepp::cursor::cursor(cursor< Byte2 > other) noexcept']]], + ['cursor_20based_20accessors_23',['Cursor based accessors',['../representation.html#cursor-accessors',1,'Cursor-based accessors'],['../examples.html#autotoc_md55',1,'Decoding a message using cursor-based accessors'],['../examples.html#autotoc_md51',1,'Encoding a message using cursor-based accessors']]], + ['cursor_5fbegin_24',['cursor_begin',['../classsbepp_1_1detail_1_1flat__group__base.html#a7fbeff07ceabcd7a3bb835920c13703c',1,'sbepp::detail::flat_group_base::cursor_begin()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ac0d4433d69efcc6a6e380522c8abb937',1,'sbepp::detail::nested_group_base::cursor_begin()']]], + ['cursor_5fend_25',['cursor_end',['../classsbepp_1_1detail_1_1flat__group__base.html#ab0865fc30c9182d0d7f4d9b28ed21e7a',1,'sbepp::detail::flat_group_base::cursor_end()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ab78dfd70257bda1410e61994a03fe356',1,'sbepp::detail::nested_group_base::cursor_end()']]], + ['cursor_5fiterator_26',['cursor_iterator',['../classsbepp_1_1detail_1_1flat__group__base.html#a40c3e55bf1da4101f6de8369e08e89f2',1,'sbepp::detail::flat_group_base::cursor_iterator'],['../classsbepp_1_1detail_1_1nested__group__base.html#a3b225b6f0f01b59ac75a7a907260b9bc',1,'sbepp::detail::nested_group_base::cursor_iterator']]], + ['cursor_5frange_27',['cursor_range',['../classsbepp_1_1detail_1_1flat__group__base.html#a86d36b6de40321f5a13bf9b15783b936',1,'sbepp::detail::flat_group_base::cursor_range()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ada4f73e140660ecf2c28b031f28a9305',1,'sbepp::detail::nested_group_base::cursor_range()']]], + ['cursor_5frange_5ft_28',['cursor_range_t',['../classsbepp_1_1detail_1_1flat__group__base.html#a64cf8a6a8703a2571c590916e85351de',1,'sbepp::detail::flat_group_base::cursor_range_t'],['../classsbepp_1_1detail_1_1nested__group__base.html#a434f06aca0d40628646a873f248a2d57',1,'sbepp::detail::nested_group_base::cursor_range_t']]], + ['cursor_5fsubrange_29',['cursor_subrange',['../classsbepp_1_1detail_1_1flat__group__base.html#a58ab082a4ed58b06015ace4679d09a80',1,'sbepp::detail::flat_group_base::cursor_subrange(cursor< Byte2 > &c, const size_type pos) const noexcept'],['../classsbepp_1_1detail_1_1flat__group__base.html#ae155f92736a0daf59846125bc138a0ed',1,'sbepp::detail::flat_group_base::cursor_subrange(cursor< Byte2 > &c, const size_type pos, const size_type count) const noexcept'],['../classsbepp_1_1detail_1_1nested__group__base.html#a2187a8faa4c16725a362848fe6788c3c',1,'sbepp::detail::nested_group_base::cursor_subrange(cursor< Byte2 > &c, const size_type pos) const noexcept'],['../classsbepp_1_1detail_1_1nested__group__base.html#ade03dcd0feb2d6eb432cb1d99bf797fe',1,'sbepp::detail::nested_group_base::cursor_subrange(cursor< Byte2 > &c, const size_type pos, const size_type count) const noexcept']]] +]; diff --git a/1.4.1/search/all_3.js b/1.4.1/search/all_3.js new file mode 100644 index 0000000..eb3a673 --- /dev/null +++ b/1.4.1/search/all_3.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['data_0',['data',['../classsbepp_1_1detail_1_1static__array__ref.html#aee2ad1343a3cb7125a0f709823d49ce2',1,'sbepp::detail::static_array_ref::data()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ab19b5f01fb457ad735e8eb94576f1f42',1,'sbepp::detail::dynamic_array_ref::data()']]], + ['data_20members_1',['Data members',['../representation.html#autotoc_md28',1,'']]], + ['data_5ftraits_2',['data_traits',['../classsbepp_1_1data__traits.html',1,'sbepp']]], + ['decoding_3',['Encoding vs. decoding',['../representation.html#autotoc_md21',1,'']]], + ['decoding_20a_20message_20using_20cursor_20based_20accessors_4',['Decoding a message using cursor-based accessors',['../examples.html#autotoc_md55',1,'']]], + ['decoding_20a_20message_20using_20normal_20accessors_5',['Decoding a message using normal accessors',['../examples.html#autotoc_md53',1,'']]], + ['decoding_20message_20header_6',['Decoding message header',['../examples.html#autotoc_md57',1,'']]], + ['default_5finit_7',['default_init',['../namespacesbepp.html#aa2d011e14996368bdea31360b2fa674e',1,'sbepp']]], + ['default_5finit_5ft_8',['default_init_t',['../structsbepp_1_1default__init__t.html',1,'sbepp']]], + ['deprecated_9',['deprecated',['../classsbepp_1_1type__traits.html#a699391a49a89fa0f2d291a56724d00ad',1,'sbepp::type_traits::deprecated()'],['../classsbepp_1_1enum__traits.html#a16266f7a6b0fae4eef9c69c701e398bc',1,'sbepp::enum_traits::deprecated()'],['../classsbepp_1_1enum__value__traits.html#abea5a711cb5fc4e3af9127f8553d8761',1,'sbepp::enum_value_traits::deprecated()'],['../classsbepp_1_1set__traits.html#a2e15d035e8101dde58265bf924837cda',1,'sbepp::set_traits::deprecated()'],['../classsbepp_1_1set__choice__traits.html#a9ac1bb04455e41922ea6443a9724acff',1,'sbepp::set_choice_traits::deprecated()'],['../classsbepp_1_1composite__traits.html#a91645f7df4b5d3820eacc3bf6f0158b2',1,'sbepp::composite_traits::deprecated()'],['../classsbepp_1_1message__traits.html#ad833e335b4743321663e7048411b5523',1,'sbepp::message_traits::deprecated()'],['../classsbepp_1_1field__traits.html#a863bbe73d390f81dd6e9ec11f11e3575',1,'sbepp::field_traits::deprecated()'],['../classsbepp_1_1group__traits.html#acffb1fe4444cf3908366585925f0be82',1,'sbepp::group_traits::deprecated()'],['../classsbepp_1_1data__traits.html#aa01969baded120c8b23e5c20c34c143b',1,'sbepp::data_traits::deprecated()']]], + ['deprecated_20list_10',['Deprecated List',['../deprecated.html',1,'']]], + ['description_11',['description',['../classsbepp_1_1type__traits.html#a62e403ded65bffffaaa50880ce37337d',1,'sbepp::type_traits::description()'],['../classsbepp_1_1schema__traits.html#a150aae33978ab248f3209058cd08cbe5',1,'sbepp::schema_traits::description()'],['../classsbepp_1_1enum__traits.html#a3fcfad02856d6f19af772f5a8bed9f29',1,'sbepp::enum_traits::description()'],['../classsbepp_1_1enum__value__traits.html#ac282af4bc41bd654ce7ca5dbeff52896',1,'sbepp::enum_value_traits::description()'],['../classsbepp_1_1set__traits.html#a14d925e0b8593e86cdc046c8cc412ca9',1,'sbepp::set_traits::description()'],['../classsbepp_1_1set__choice__traits.html#acdfa3553c5e091540f5c5cd327c7d4eb',1,'sbepp::set_choice_traits::description()'],['../classsbepp_1_1composite__traits.html#addcbb73179c08413f1eaf9beeec46846',1,'sbepp::composite_traits::description()'],['../classsbepp_1_1message__traits.html#ad4cea3aef6b41fdd4829d2732026049e',1,'sbepp::message_traits::description()'],['../classsbepp_1_1field__traits.html#a446e16ce49437a2cc3ad0fed3ae65e92',1,'sbepp::field_traits::description()'],['../classsbepp_1_1group__traits.html#a08e8c67eed286742270eb7c50d33a45c',1,'sbepp::group_traits::description()'],['../classsbepp_1_1data__traits.html#aef2b5cf5210d947ac3e69a58fda72b84',1,'sbepp::data_traits::description()']]], + ['difference_5ftype_12',['difference_type',['../classsbepp_1_1detail_1_1flat__group__base.html#adb75944a0e9c5c8ba3a0505fabcef734',1,'sbepp::detail::flat_group_base::difference_type'],['../classsbepp_1_1detail_1_1nested__group__base.html#a79302913738335822ae1cf37a98a9b8d',1,'sbepp::detail::nested_group_base::difference_type'],['../classsbepp_1_1detail_1_1static__array__ref.html#ae897b6ab0cd2f673d57b625c34734a74',1,'sbepp::detail::static_array_ref::difference_type'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a606fc50eef4c1567f50d162b2736cf1e',1,'sbepp::detail::dynamic_array_ref::difference_type']]], + ['dimension_5ftype_13',['dimension_type',['../classsbepp_1_1group__traits.html#a2c6e9d544f4ba7e1d18fb5eabab81606',1,'sbepp::group_traits']]], + ['dimension_5ftype_5ftag_14',['dimension_type_tag',['../classsbepp_1_1group__traits.html#a3aea72ccab0f1ffc9451fa06382463f6',1,'sbepp::group_traits']]], + ['dont_5fmove_15',['dont_move',['../namespacesbepp_1_1cursor__ops.html#a45f332328f49269fd0117bca732e7f36',1,'sbepp::cursor_ops']]], + ['double_5fopt_5ft_16',['double_opt_t',['../classsbepp_1_1double__opt__t.html',1,'sbepp']]], + ['double_5ft_17',['double_t',['../classsbepp_1_1double__t.html',1,'sbepp']]], + ['dynamic_5farray_5fref_18',['dynamic_array_ref',['../classsbepp_1_1detail_1_1dynamic__array__ref.html',1,'sbepp::detail']]] +]; diff --git a/1.4.1/search/all_4.js b/1.4.1/search/all_4.js new file mode 100644 index 0000000..0394caa --- /dev/null +++ b/1.4.1/search/all_4.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['element_5ftype_0',['element_type',['../classsbepp_1_1detail_1_1static__array__ref.html#a176748034417a904822fca0e9b7b9de5',1,'sbepp::detail::static_array_ref::element_type'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a804f54c1b44a6575009a6a3fdad78cd9',1,'sbepp::detail::dynamic_array_ref::element_type']]], + ['empty_1',['empty',['../classsbepp_1_1detail_1_1flat__group__base.html#a8969dd197ca4a509ce61028663f0c117',1,'sbepp::detail::flat_group_base::empty()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ac4446b7435b0b902c93b3a9d8bf23a97',1,'sbepp::detail::nested_group_base::empty()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a0d37b6688d547bb416e0d69b21062b11',1,'sbepp::detail::static_array_ref::empty()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ac948e0b6d31263575513a2083829930c',1,'sbepp::detail::dynamic_array_ref::empty()']]], + ['encode_20a_20message_2',['Estimating buffer size to encode a message',['../examples.html#example-size-bytes',1,'']]], + ['encoding_3',['Encoding',['../representation.html#encoding-message',1,'Encoding'],['../representation.html#autotoc_md25',1,'Encoding']]], + ['encoding_20a_20message_20using_20cursor_20based_20accessors_4',['Encoding a message using cursor-based accessors',['../examples.html#autotoc_md51',1,'']]], + ['encoding_20a_20message_20using_20normal_20accessors_5',['Encoding a message using normal accessors',['../examples.html#autotoc_md49',1,'']]], + ['encoding_20vs_20decoding_6',['Encoding vs. decoding',['../representation.html#autotoc_md21',1,'']]], + ['encoding_5ftype_7',['encoding_type',['../classsbepp_1_1enum__traits.html#a1abfb6d0e32cc25d55af2f7b220b5f29',1,'sbepp::enum_traits::encoding_type'],['../classsbepp_1_1set__traits.html#a89c209886332d1f27474c116dad2acd8',1,'sbepp::set_traits::encoding_type']]], + ['end_8',['end',['../classsbepp_1_1detail_1_1flat__group__base.html#a8e7b30b77663460d88f47c70b450ef32',1,'sbepp::detail::flat_group_base::end()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a1eea9c4883cd16d7d8a1cf95a126b5ec',1,'sbepp::detail::nested_group_base::end()'],['../classsbepp_1_1detail_1_1static__array__ref.html#abebb90c516c364c907bb12866c63d204',1,'sbepp::detail::static_array_ref::end()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ad4b1146091b6f8d85ab25381b501f31a',1,'sbepp::detail::dynamic_array_ref::end()']]], + ['endian_9',['endian',['../namespacesbepp.html#af318e06df8931dd69380221b420caec5',1,'sbepp']]], + ['entries_10',['Group entries',['../representation.html#autotoc_md26',1,'']]], + ['entry_5fbase_11',['entry_base',['../classsbepp_1_1detail_1_1entry__base.html',1,'sbepp::detail::entry_base< Byte, BlockLengthType >'],['../classsbepp_1_1detail_1_1entry__base.html#adab221bc15ccc3c6f7ba29d08a3285f5',1,'sbepp::detail::entry_base::entry_base()=default'],['../classsbepp_1_1detail_1_1entry__base.html#addf46369040007b8511ae531c1865138',1,'sbepp::detail::entry_base::entry_base(Byte *ptr, Byte *end, BlockLengthType block_length) noexcept'],['../classsbepp_1_1detail_1_1entry__base.html#ab00082644814254f9a62b430c5a3df3c',1,'sbepp::detail::entry_base::entry_base(Byte *ptr, const std::size_t size, const BlockLengthType block_length) noexcept'],['../classsbepp_1_1detail_1_1entry__base.html#a86dad2a468f1760a655cec07fd3e101b',1,'sbepp::detail::entry_base::entry_base(cursor< Byte2 > &c, Byte *end_ptr, BlockLengthType block_length) noexcept'],['../classsbepp_1_1detail_1_1entry__base.html#a86f9881d33a8021e5f4a828411c425ec',1,'sbepp::detail::entry_base::entry_base(const entry_base< Byte2, BlockLengthType > &other) noexcept']]], + ['entry_5ftype_12',['entry_type',['../classsbepp_1_1group__traits.html#aa496c3170693537cd48e56a808c5385c',1,'sbepp::group_traits']]], + ['enum_5fto_5fstring_13',['enum_to_string',['../namespacesbepp.html#a6b2d51af3f026b165fa40fe1d7ab19db',1,'sbepp']]], + ['enum_5ftraits_14',['enum_traits',['../classsbepp_1_1enum__traits.html',1,'sbepp']]], + ['enum_5fvalue_5ftraits_15',['enum_value_traits',['../classsbepp_1_1enum__value__traits.html',1,'sbepp']]], + ['enums_16',['Enums',['../representation.html#enums',1,'']]], + ['enums_20and_20sets_17',['Visiting enums and sets',['../visit-api.html#autotoc_md47',1,'']]], + ['eos_5fnull_18',['eos_null',['../namespacesbepp.html#a0ee177accf7d675a768848bb29e1512f',1,'sbepp']]], + ['erase_19',['erase',['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ab4d76c7225c80d6e5158a7c9873ae8eb',1,'sbepp::detail::dynamic_array_ref::erase(iterator pos) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a260941a7ccfcde104b5617538c447518',1,'sbepp::detail::dynamic_array_ref::erase(iterator first, iterator last) const noexcept']]], + ['estimating_20buffer_20size_20to_20encode_20a_20message_20',['Estimating buffer size to encode a message',['../examples.html#example-size-bytes',1,'']]], + ['examples_21',['Examples',['../examples.html',1,'']]] +]; diff --git a/1.4.1/search/all_5.js b/1.4.1/search/all_5.js new file mode 100644 index 0000000..05285b6 --- /dev/null +++ b/1.4.1/search/all_5.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['features_0',['Compiler features',['../group__compiler-features.html',1,'']]], + ['field_20accessors_1',['Field accessors',['../representation.html#accessors',1,'']]], + ['field_5fpresence_2',['field_presence',['../namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530',1,'sbepp']]], + ['field_5ftraits_3',['field_traits',['../classsbepp_1_1field__traits.html',1,'sbepp']]], + ['fill_4',['fill',['../classsbepp_1_1detail_1_1static__array__ref.html#acfc71a6121767e84db3c226770dab01a',1,'sbepp::detail::static_array_ref']]], + ['fill_5fgroup_5fheader_5',['fill_group_header',['../namespacesbepp.html#a7d29b37dfc83150ae34eaaf94dd4ba4c',1,'sbepp']]], + ['fill_5fmessage_5fheader_6',['fill_message_header',['../namespacesbepp.html#a3b5dd3446b423149a101530f056bee64',1,'sbepp']]], + ['fixed_20size_20arrays_7',['Fixed-size arrays',['../representation.html#autotoc_md31',1,'']]], + ['flat_5fgroup_5fbase_8',['flat_group_base',['../classsbepp_1_1detail_1_1flat__group__base.html',1,'sbepp::detail']]], + ['float_5fopt_5ft_9',['float_opt_t',['../classsbepp_1_1float__opt__t.html',1,'sbepp']]], + ['float_5ft_10',['float_t',['../classsbepp_1_1float__t.html',1,'sbepp']]], + ['fly_11',['Compiling schema on-the-fly',['../integration.html#autotoc_md4',1,'']]], + ['front_12',['front',['../classsbepp_1_1detail_1_1flat__group__base.html#a42b38f8a35ba8fb8167baa3b7807c459',1,'sbepp::detail::flat_group_base::front()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ab1dbdc9532ded2939a7fec25f7366e5d',1,'sbepp::detail::nested_group_base::front()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a286579c340a4b1e83aa172c8663ea4e4',1,'sbepp::detail::static_array_ref::front()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a5d8e4d81aeee24786ae87d13a53dc1f6',1,'sbepp::detail::dynamic_array_ref::front()']]] +]; diff --git a/1.4.1/search/all_6.js b/1.4.1/search/all_6.js new file mode 100644 index 0000000..5b92f92 --- /dev/null +++ b/1.4.1/search/all_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['get_5fheader_0',['get_header',['../namespacesbepp.html#a12bbc67580e3f4bb2a0299033f01818d',1,'sbepp']]], + ['group_20entries_1',['Group entries',['../representation.html#autotoc_md26',1,'']]], + ['group_5ftraits_2',['group_traits',['../classsbepp_1_1group__traits.html',1,'sbepp']]], + ['groups_3',['Groups',['../representation.html#groups',1,'']]] +]; diff --git a/1.4.1/search/all_7.js b/1.4.1/search/all_7.js new file mode 100644 index 0000000..44fb62b --- /dev/null +++ b/1.4.1/search/all_7.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['has_5fvalue_0',['has_value',['../classsbepp_1_1detail_1_1optional__base.html#ad2a0d48a5f8448e41a65838af24a4269',1,'sbepp::detail::optional_base']]], + ['header_1',['Decoding message header',['../examples.html#autotoc_md57',1,'']]], + ['header_5ftype_2',['header_type',['../classsbepp_1_1schema__traits.html#a9a53b31c788e848ac09e89fa4d2bf7c0',1,'sbepp::schema_traits']]], + ['header_5ftype_5ftag_3',['header_type_tag',['../classsbepp_1_1schema__traits.html#a2d45acd52784e4ec7bc89f440095bc76',1,'sbepp::schema_traits']]], + ['helpers_4',['CMake helpers',['../integration.html#autotoc_md6',1,'']]], + ['how_20it_20compares_20to_20reallogic_5',['How it compares to RealLogic',['../index.html#autotoc_md1',1,'']]], + ['how_20it_20works_6',['How it works',['../index.html#autotoc_md0',1,'']]] +]; diff --git a/1.4.1/search/all_8.js b/1.4.1/search/all_8.js new file mode 100644 index 0000000..823ae89 --- /dev/null +++ b/1.4.1/search/all_8.js @@ -0,0 +1,52 @@ +var searchData= +[ + ['id_0',['id',['../classsbepp_1_1schema__traits.html#ab0c877463fb89a80f912f4fd301d7eec',1,'sbepp::schema_traits::id()'],['../classsbepp_1_1message__traits.html#ac3fc3e5864d0733a719073dcc7b4996d',1,'sbepp::message_traits::id()'],['../classsbepp_1_1field__traits.html#a7eb96e6399ed63d7d09edf61b5debb1c',1,'sbepp::field_traits::id()'],['../classsbepp_1_1group__traits.html#ae167fe0be7f32af6a00c076519a1d85f',1,'sbepp::group_traits::id()'],['../classsbepp_1_1data__traits.html#aaff21bc3ecb9f86b7b7805d29cdd48f5',1,'sbepp::data_traits::id()']]], + ['in_5frange_1',['in_range',['../classsbepp_1_1detail_1_1required__base.html#aa80bf5f235a4a5dfc01e606ebb883cc3',1,'sbepp::detail::required_base::in_range()'],['../classsbepp_1_1detail_1_1optional__base.html#ab9eb32c4e62dbb05397486c7ac9fc445',1,'sbepp::detail::optional_base::in_range()']]], + ['index_2',['index',['../classsbepp_1_1set__choice__traits.html#a122210e74a293ac61719eb352763a00c',1,'sbepp::set_choice_traits']]], + ['init_3',['init',['../namespacesbepp_1_1cursor__ops.html#a5ea08b77415fb7c92bf38fe43f7556ac',1,'sbepp::cursor_ops']]], + ['init_5fconst_5fcursor_4',['init_const_cursor',['../namespacesbepp.html#a399a5ac768befed2dc73396364eaa0c3',1,'sbepp']]], + ['init_5fcursor_5',['init_cursor',['../namespacesbepp.html#a125f1fbb9faadde1515f7822a7b6420f',1,'sbepp']]], + ['init_5fdont_5fmove_6',['init_dont_move',['../namespacesbepp_1_1cursor__ops.html#ac01ae8f083e748df66ee66514e26cb98',1,'sbepp::cursor_ops']]], + ['insert_7',['insert',['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a3b88bd1349617074c0beb63f8101fe4d',1,'sbepp::detail::dynamic_array_ref::insert(iterator pos, const value_type value) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#aab4c4ae63150590096af465fb4092561',1,'sbepp::detail::dynamic_array_ref::insert(iterator pos, size_type count, const value_type value) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a2c7b02230aefe0868d499dd14c1e5ddb',1,'sbepp::detail::dynamic_array_ref::insert(iterator pos, InputIt first, InputIt last) const'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a171445816ec7beca2131820fe1a4a568',1,'sbepp::detail::dynamic_array_ref::insert(iterator pos, std::initializer_list< value_type > ilist) const noexcept']]], + ['installation_8',['Installation',['../installation.html',1,'']]], + ['int16_5fopt_5ft_9',['int16_opt_t',['../classsbepp_1_1int16__opt__t.html',1,'sbepp']]], + ['int16_5ft_10',['int16_t',['../classsbepp_1_1int16__t.html',1,'sbepp']]], + ['int32_5fopt_5ft_11',['int32_opt_t',['../classsbepp_1_1int32__opt__t.html',1,'sbepp']]], + ['int32_5ft_12',['int32_t',['../classsbepp_1_1int32__t.html',1,'sbepp']]], + ['int64_5fopt_5ft_13',['int64_opt_t',['../classsbepp_1_1int64__opt__t.html',1,'sbepp']]], + ['int64_5ft_14',['int64_t',['../classsbepp_1_1int64__t.html',1,'sbepp']]], + ['int8_5fopt_5ft_15',['int8_opt_t',['../classsbepp_1_1int8__opt__t.html',1,'sbepp']]], + ['int8_5ft_16',['int8_t',['../classsbepp_1_1int8__t.html',1,'sbepp']]], + ['integration_20into_20your_20project_17',['Integration into your project',['../integration.html',1,'']]], + ['into_20your_20project_18',['Integration into your project',['../integration.html',1,'']]], + ['is_5farray_5ftype_19',['is_array_type',['../namespacesbepp.html#af543fe4e16fb809febcbeb4f8888bdae',1,'sbepp']]], + ['is_5farray_5ftype_5fv_20',['is_array_type_v',['../namespacesbepp.html#a1c24c2579e75aa3d0f8aa3d5ccabe456',1,'sbepp']]], + ['is_5fcomposite_21',['is_composite',['../namespacesbepp.html#aff757cd0a709b464f626ae509e6e6cd3',1,'sbepp']]], + ['is_5fcomposite_5fv_22',['is_composite_v',['../namespacesbepp.html#a052275a8856aec04d0b1433232a2f9a2',1,'sbepp']]], + ['is_5fdata_23',['is_data',['../namespacesbepp.html#a5b8bb415061e959eb3a73e76af382e49',1,'sbepp']]], + ['is_5fdata_5fv_24',['is_data_v',['../namespacesbepp.html#ae3c9b91bd3b6adf9969dfb572b510a24',1,'sbepp']]], + ['is_5fenum_25',['is_enum',['../structsbepp_1_1is__enum.html',1,'sbepp']]], + ['is_5fenum_5fv_26',['is_enum_v',['../namespacesbepp.html#a261d44987027bd14f3a4ad1588cf1815',1,'sbepp']]], + ['is_5fflat_5fgroup_27',['is_flat_group',['../namespacesbepp.html#a19b7ab3bd5ff1a76a7d384e17f0a3cf7',1,'sbepp']]], + ['is_5fflat_5fgroup_5fv_28',['is_flat_group_v',['../namespacesbepp.html#a0e85c1f28d0a4792da99a7d520728d6b',1,'sbepp']]], + ['is_5fgroup_29',['is_group',['../namespacesbepp.html#a18ca877253ba8214e9fd1ab0dcafe691',1,'sbepp']]], + ['is_5fgroup_5fentry_30',['is_group_entry',['../namespacesbepp.html#ad66e5b64108fc65682c621ac8c5a471b',1,'sbepp']]], + ['is_5fgroup_5fv_31',['is_group_v',['../namespacesbepp.html#a9ef51bb840527f9e8dd92f611364301a',1,'sbepp']]], + ['is_5fmessage_32',['is_message',['../namespacesbepp.html#a6b570920b082c2bc629036cfeef4af57',1,'sbepp']]], + ['is_5fmessage_5fv_33',['is_message_v',['../namespacesbepp.html#abe6cd213ddfa41e39a2ec7ea540f62dc',1,'sbepp']]], + ['is_5fnested_5fgroup_34',['is_nested_group',['../namespacesbepp.html#a664c938df34175bff7de36e45843586e',1,'sbepp']]], + ['is_5fnested_5fgroup_5fv_35',['is_nested_group_v',['../namespacesbepp.html#ae12b3a8d700756a267b5b9bd97ae56ed',1,'sbepp']]], + ['is_5fnon_5farray_5ftype_36',['is_non_array_type',['../namespacesbepp.html#aa2eb4eb5e6a8df682c49fe7f59fe0fb3',1,'sbepp']]], + ['is_5fnon_5farray_5ftype_5fv_37',['is_non_array_type_v',['../namespacesbepp.html#a42ff955184242e2b19d1dfa422abd834',1,'sbepp']]], + ['is_5foptional_5ftype_38',['is_optional_type',['../namespacesbepp.html#a0d85db6739fbad1303022f741bc525ad',1,'sbepp']]], + ['is_5foptional_5ftype_5fv_39',['is_optional_type_v',['../namespacesbepp.html#ab0e51c934bf5a874f859d0f00f7e7c8a',1,'sbepp']]], + ['is_5frequired_5ftype_40',['is_required_type',['../namespacesbepp.html#a1595d120959dfb84aa0667436e3e628a',1,'sbepp']]], + ['is_5frequired_5ftype_5fv_41',['is_required_type_v',['../namespacesbepp.html#a08918c20bbce610dab6ae9e0c9a14cac',1,'sbepp']]], + ['is_5fset_42',['is_set',['../namespacesbepp.html#a9a993b21b185033d9dbc71b7452ee0ca',1,'sbepp']]], + ['is_5fset_5fv_43',['is_set_v',['../namespacesbepp.html#ad3f88b2d3b60123eb13d33e0cde002bd',1,'sbepp']]], + ['is_5ftype_44',['is_type',['../namespacesbepp.html#a9b69b91021cb0ec2e5cba1f1d105fc60',1,'sbepp']]], + ['is_5ftype_5fv_45',['is_type_v',['../namespacesbepp.html#a0b1ce1456ccf22894e9ba47c4becb046',1,'sbepp']]], + ['it_20compares_20to_20reallogic_46',['How it compares to RealLogic',['../index.html#autotoc_md1',1,'']]], + ['it_20works_47',['How it works',['../index.html#autotoc_md0',1,'']]], + ['iterator_48',['iterator',['../classsbepp_1_1detail_1_1flat__group__base.html#a2900e3f41ffa6b356287f026a3cc4634',1,'sbepp::detail::flat_group_base::iterator'],['../classsbepp_1_1detail_1_1nested__group__base.html#acaf482e9995f75fc0d66a2d1f4444f27',1,'sbepp::detail::nested_group_base::iterator'],['../classsbepp_1_1detail_1_1static__array__ref.html#a0577190cd9886056a8512fde116c3bd8',1,'sbepp::detail::static_array_ref::iterator'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a0e1063af74b2710ec9a18ae34832daaa',1,'sbepp::detail::dynamic_array_ref::iterator']]] +]; diff --git a/1.4.1/search/all_9.js b/1.4.1/search/all_9.js new file mode 100644 index 0000000..06cb0a3 --- /dev/null +++ b/1.4.1/search/all_9.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['length_0',['length',['../classsbepp_1_1type__traits.html#a87d46ff4037ce6b5ce1e8563369db121',1,'sbepp::type_traits']]], + ['length_5ft_1',['length_t',['../namespacesbepp.html#aba708f43d3386d2d1718a7011721d5d1',1,'sbepp']]], + ['length_5ftype_2',['length_type',['../classsbepp_1_1data__traits.html#ae824aeb50b8ac3b1676a32169271fb6c',1,'sbepp::data_traits']]], + ['length_5ftype_5ftag_3',['length_type_tag',['../classsbepp_1_1data__traits.html#aa86bdd1a0f628c740434a75a07ec73f7',1,'sbepp::data_traits']]], + ['license_4',['License',['../index.html#autotoc_md2',1,'']]], + ['list_5',['Deprecated List',['../deprecated.html',1,'']]], + ['list_6',['Traits list',['../group__traits-list.html',1,'']]], + ['little_7',['little',['../namespacesbepp.html#af318e06df8931dd69380221b420caec5aaae6635e044ac56046b2893a529b5114',1,'sbepp']]] +]; diff --git a/1.4.1/search/all_a.js b/1.4.1/search/all_a.js new file mode 100644 index 0000000..4ee1692 --- /dev/null +++ b/1.4.1/search/all_a.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['make_5fconst_5fview_0',['make_const_view',['../namespacesbepp.html#ae29503045a371b895af63f6ac6e0f3b9',1,'sbepp']]], + ['make_5fview_1',['make_view',['../namespacesbepp.html#a0dda436c46165f2419bb31e450e3b5b5',1,'sbepp']]], + ['manual_20schema_20compilation_2',['Manual schema compilation',['../integration.html#autotoc_md9',1,'']]], + ['max_5fsize_3',['max_size',['../classsbepp_1_1detail_1_1flat__group__base.html#ab6726c3198e40cca445331165a2d7330',1,'sbepp::detail::flat_group_base::max_size()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a2f5dfd804054c407c507a07b264ae96a',1,'sbepp::detail::nested_group_base::max_size()'],['../classsbepp_1_1detail_1_1static__array__ref.html#ae31484884a0b32d4a1f8a2fca7e75565',1,'sbepp::detail::static_array_ref::max_size()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a2121228d44f301dacbc7e3cab9197e57',1,'sbepp::detail::dynamic_array_ref::max_size()']]], + ['max_5fvalue_4',['max_value',['../classsbepp_1_1type__traits.html#abaa2f6f791cf5177511fb9e43c2d2fad',1,'sbepp::type_traits::max_value()'],['../classsbepp_1_1char__t.html#ae8c0ff6eaf78c1a6225073a31ef0d460',1,'sbepp::char_t::max_value()'],['../classsbepp_1_1char__opt__t.html#a301308f21261472648b1d97930e5bbb2',1,'sbepp::char_opt_t::max_value()'],['../classsbepp_1_1int8__t.html#aa71d022a6ce2f3cc1e92ef6eae81e6f1',1,'sbepp::int8_t::max_value()'],['../classsbepp_1_1int8__opt__t.html#a62f0d90604281961726ab8aeb4e8d13b',1,'sbepp::int8_opt_t::max_value()'],['../classsbepp_1_1uint8__t.html#a7679819f139b2f71c8b56113f5b1c9f1',1,'sbepp::uint8_t::max_value()'],['../classsbepp_1_1uint8__opt__t.html#a742b06e0948e9f268fd17847977e537e',1,'sbepp::uint8_opt_t::max_value()'],['../classsbepp_1_1int16__t.html#aa582a639abc634bcd7f90d56b7c71b20',1,'sbepp::int16_t::max_value()'],['../classsbepp_1_1int16__opt__t.html#a28b33cdc1201055d299d933b6ffcd665',1,'sbepp::int16_opt_t::max_value()'],['../classsbepp_1_1uint16__t.html#a3ce4054d2d8676b0c25ab53b624220cf',1,'sbepp::uint16_t::max_value()'],['../classsbepp_1_1uint16__opt__t.html#a2c4aa2a8bd863b02f02839ce66bbc59f',1,'sbepp::uint16_opt_t::max_value()'],['../classsbepp_1_1int32__t.html#adc1e240befe3215276633bd062674830',1,'sbepp::int32_t::max_value()'],['../classsbepp_1_1int32__opt__t.html#a56bee556a72c50b5994dd99be8382f91',1,'sbepp::int32_opt_t::max_value()'],['../classsbepp_1_1uint32__t.html#a0713469a6346a889a440b76b8e7bc41f',1,'sbepp::uint32_t::max_value()'],['../classsbepp_1_1uint32__opt__t.html#a5c58772211f52a2a5b93830a50191769',1,'sbepp::uint32_opt_t::max_value()'],['../classsbepp_1_1int64__t.html#a4b1ec26c02175c61b3eab1a236b31616',1,'sbepp::int64_t::max_value()'],['../classsbepp_1_1int64__opt__t.html#acb4bc2444f9b3fc56b0f27fc69c067d9',1,'sbepp::int64_opt_t::max_value()'],['../classsbepp_1_1uint64__t.html#a65b7ad3365c5af7fb2a796cdc4e55893',1,'sbepp::uint64_t::max_value()'],['../classsbepp_1_1uint64__opt__t.html#a06e1f6fe46542e654d2f2052d88f43cd',1,'sbepp::uint64_opt_t::max_value()'],['../classsbepp_1_1float__t.html#a15827ab10f89e6cec2982dd67c350377',1,'sbepp::float_t::max_value()'],['../classsbepp_1_1float__opt__t.html#ae8c2f4e159aea05c9a1dbb9fc6c47e33',1,'sbepp::float_opt_t::max_value()'],['../classsbepp_1_1double__t.html#a59a4bc55cd12c07dc0a77544c97fdb79',1,'sbepp::double_t::max_value()'],['../classsbepp_1_1double__opt__t.html#a08fefd0dee8502b5327231180d933edb',1,'sbepp::double_opt_t::max_value()']]], + ['member_5fid_5ft_5',['member_id_t',['../namespacesbepp.html#aa9dc204d8524610e7a756133d7538949',1,'sbepp']]], + ['members_6',['Data members',['../representation.html#autotoc_md28',1,'']]], + ['message_7',['Estimating buffer size to encode a message',['../examples.html#example-size-bytes',1,'']]], + ['message_20header_8',['Decoding message header',['../examples.html#autotoc_md57',1,'']]], + ['message_20using_20cursor_20based_20accessors_9',['Message using cursor based accessors',['../examples.html#autotoc_md55',1,'Decoding a message using cursor-based accessors'],['../examples.html#autotoc_md51',1,'Encoding a message using cursor-based accessors']]], + ['message_20using_20normal_20accessors_10',['Message using normal accessors',['../examples.html#autotoc_md53',1,'Decoding a message using normal accessors'],['../examples.html#autotoc_md49',1,'Encoding a message using normal accessors']]], + ['message_5fbase_11',['message_base',['../classsbepp_1_1detail_1_1message__base.html',1,'sbepp::detail']]], + ['message_5fid_5ft_12',['message_id_t',['../namespacesbepp.html#a8f0e0669b7e7f7c4b3849a0418225cb6',1,'sbepp']]], + ['message_5ftraits_13',['message_traits',['../classsbepp_1_1message__traits.html',1,'sbepp']]], + ['messages_14',['Messages',['../representation.html#messages',1,'']]], + ['min_5fvalue_15',['min_value',['../classsbepp_1_1type__traits.html#a1c5b2c2760446cf2b0a71e7f4fc2f273',1,'sbepp::type_traits::min_value()'],['../classsbepp_1_1char__t.html#abe61775abe283154e6c27b6ea08cfa04',1,'sbepp::char_t::min_value()'],['../classsbepp_1_1char__opt__t.html#a31a88d2a90ede7a65367e8019d3428da',1,'sbepp::char_opt_t::min_value()'],['../classsbepp_1_1int8__t.html#a00cb6de6cd2051fdb7a5f5b363386da9',1,'sbepp::int8_t::min_value()'],['../classsbepp_1_1int8__opt__t.html#ad4632577366cd998b86b3762b603acb1',1,'sbepp::int8_opt_t::min_value()'],['../classsbepp_1_1uint8__t.html#aa42321eb5738e634961557599e6f7e5d',1,'sbepp::uint8_t::min_value()'],['../classsbepp_1_1uint8__opt__t.html#a3bd711914b57b88886d147380c9d0b3b',1,'sbepp::uint8_opt_t::min_value()'],['../classsbepp_1_1int16__t.html#a138b8188ff40826c999d14699c125a17',1,'sbepp::int16_t::min_value()'],['../classsbepp_1_1int16__opt__t.html#acd38dd37100e52f27b63fcfb3f6eebc8',1,'sbepp::int16_opt_t::min_value()'],['../classsbepp_1_1uint16__t.html#a4a2ddb4abffd91f67d683eb701da9335',1,'sbepp::uint16_t::min_value()'],['../classsbepp_1_1uint16__opt__t.html#a2a1c50bc379359e4f880ca8bec89b913',1,'sbepp::uint16_opt_t::min_value()'],['../classsbepp_1_1int32__t.html#a583e1c8295421cffe17e5194dc28ff0c',1,'sbepp::int32_t::min_value()'],['../classsbepp_1_1int32__opt__t.html#a3c7b3a7d7efccf667fc0e7ef18d98524',1,'sbepp::int32_opt_t::min_value()'],['../classsbepp_1_1uint32__t.html#acbdb044818cda693933562332dd8671c',1,'sbepp::uint32_t::min_value()'],['../classsbepp_1_1uint32__opt__t.html#addef6c7a837cdbe162fc14a8d9c461f3',1,'sbepp::uint32_opt_t::min_value()'],['../classsbepp_1_1int64__t.html#a68e8259907f86ed558cbccea1908bb23',1,'sbepp::int64_t::min_value()'],['../classsbepp_1_1int64__opt__t.html#a78452e1e676eceef3c3dc1cfad27fb34',1,'sbepp::int64_opt_t::min_value()'],['../classsbepp_1_1uint64__t.html#ad4a76429f2610deda8236c4eb7b08d4d',1,'sbepp::uint64_t::min_value()'],['../classsbepp_1_1uint64__opt__t.html#ac56c9fd714d7115985cad8c579440c2f',1,'sbepp::uint64_opt_t::min_value()'],['../classsbepp_1_1float__t.html#aaed64a862bbeca974515624ff430da24',1,'sbepp::float_t::min_value()'],['../classsbepp_1_1float__opt__t.html#ae72c2d1bf216a8c549ec06497e4e999a',1,'sbepp::float_opt_t::min_value()'],['../classsbepp_1_1double__t.html#ad2896ddeeb9493393dd0d711e8300d6e',1,'sbepp::double_t::min_value()'],['../classsbepp_1_1double__opt__t.html#a32bc967ef4793fe2afd60e838c3900e9',1,'sbepp::double_opt_t::min_value()']]] +]; diff --git a/1.4.1/search/all_b.js b/1.4.1/search/all_b.js new file mode 100644 index 0000000..53b8035 --- /dev/null +++ b/1.4.1/search/all_b.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['name_0',['name',['../classsbepp_1_1type__traits.html#a91a111b461d9e6047a7e9687af0e31e9',1,'sbepp::type_traits::name()'],['../classsbepp_1_1enum__traits.html#a8c7abc5d82de24d9c04c7030da3c61c5',1,'sbepp::enum_traits::name()'],['../classsbepp_1_1enum__value__traits.html#aba278e3f1b4302ff7635f7f62e8dbe69',1,'sbepp::enum_value_traits::name()'],['../classsbepp_1_1set__traits.html#ad95851480bd973850d885ae154eed869',1,'sbepp::set_traits::name()'],['../classsbepp_1_1set__choice__traits.html#aacd9d1bdc4eb7fd24c0ba12bda58d009',1,'sbepp::set_choice_traits::name()'],['../classsbepp_1_1composite__traits.html#aa7e0ae6935557bdf01c572f5f26a6a66',1,'sbepp::composite_traits::name()'],['../classsbepp_1_1message__traits.html#a6a3bb549a842cae5a1a73fecd4953ec0',1,'sbepp::message_traits::name()'],['../classsbepp_1_1field__traits.html#a2fa8f1a89abec6a5b3d64d5f18f62d36',1,'sbepp::field_traits::name()'],['../classsbepp_1_1group__traits.html#ab093bbdffe658db01a2723a963f23dfe',1,'sbepp::group_traits::name()'],['../classsbepp_1_1data__traits.html#a40f356b6b324806a07819a5f16044517',1,'sbepp::data_traits::name()']]], + ['names_1',['Schema names',['../representation.html#autotoc_md17',1,'']]], + ['namespaces_2',['Namespaces',['../representation.html#autotoc_md15',1,'']]], + ['native_3',['native',['../namespacesbepp.html#af318e06df8931dd69380221b420caec5a8e5f3adee38c8fccc13c1f3be0143796',1,'sbepp']]], + ['nested_5fgroup_5fbase_4',['nested_group_base',['../classsbepp_1_1detail_1_1nested__group__base.html',1,'sbepp::detail']]], + ['none_5',['none',['../namespacesbepp.html#a0ee177accf7d675a768848bb29e1512fa334c4a4c42fdb79d7ebc3e73b517e6f8',1,'sbepp']]], + ['normal_20accessors_6',['Normal accessors',['../examples.html#autotoc_md53',1,'Decoding a message using normal accessors'],['../examples.html#autotoc_md49',1,'Encoding a message using normal accessors']]], + ['null_5fvalue_7',['null_value',['../classsbepp_1_1type__traits.html#ad1bc58f7d4f84fe7cb2d69383e9aa12d',1,'sbepp::type_traits::null_value()'],['../classsbepp_1_1char__opt__t.html#a41725a9e107b1e705956cfc118bfd7d5',1,'sbepp::char_opt_t::null_value()'],['../classsbepp_1_1int8__opt__t.html#acf771e03f92cf9ac63a420a1b7051c6e',1,'sbepp::int8_opt_t::null_value()'],['../classsbepp_1_1uint8__opt__t.html#a115cd24c24c57ff42802ffec6c1f26a7',1,'sbepp::uint8_opt_t::null_value()'],['../classsbepp_1_1int16__opt__t.html#a22c1123b6e1af1a1d12e627e2e0a8c71',1,'sbepp::int16_opt_t::null_value()'],['../classsbepp_1_1uint16__opt__t.html#a7211b08127b41552cee4ed931fa60af8',1,'sbepp::uint16_opt_t::null_value()'],['../classsbepp_1_1int32__opt__t.html#a06c746ca8e897adcce3ced1388c109e0',1,'sbepp::int32_opt_t::null_value()'],['../classsbepp_1_1uint32__opt__t.html#aac3078a00ad73e7d5110aad5e8e68a50',1,'sbepp::uint32_opt_t::null_value()'],['../classsbepp_1_1int64__opt__t.html#a7a9c32e68a140f6ae3f43c427754a283',1,'sbepp::int64_opt_t::null_value()'],['../classsbepp_1_1uint64__opt__t.html#ad81b79f64b26d5802fd5678dc2d0bdd0',1,'sbepp::uint64_opt_t::null_value()'],['../classsbepp_1_1float__opt__t.html#abc8557f3fa933ea98caf768598e7d94f',1,'sbepp::float_opt_t::null_value()'],['../classsbepp_1_1double__opt__t.html#a5164685c744584b2d78b826a129a28f5',1,'sbepp::double_opt_t::null_value()']]], + ['nullopt_8',['nullopt',['../namespacesbepp.html#a1ca10df8379b54c5c54a67841e3d8047',1,'sbepp']]], + ['nullopt_5ft_9',['nullopt_t',['../structsbepp_1_1nullopt__t.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/all_c.js b/1.4.1/search/all_c.js new file mode 100644 index 0000000..a6320a9 --- /dev/null +++ b/1.4.1/search/all_c.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['offset_0',['offset',['../classsbepp_1_1type__traits.html#adaaae157699ce2ab4935ffa9636f920c',1,'sbepp::type_traits::offset()'],['../classsbepp_1_1enum__traits.html#a2e5af8a5c738266dcd960e5e5812d683',1,'sbepp::enum_traits::offset()'],['../classsbepp_1_1set__traits.html#a625aa85df60e81fdfe50acd71b815a7c',1,'sbepp::set_traits::offset()'],['../classsbepp_1_1composite__traits.html#a0bf3c9004856a6d356a17cd949acd50c',1,'sbepp::composite_traits::offset()'],['../classsbepp_1_1field__traits.html#a8d28426c7e1d1b5428f65da3bd9445d9',1,'sbepp::field_traits::offset()']]], + ['offset_5ft_1',['offset_t',['../namespacesbepp.html#a8dafc5b7c26483f5e998bb7a4e87b406',1,'sbepp']]], + ['on_20the_20fly_2',['Compiling schema on-the-fly',['../integration.html#autotoc_md4',1,'']]], + ['operator_20bool_3',['operator bool',['../classsbepp_1_1detail_1_1optional__base.html#a38fedc762cfb05bb0abf25c1abde297a',1,'sbepp::detail::optional_base']]], + ['operator_21_3d_4',['operator!=',['../classsbepp_1_1detail_1_1bitset__base.html#aef491dc98b3eb25722425cbb95ba4744',1,'sbepp::detail::bitset_base::operator!='],['../classsbepp_1_1detail_1_1required__base.html#a5fd1549b7b95017eeb1a6a8886d42ab6',1,'sbepp::detail::required_base::operator!='],['../classsbepp_1_1detail_1_1optional__base.html#a29c60222da3b2f5ca2cd966c807f448b',1,'sbepp::detail::optional_base::operator!=']]], + ['operator_2a_5',['operator*',['../classsbepp_1_1detail_1_1bitset__base.html#a55c149fd634e7d1d72e451967f9a66af',1,'sbepp::detail::bitset_base::operator*() noexcept'],['../classsbepp_1_1detail_1_1bitset__base.html#a294da4f166672d95106d667af08f43f2',1,'sbepp::detail::bitset_base::operator*() const noexcept'],['../classsbepp_1_1detail_1_1required__base.html#a6615a8b9c2f761fa2051244ba52dac57',1,'sbepp::detail::required_base::operator*() noexcept'],['../classsbepp_1_1detail_1_1required__base.html#ac7da1724684e57848793d15a969dc11f',1,'sbepp::detail::required_base::operator*() const noexcept'],['../classsbepp_1_1detail_1_1optional__base.html#aed44c71edcb9d852a154cd63f7131cdc',1,'sbepp::detail::optional_base::operator*() noexcept'],['../classsbepp_1_1detail_1_1optional__base.html#ae6762b211da1f64d6c79b71dee8be69b',1,'sbepp::detail::optional_base::operator*() const noexcept']]], + ['operator_3c_6',['operator<',['../classsbepp_1_1detail_1_1required__base.html#ab2d043a2687ca5a711d53dc96a997fe9',1,'sbepp::detail::required_base::operator<'],['../classsbepp_1_1detail_1_1optional__base.html#a0321dd26a52eedb9b06600ef8dc9501d',1,'sbepp::detail::optional_base::operator<']]], + ['operator_3c_3d_7',['operator<=',['../classsbepp_1_1detail_1_1required__base.html#aca77edb88ade9fe2c734865861c00e3f',1,'sbepp::detail::required_base::operator<='],['../classsbepp_1_1detail_1_1optional__base.html#a31a03308d5620d572e5745c5e4892d29',1,'sbepp::detail::optional_base::operator<=']]], + ['operator_3c_3d_3e_8',['operator<=>',['../classsbepp_1_1detail_1_1required__base.html#ae603655d322cdbb43304a9c3fbd25e9c',1,'sbepp::detail::required_base::operator<=>'],['../classsbepp_1_1detail_1_1optional__base.html#af9693d0d4a0c754e6bb111c69333dfec',1,'sbepp::detail::optional_base::operator<=>']]], + ['operator_3d_9',['operator=',['../classsbepp_1_1cursor.html#ad40cf19febd9ea381ac2a572d9c9afa7',1,'sbepp::cursor']]], + ['operator_3d_3d_10',['operator==',['../classsbepp_1_1detail_1_1bitset__base.html#a2d338f6e17f7ac9a6c90f33d31802347',1,'sbepp::detail::bitset_base::operator=='],['../classsbepp_1_1detail_1_1required__base.html#a706e5340ab700f60a8b8c8280d437380',1,'sbepp::detail::required_base::operator=='],['../classsbepp_1_1detail_1_1optional__base.html#af29c05ce41885297bf1851c281b3bcfb',1,'sbepp::detail::optional_base::operator==']]], + ['operator_3e_11',['operator>',['../classsbepp_1_1detail_1_1required__base.html#a0a220179854bc5b4203fba5def9c7626',1,'sbepp::detail::required_base::operator>'],['../classsbepp_1_1detail_1_1optional__base.html#ae4bd79af6b3ededa779f5995d185b947',1,'sbepp::detail::optional_base::operator>']]], + ['operator_3e_3d_12',['operator>=',['../classsbepp_1_1detail_1_1required__base.html#a32116c6fa9d0ac885430c13d2c63725f',1,'sbepp::detail::required_base::operator>='],['../classsbepp_1_1detail_1_1optional__base.html#a5bdb6d4fd37359ab7d45624be2487053',1,'sbepp::detail::optional_base::operator>=']]], + ['operator_5b_5d_13',['operator[]',['../classsbepp_1_1detail_1_1flat__group__base.html#a7a631a0c841e3c1bb51a641a3e957238',1,'sbepp::detail::flat_group_base::operator[]()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a1ae586c96a448c07cf689c25b19fd029',1,'sbepp::detail::static_array_ref::operator[]()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a45cda3ca15223a4fabafa0cdb27506a5',1,'sbepp::detail::dynamic_array_ref::operator[]()']]], + ['optional_14',['optional',['../namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530ad57c24f3fe52d16e7169b912dd647f0d',1,'sbepp']]], + ['optional_20required_20types_15',['Optional/required types',['../representation.html#non-array-types',1,'']]], + ['optional_5fbase_16',['optional_base',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail::optional_base< T, Derived >'],['../classsbepp_1_1detail_1_1optional__base.html#a5584a3a3f8e074c4b3cb3d6fcfabda3b',1,'sbepp::detail::optional_base::optional_base()=default'],['../classsbepp_1_1detail_1_1optional__base.html#a448fd0118d8fefec3fe55cc00f918b02',1,'sbepp::detail::optional_base::optional_base(nullopt_t) noexcept'],['../classsbepp_1_1detail_1_1optional__base.html#ad0e8f5bf65d100e9a42a1834cd6623e0',1,'sbepp::detail::optional_base::optional_base(value_type val) noexcept']]], + ['optional_5fbase_3c_20char_2c_20char_5fopt_5ft_20_3e_17',['optional_base< char, char_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20double_2c_20double_5fopt_5ft_20_3e_18',['optional_base< double, double_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20float_2c_20float_5fopt_5ft_20_3e_19',['optional_base< float, float_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3aint16_5ft_2c_20int16_5fopt_5ft_20_3e_20',['optional_base< std::int16_t, int16_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3aint32_5ft_2c_20int32_5fopt_5ft_20_3e_21',['optional_base< std::int32_t, int32_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3aint64_5ft_2c_20int64_5fopt_5ft_20_3e_22',['optional_base< std::int64_t, int64_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3aint8_5ft_2c_20int8_5fopt_5ft_20_3e_23',['optional_base< std::int8_t, int8_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3auint16_5ft_2c_20uint16_5fopt_5ft_20_3e_24',['optional_base< std::uint16_t, uint16_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3auint32_5ft_2c_20uint32_5fopt_5ft_20_3e_25',['optional_base< std::uint32_t, uint32_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3auint64_5ft_2c_20uint64_5fopt_5ft_20_3e_26',['optional_base< std::uint64_t, uint64_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3auint8_5ft_2c_20uint8_5fopt_5ft_20_3e_27',['optional_base< std::uint8_t, uint8_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['overview_28',['Overview',['../index.html',1,'']]] +]; diff --git a/1.4.1/search/all_d.js b/1.4.1/search/all_d.js new file mode 100644 index 0000000..a78f007 --- /dev/null +++ b/1.4.1/search/all_d.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['package_0',['Conan package',['../installation.html#installation-conan',1,'']]], + ['package_1',['package',['../classsbepp_1_1schema__traits.html#a566f5f3e68c427081010e3f7050c146e',1,'sbepp::schema_traits']]], + ['parent_20views_2',['Visiting parent views',['../visit-api.html#autotoc_md43',1,'']]], + ['pointer_3',['pointer',['../classsbepp_1_1detail_1_1static__array__ref.html#aa775677cb577b70b84b0f401ad3c1563',1,'sbepp::detail::static_array_ref::pointer'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a3413afbfd1448e9cd5d05df3212ee9fd',1,'sbepp::detail::dynamic_array_ref::pointer'],['../classsbepp_1_1cursor.html#ac20d80344ad78a32aeea203936ce32c7',1,'sbepp::cursor::pointer() noexcept'],['../classsbepp_1_1cursor.html#a14a745ce53b7345b42ae67b4514a504e',1,'sbepp::cursor::pointer() const noexcept']]], + ['pop_5fback_4',['pop_back',['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a61607728d5839f4ed2b8e5090916e148',1,'sbepp::detail::dynamic_array_ref']]], + ['pre_20compiled_20schema_5',['Using pre-compiled schema',['../integration.html#autotoc_md11',1,'']]], + ['presence_6',['presence',['../classsbepp_1_1type__traits.html#aba778ee7c8d57f7c4ac2681f9f203846',1,'sbepp::type_traits::presence()'],['../classsbepp_1_1field__traits.html#add48af99ed7dba0b5e3ca3a210f513e0',1,'sbepp::field_traits::presence()']]], + ['primitive_5ftype_7',['primitive_type',['../classsbepp_1_1type__traits.html#a87d3a1110947f28989fd308e5971e88b',1,'sbepp::type_traits']]], + ['primitives_8',['Stringification primitives',['../stringification.html',1,'']]], + ['project_9',['Integration into your project',['../integration.html',1,'']]], + ['push_5fback_10',['push_back',['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a34a7c75fb59e285879bd953c98c7565e',1,'sbepp::detail::dynamic_array_ref']]] +]; diff --git a/1.4.1/search/all_e.js b/1.4.1/search/all_e.js new file mode 100644 index 0000000..04f80f2 --- /dev/null +++ b/1.4.1/search/all_e.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['raw_0',['raw',['../classsbepp_1_1detail_1_1static__array__ref.html#a5dd21b7f6ea885f1a707ee3da056be14',1,'sbepp::detail::static_array_ref::raw()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a6e11538c6bd06b459ff444685889ef01',1,'sbepp::detail::dynamic_array_ref::raw()']]], + ['rbegin_1',['rbegin',['../classsbepp_1_1detail_1_1static__array__ref.html#addc12c2bc16cb23b01600c3e57d35ac4',1,'sbepp::detail::static_array_ref::rbegin()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#acb59720cd29ea9ad42732b3e49fb7fdd',1,'sbepp::detail::dynamic_array_ref::rbegin()']]], + ['reallogic_2',['How it compares to RealLogic',['../index.html#autotoc_md1',1,'']]], + ['reference_3',['reference',['../classsbepp_1_1detail_1_1flat__group__base.html#af9193142f2768c49691f7f53a0cd9880',1,'sbepp::detail::flat_group_base::reference'],['../classsbepp_1_1detail_1_1nested__group__base.html#a3f982f28fc8cc78c6f90f45c62187fd1',1,'sbepp::detail::nested_group_base::reference'],['../classsbepp_1_1detail_1_1static__array__ref.html#a69e247ae253fa7eabf6e4ab9a172f868',1,'sbepp::detail::static_array_ref::reference'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#afa5a54e3b16075a9ba43c4cb647b7693',1,'sbepp::detail::dynamic_array_ref::reference']]], + ['rend_4',['rend',['../classsbepp_1_1detail_1_1static__array__ref.html#a08129031f89bb2966ed9c9bac94cd12c',1,'sbepp::detail::static_array_ref::rend()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a1f7852f3d0e1d562c399260497637abc',1,'sbepp::detail::dynamic_array_ref::rend()']]], + ['representation_5',['Schema representation',['../representation.html',1,'']]], + ['representation_20types_20vs_20traits_6',['Representation types vs. traits',['../representation.html#autotoc_md13',1,'']]], + ['required_7',['required',['../namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530aac67ede5a84eb5a1add7ff4440e9a485',1,'sbepp']]], + ['required_20types_8',['Optional/required types',['../representation.html#non-array-types',1,'']]], + ['required_5fbase_9',['required_base',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail::required_base< T, Derived >'],['../classsbepp_1_1detail_1_1required__base.html#a8b1e243938cfea876b2ae1ef49c52aee',1,'sbepp::detail::required_base::required_base()=default'],['../classsbepp_1_1detail_1_1required__base.html#ae72fc28c0a16383db0c88522e0de14df',1,'sbepp::detail::required_base::required_base(value_type val) noexcept']]], + ['required_5fbase_3c_20char_2c_20char_5ft_20_3e_10',['required_base< char, char_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20double_2c_20double_5ft_20_3e_11',['required_base< double, double_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20float_2c_20float_5ft_20_3e_12',['required_base< float, float_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3aint16_5ft_2c_20int16_5ft_20_3e_13',['required_base< std::int16_t, int16_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3aint32_5ft_2c_20int32_5ft_20_3e_14',['required_base< std::int32_t, int32_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3aint64_5ft_2c_20int64_5ft_20_3e_15',['required_base< std::int64_t, int64_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3aint8_5ft_2c_20int8_5ft_20_3e_16',['required_base< std::int8_t, int8_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3auint16_5ft_2c_20uint16_5ft_20_3e_17',['required_base< std::uint16_t, uint16_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3auint32_5ft_2c_20uint32_5ft_20_3e_18',['required_base< std::uint32_t, uint32_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3auint64_5ft_2c_20uint64_5ft_20_3e_19',['required_base< std::uint64_t, uint64_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3auint8_5ft_2c_20uint8_5ft_20_3e_20',['required_base< std::uint8_t, uint8_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['resize_21',['resize',['../classsbepp_1_1detail_1_1flat__group__base.html#aab30c6ced657b372c6dff349953df862',1,'sbepp::detail::flat_group_base::resize()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a94d67364c1142558f4646b57f2c14aac',1,'sbepp::detail::nested_group_base::resize()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a45d0b3c8fa6597bf6c3c75d9a1904c25',1,'sbepp::detail::dynamic_array_ref::resize(size_type count) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#acbf9ea93f6c0d94e2fe077c04b25c137',1,'sbepp::detail::dynamic_array_ref::resize(size_type count, value_type value) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a3308cbc7befca03a7fd13d726c46ba57',1,'sbepp::detail::dynamic_array_ref::resize(size_type count, sbepp::default_init_t) const noexcept']]], + ['reverse_5fiterator_22',['reverse_iterator',['../classsbepp_1_1detail_1_1static__array__ref.html#a7a19d2f6a6b3b2256275e7aa13eb5cd0',1,'sbepp::detail::static_array_ref::reverse_iterator'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a1318d664c45a0249cb895d346f524d0e',1,'sbepp::detail::dynamic_array_ref::reverse_iterator']]] +]; diff --git a/1.4.1/search/all_f.js b/1.4.1/search/all_f.js new file mode 100644 index 0000000..794a5d0 --- /dev/null +++ b/1.4.1/search/all_f.js @@ -0,0 +1,66 @@ +var searchData= +[ + ['safety_20checks_0',['Safety checks',['../representation.html#autotoc_md20',1,'']]], + ['sbe_5fsize_1',['sbe_size',['../classsbepp_1_1detail_1_1flat__group__base.html#a2d8dc166146702d728af7f12ff8cecb7',1,'sbepp::detail::flat_group_base::sbe_size()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a7a5dc3e92cefe05d090c077c2dc21d2d',1,'sbepp::detail::nested_group_base::sbe_size()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a07c3fc7ac3fe8f8900d30d6905f3ebb9',1,'sbepp::detail::dynamic_array_ref::sbe_size()']]], + ['sbe_5fsize_5ftype_2',['sbe_size_type',['../classsbepp_1_1detail_1_1flat__group__base.html#a6a98e13ea929370e8de257a2d61e7eea',1,'sbepp::detail::flat_group_base::sbe_size_type'],['../classsbepp_1_1detail_1_1nested__group__base.html#af558ae54f86ff03c5238de86cfb28d49',1,'sbepp::detail::nested_group_base::sbe_size_type'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#af701043211176147f5bdd947535bb0bd',1,'sbepp::detail::dynamic_array_ref::sbe_size_type']]], + ['sbepp_3',['sbepp',['../namespacesbepp.html',1,'']]], + ['sbepp_2ehpp_4',['sbepp.hpp',['../sbepp_8hpp.html',1,'']]], + ['sbepp_3a_3aarray_5ftype_5',['array_type',['../conceptsbepp_1_1array__type.html',1,'sbepp']]], + ['sbepp_3a_3acomposite_6',['composite',['../conceptsbepp_1_1composite.html',1,'sbepp']]], + ['sbepp_3a_3acursor_5fops_7',['cursor_ops',['../namespacesbepp_1_1cursor__ops.html',1,'sbepp']]], + ['sbepp_3a_3adata_8',['data',['../conceptsbepp_1_1data.html',1,'sbepp']]], + ['sbepp_3a_3adetail_9',['detail',['../namespacesbepp_1_1detail.html',1,'sbepp']]], + ['sbepp_3a_3aenumeration_10',['enumeration',['../conceptsbepp_1_1enumeration.html',1,'sbepp']]], + ['sbepp_3a_3aflat_5fgroup_11',['flat_group',['../conceptsbepp_1_1flat__group.html',1,'sbepp']]], + ['sbepp_3a_3agroup_12',['group',['../conceptsbepp_1_1group.html',1,'sbepp']]], + ['sbepp_3a_3amessage_13',['message',['../conceptsbepp_1_1message.html',1,'sbepp']]], + ['sbepp_3a_3anested_5fgroup_14',['nested_group',['../conceptsbepp_1_1nested__group.html',1,'sbepp']]], + ['sbepp_3a_3anon_5farray_5ftype_15',['non_array_type',['../conceptsbepp_1_1non__array__type.html',1,'sbepp']]], + ['sbepp_3a_3aoptional_5ftype_16',['optional_type',['../conceptsbepp_1_1optional__type.html',1,'sbepp']]], + ['sbepp_3a_3arequired_5ftype_17',['required_type',['../conceptsbepp_1_1required__type.html',1,'sbepp']]], + ['sbepp_3a_3aset_18',['set',['../conceptsbepp_1_1set.html',1,'sbepp']]], + ['sbepp_3a_3atype_19',['type',['../conceptsbepp_1_1type.html',1,'sbepp']]], + ['sbepp_5fassert_5fhandler_20',['SBEPP_ASSERT_HANDLER',['../sbepp_8hpp.html#ae9a30a1ed9195270dc6dba235182ba34',1,'sbepp.hpp']]], + ['sbepp_5fbyte_5forder_21',['SBEPP_BYTE_ORDER',['../sbepp_8hpp.html#a9558ac0bbc3e7b40c3813566f4e3510e',1,'sbepp.hpp']]], + ['sbepp_5fdisable_5fasserts_22',['SBEPP_DISABLE_ASSERTS',['../sbepp_8hpp.html#a6a9a3e2c289e8eb83bd1937c0a54b14e',1,'sbepp.hpp']]], + ['sbepp_5fenable_5fasserts_5fwith_5fhandler_23',['SBEPP_ENABLE_ASSERTS_WITH_HANDLER',['../sbepp_8hpp.html#a0279553eb51c2609c3273da80e021278',1,'sbepp.hpp']]], + ['sbepp_5fhas_5fbitcast_24',['SBEPP_HAS_BITCAST',['../group__compiler-features.html#gaef2ac7b655d882f9b655a783cd20c9e8',1,'sbepp.hpp']]], + ['sbepp_5fhas_5fbyteswap_25',['SBEPP_HAS_BYTESWAP',['../group__compiler-features.html#ga3aa8a99c944b6084926af3e0f2ac11c4',1,'sbepp.hpp']]], + ['sbepp_5fhas_5fconstexpr_5faccessors_26',['SBEPP_HAS_CONSTEXPR_ACCESSORS',['../group__compiler-features.html#gadb4703db06d7882322d72f1b8b213a05',1,'sbepp.hpp']]], + ['sbepp_5fhas_5fconstexpr_5falgorithms_27',['SBEPP_HAS_CONSTEXPR_ALGORITHMS',['../group__compiler-features.html#gaa48282f26ded40b3c3824e08f79caea3',1,'sbepp.hpp']]], + ['sbepp_5fhas_5fendian_28',['SBEPP_HAS_ENDIAN',['../group__compiler-features.html#ga78585d1198487e6ba5a99e60fd422271',1,'sbepp.hpp']]], + ['sbepp_5fhas_5fis_5fconstant_5fevaluated_29',['SBEPP_HAS_IS_CONSTANT_EVALUATED',['../group__compiler-features.html#gaf02e9d1747df137b59c17f9636b79749',1,'sbepp.hpp']]], + ['sbepp_5fhas_5franges_30',['SBEPP_HAS_RANGES',['../group__compiler-features.html#ga20ab97b68cf5613024f3d95893a7a453',1,'sbepp.hpp']]], + ['sbepp_5fhas_5fthree_5fway_5fcomparison_31',['SBEPP_HAS_THREE_WAY_COMPARISON',['../group__compiler-features.html#ga8143ff71e5eed9a6f297f71a4b40855f',1,'sbepp.hpp']]], + ['schema_32',['Using pre-compiled schema',['../integration.html#autotoc_md11',1,'']]], + ['schema_20compilation_33',['Manual schema compilation',['../integration.html#autotoc_md9',1,'']]], + ['schema_20compiler_34',['Using the schema compiler',['../sbeppc.html',1,'']]], + ['schema_20names_35',['Schema names',['../representation.html#autotoc_md17',1,'']]], + ['schema_20on_20the_20fly_36',['Compiling schema on-the-fly',['../integration.html#autotoc_md4',1,'']]], + ['schema_20representation_37',['Schema representation',['../representation.html',1,'']]], + ['schema_5fid_5ft_38',['schema_id_t',['../namespacesbepp.html#ad770bcda6122b136d640fadfb0242062',1,'sbepp']]], + ['schema_5ftag_39',['schema_tag',['../classsbepp_1_1message__traits.html#a823e30f08d988fb6ac0b3e9730d8aa93',1,'sbepp::message_traits']]], + ['schema_5ftraits_40',['schema_traits',['../classsbepp_1_1schema__traits.html',1,'sbepp']]], + ['semantic_5ftype_41',['semantic_type',['../classsbepp_1_1type__traits.html#ac9b0cf4d50d50d1bc9882e465c7d1d6d',1,'sbepp::type_traits::semantic_type()'],['../classsbepp_1_1composite__traits.html#a2a059a30076e25c6cae2ea3dbf7310df',1,'sbepp::composite_traits::semantic_type()'],['../classsbepp_1_1message__traits.html#a779d6e4596364c17b400b13ed4deee2f',1,'sbepp::message_traits::semantic_type()'],['../classsbepp_1_1group__traits.html#a9bfb7aca9d1936054fa76e5456e4f6e5',1,'sbepp::group_traits::semantic_type()']]], + ['semantic_5fversion_42',['semantic_version',['../classsbepp_1_1schema__traits.html#a7d5cd7a46358ff4b032ea76a621836ec',1,'sbepp::schema_traits']]], + ['semantics_43',['Semantics',['../representation.html#autotoc_md19',1,'']]], + ['set_5fchoice_5ftraits_44',['set_choice_traits',['../classsbepp_1_1set__choice__traits.html',1,'sbepp']]], + ['set_5ftraits_45',['set_traits',['../classsbepp_1_1set__traits.html',1,'sbepp']]], + ['sets_46',['Sets',['../representation.html#sets',1,'Sets'],['../visit-api.html#autotoc_md47',1,'Visiting enums and sets']]], + ['since_5fversion_47',['since_version',['../classsbepp_1_1type__traits.html#adfe562c000ff65a0b7df47901f7de537',1,'sbepp::type_traits::since_version()'],['../classsbepp_1_1enum__traits.html#afbda2d5d27274f24a615aca65f6d674c',1,'sbepp::enum_traits::since_version()'],['../classsbepp_1_1enum__value__traits.html#a90fd98379e5afbb8eef3c88eef6395ae',1,'sbepp::enum_value_traits::since_version()'],['../classsbepp_1_1set__traits.html#afaea817cbf5995b7789805d86a9ba7b3',1,'sbepp::set_traits::since_version()'],['../classsbepp_1_1set__choice__traits.html#ae58862fd15c9bb2ff4de6a5a6e1fc01a',1,'sbepp::set_choice_traits::since_version()'],['../classsbepp_1_1composite__traits.html#a38110a381d5016be4da3c017634262cf',1,'sbepp::composite_traits::since_version()'],['../classsbepp_1_1message__traits.html#a6b44d38daa34a4881ac909af215a6bac',1,'sbepp::message_traits::since_version()'],['../classsbepp_1_1field__traits.html#a79ec220daf5af5ba4330efd8164b6f72',1,'sbepp::field_traits::since_version()'],['../classsbepp_1_1group__traits.html#a853ac0e8b6030f1d0f874b1030f584bb',1,'sbepp::group_traits::since_version()'],['../classsbepp_1_1data__traits.html#a9aec830c560d44ff877c7e0f93cab65e',1,'sbepp::data_traits::since_version()']]], + ['single_48',['single',['../namespacesbepp.html#a0ee177accf7d675a768848bb29e1512fadd5c07036f2975ff4bce568b6511d3bc',1,'sbepp']]], + ['size_49',['size',['../structsbepp_1_1size__bytes__checked__result.html#aac927165dbd01e54d4f83e3a9be39266',1,'sbepp::size_bytes_checked_result::size'],['../classsbepp_1_1detail_1_1flat__group__base.html#a7e1b0794803482202b68663cb180d2e6',1,'sbepp::detail::flat_group_base::size()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a0d7837dce6459b57de4042364c8c5160',1,'sbepp::detail::nested_group_base::size()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a5d2d9f298405582da167e8648a981857',1,'sbepp::detail::static_array_ref::size()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ae1c72d67c5fdc3d34fae96e5bb9637b2',1,'sbepp::detail::dynamic_array_ref::size()']]], + ['size_20arrays_50',['Fixed-size arrays',['../representation.html#autotoc_md31',1,'']]], + ['size_20to_20encode_20a_20message_51',['Estimating buffer size to encode a message',['../examples.html#example-size-bytes',1,'']]], + ['size_5fbytes_52',['size_bytes',['../classsbepp_1_1composite__traits.html#aa3d60fcd7d882b6b6386593d964ec2ad',1,'sbepp::composite_traits::size_bytes()'],['../classsbepp_1_1message__traits.html#a211cee40215d5b7e153047320536cd6c',1,'sbepp::message_traits::size_bytes()'],['../classsbepp_1_1group__traits.html#a036cb645e639a171a206fe3a61e34c8c',1,'sbepp::group_traits::size_bytes()'],['../classsbepp_1_1data__traits.html#af995f36156aa36d168c31355a5e19b41',1,'sbepp::data_traits::size_bytes()'],['../namespacesbepp.html#a9346fd507c2d3760ac40032180d1a7a6',1,'sbepp::size_bytes(T v) noexcept'],['../namespacesbepp.html#a822c5047d62cddfb04c5ab2148ee9391',1,'sbepp::size_bytes(T v, cursor< Byte > c) noexcept']]], + ['size_5fbytes_5fchecked_53',['size_bytes_checked',['../namespacesbepp.html#abd9c1efb3c96d6fa71d1156811b47fa4',1,'sbepp']]], + ['size_5fbytes_5fchecked_5fresult_54',['size_bytes_checked_result',['../structsbepp_1_1size__bytes__checked__result.html',1,'sbepp']]], + ['size_5ftype_55',['size_type',['../classsbepp_1_1detail_1_1flat__group__base.html#ae400d7c2364f6dce798259374841eb2e',1,'sbepp::detail::flat_group_base::size_type'],['../classsbepp_1_1detail_1_1nested__group__base.html#a5c7d690ff890d61ea56a0207ea02eccb',1,'sbepp::detail::nested_group_base::size_type'],['../classsbepp_1_1detail_1_1static__array__ref.html#abb383b2485f0056dc2da7c7abfe25348',1,'sbepp::detail::static_array_ref::size_type'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#af495aef49ae6275054220d3591fc3846',1,'sbepp::detail::dynamic_array_ref::size_type']]], + ['skip_56',['skip',['../namespacesbepp_1_1cursor__ops.html#a1ba1e2668d8e1886dfe03a4f5ddc1eea',1,'sbepp::cursor_ops']]], + ['static_5farray_5fref_57',['static_array_ref',['../classsbepp_1_1detail_1_1static__array__ref.html',1,'sbepp::detail']]], + ['stringification_58',['Stringification',['../examples.html#stringification-example',1,'']]], + ['stringification_20primitives_59',['Stringification primitives',['../stringification.html',1,'']]], + ['strings_60',['Strings',['../representation.html#autotoc_md29',1,'Strings'],['../representation.html#autotoc_md32',1,'Strings']]], + ['strlen_61',['strlen',['../classsbepp_1_1detail_1_1static__array__ref.html#a1e2ded095d44aead9e9d3bb51b19f24f',1,'sbepp::detail::static_array_ref']]], + ['strlen_5fr_62',['strlen_r',['../classsbepp_1_1detail_1_1static__array__ref.html#aba31d1b71c89e974a642de24de7c43bb',1,'sbepp::detail::static_array_ref']]] +]; diff --git a/1.4.1/search/classes_0.js b/1.4.1/search/classes_0.js new file mode 100644 index 0000000..45878d3 --- /dev/null +++ b/1.4.1/search/classes_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['bitset_5fbase_0',['bitset_base',['../classsbepp_1_1detail_1_1bitset__base.html',1,'sbepp::detail']]], + ['byte_5frange_1',['byte_range',['../classsbepp_1_1detail_1_1byte__range.html',1,'sbepp::detail']]], + ['byte_5ftype_2',['byte_type',['../structsbepp_1_1byte__type.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_1.js b/1.4.1/search/classes_1.js new file mode 100644 index 0000000..1f47c54 --- /dev/null +++ b/1.4.1/search/classes_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['char_5fopt_5ft_0',['char_opt_t',['../classsbepp_1_1char__opt__t.html',1,'sbepp']]], + ['char_5ft_1',['char_t',['../classsbepp_1_1char__t.html',1,'sbepp']]], + ['composite_5fbase_2',['composite_base',['../classsbepp_1_1detail_1_1composite__base.html',1,'sbepp::detail']]], + ['composite_5ftraits_3',['composite_traits',['../classsbepp_1_1composite__traits.html',1,'sbepp']]], + ['cursor_4',['cursor',['../classsbepp_1_1cursor.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_2.js b/1.4.1/search/classes_2.js new file mode 100644 index 0000000..ee4b0cc --- /dev/null +++ b/1.4.1/search/classes_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['data_5ftraits_0',['data_traits',['../classsbepp_1_1data__traits.html',1,'sbepp']]], + ['default_5finit_5ft_1',['default_init_t',['../structsbepp_1_1default__init__t.html',1,'sbepp']]], + ['double_5fopt_5ft_2',['double_opt_t',['../classsbepp_1_1double__opt__t.html',1,'sbepp']]], + ['double_5ft_3',['double_t',['../classsbepp_1_1double__t.html',1,'sbepp']]], + ['dynamic_5farray_5fref_4',['dynamic_array_ref',['../classsbepp_1_1detail_1_1dynamic__array__ref.html',1,'sbepp::detail']]] +]; diff --git a/1.4.1/search/classes_3.js b/1.4.1/search/classes_3.js new file mode 100644 index 0000000..67a75ca --- /dev/null +++ b/1.4.1/search/classes_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['entry_5fbase_0',['entry_base',['../classsbepp_1_1detail_1_1entry__base.html',1,'sbepp::detail']]], + ['enum_5ftraits_1',['enum_traits',['../classsbepp_1_1enum__traits.html',1,'sbepp']]], + ['enum_5fvalue_5ftraits_2',['enum_value_traits',['../classsbepp_1_1enum__value__traits.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_4.js b/1.4.1/search/classes_4.js new file mode 100644 index 0000000..859fea7 --- /dev/null +++ b/1.4.1/search/classes_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['field_5ftraits_0',['field_traits',['../classsbepp_1_1field__traits.html',1,'sbepp']]], + ['flat_5fgroup_5fbase_1',['flat_group_base',['../classsbepp_1_1detail_1_1flat__group__base.html',1,'sbepp::detail']]], + ['float_5fopt_5ft_2',['float_opt_t',['../classsbepp_1_1float__opt__t.html',1,'sbepp']]], + ['float_5ft_3',['float_t',['../classsbepp_1_1float__t.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_5.js b/1.4.1/search/classes_5.js new file mode 100644 index 0000000..aa5a198 --- /dev/null +++ b/1.4.1/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['group_5ftraits_0',['group_traits',['../classsbepp_1_1group__traits.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_6.js b/1.4.1/search/classes_6.js new file mode 100644 index 0000000..5f9cb4c --- /dev/null +++ b/1.4.1/search/classes_6.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['int16_5fopt_5ft_0',['int16_opt_t',['../classsbepp_1_1int16__opt__t.html',1,'sbepp']]], + ['int16_5ft_1',['int16_t',['../classsbepp_1_1int16__t.html',1,'sbepp']]], + ['int32_5fopt_5ft_2',['int32_opt_t',['../classsbepp_1_1int32__opt__t.html',1,'sbepp']]], + ['int32_5ft_3',['int32_t',['../classsbepp_1_1int32__t.html',1,'sbepp']]], + ['int64_5fopt_5ft_4',['int64_opt_t',['../classsbepp_1_1int64__opt__t.html',1,'sbepp']]], + ['int64_5ft_5',['int64_t',['../classsbepp_1_1int64__t.html',1,'sbepp']]], + ['int8_5fopt_5ft_6',['int8_opt_t',['../classsbepp_1_1int8__opt__t.html',1,'sbepp']]], + ['int8_5ft_7',['int8_t',['../classsbepp_1_1int8__t.html',1,'sbepp']]], + ['is_5fenum_8',['is_enum',['../structsbepp_1_1is__enum.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_7.js b/1.4.1/search/classes_7.js new file mode 100644 index 0000000..e5bb202 --- /dev/null +++ b/1.4.1/search/classes_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['message_5fbase_0',['message_base',['../classsbepp_1_1detail_1_1message__base.html',1,'sbepp::detail']]], + ['message_5ftraits_1',['message_traits',['../classsbepp_1_1message__traits.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_8.js b/1.4.1/search/classes_8.js new file mode 100644 index 0000000..035642b --- /dev/null +++ b/1.4.1/search/classes_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nested_5fgroup_5fbase_0',['nested_group_base',['../classsbepp_1_1detail_1_1nested__group__base.html',1,'sbepp::detail']]], + ['nullopt_5ft_1',['nullopt_t',['../structsbepp_1_1nullopt__t.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_9.js b/1.4.1/search/classes_9.js new file mode 100644 index 0000000..2f5c510 --- /dev/null +++ b/1.4.1/search/classes_9.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['optional_5fbase_0',['optional_base',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20char_2c_20char_5fopt_5ft_20_3e_1',['optional_base< char, char_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20double_2c_20double_5fopt_5ft_20_3e_2',['optional_base< double, double_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20float_2c_20float_5fopt_5ft_20_3e_3',['optional_base< float, float_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3aint16_5ft_2c_20int16_5fopt_5ft_20_3e_4',['optional_base< std::int16_t, int16_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3aint32_5ft_2c_20int32_5fopt_5ft_20_3e_5',['optional_base< std::int32_t, int32_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3aint64_5ft_2c_20int64_5fopt_5ft_20_3e_6',['optional_base< std::int64_t, int64_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3aint8_5ft_2c_20int8_5fopt_5ft_20_3e_7',['optional_base< std::int8_t, int8_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3auint16_5ft_2c_20uint16_5fopt_5ft_20_3e_8',['optional_base< std::uint16_t, uint16_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3auint32_5ft_2c_20uint32_5fopt_5ft_20_3e_9',['optional_base< std::uint32_t, uint32_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3auint64_5ft_2c_20uint64_5fopt_5ft_20_3e_10',['optional_base< std::uint64_t, uint64_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]], + ['optional_5fbase_3c_20std_3a_3auint8_5ft_2c_20uint8_5fopt_5ft_20_3e_11',['optional_base< std::uint8_t, uint8_opt_t >',['../classsbepp_1_1detail_1_1optional__base.html',1,'sbepp::detail']]] +]; diff --git a/1.4.1/search/classes_a.js b/1.4.1/search/classes_a.js new file mode 100644 index 0000000..ecf0985 --- /dev/null +++ b/1.4.1/search/classes_a.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['required_5fbase_0',['required_base',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20char_2c_20char_5ft_20_3e_1',['required_base< char, char_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20double_2c_20double_5ft_20_3e_2',['required_base< double, double_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20float_2c_20float_5ft_20_3e_3',['required_base< float, float_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3aint16_5ft_2c_20int16_5ft_20_3e_4',['required_base< std::int16_t, int16_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3aint32_5ft_2c_20int32_5ft_20_3e_5',['required_base< std::int32_t, int32_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3aint64_5ft_2c_20int64_5ft_20_3e_6',['required_base< std::int64_t, int64_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3aint8_5ft_2c_20int8_5ft_20_3e_7',['required_base< std::int8_t, int8_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3auint16_5ft_2c_20uint16_5ft_20_3e_8',['required_base< std::uint16_t, uint16_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3auint32_5ft_2c_20uint32_5ft_20_3e_9',['required_base< std::uint32_t, uint32_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3auint64_5ft_2c_20uint64_5ft_20_3e_10',['required_base< std::uint64_t, uint64_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]], + ['required_5fbase_3c_20std_3a_3auint8_5ft_2c_20uint8_5ft_20_3e_11',['required_base< std::uint8_t, uint8_t >',['../classsbepp_1_1detail_1_1required__base.html',1,'sbepp::detail']]] +]; diff --git a/1.4.1/search/classes_b.js b/1.4.1/search/classes_b.js new file mode 100644 index 0000000..0b59f7f --- /dev/null +++ b/1.4.1/search/classes_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['schema_5ftraits_0',['schema_traits',['../classsbepp_1_1schema__traits.html',1,'sbepp']]], + ['set_5fchoice_5ftraits_1',['set_choice_traits',['../classsbepp_1_1set__choice__traits.html',1,'sbepp']]], + ['set_5ftraits_2',['set_traits',['../classsbepp_1_1set__traits.html',1,'sbepp']]], + ['size_5fbytes_5fchecked_5fresult_3',['size_bytes_checked_result',['../structsbepp_1_1size__bytes__checked__result.html',1,'sbepp']]], + ['static_5farray_5fref_4',['static_array_ref',['../classsbepp_1_1detail_1_1static__array__ref.html',1,'sbepp::detail']]] +]; diff --git a/1.4.1/search/classes_c.js b/1.4.1/search/classes_c.js new file mode 100644 index 0000000..4f9b28f --- /dev/null +++ b/1.4.1/search/classes_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['traits_5ftag_0',['traits_tag',['../structsbepp_1_1traits__tag.html',1,'sbepp']]], + ['type_5ftraits_1',['type_traits',['../classsbepp_1_1type__traits.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/classes_d.js b/1.4.1/search/classes_d.js new file mode 100644 index 0000000..d1e4813 --- /dev/null +++ b/1.4.1/search/classes_d.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['uint16_5fopt_5ft_0',['uint16_opt_t',['../classsbepp_1_1uint16__opt__t.html',1,'sbepp']]], + ['uint16_5ft_1',['uint16_t',['../classsbepp_1_1uint16__t.html',1,'sbepp']]], + ['uint32_5fopt_5ft_2',['uint32_opt_t',['../classsbepp_1_1uint32__opt__t.html',1,'sbepp']]], + ['uint32_5ft_3',['uint32_t',['../classsbepp_1_1uint32__t.html',1,'sbepp']]], + ['uint64_5fopt_5ft_4',['uint64_opt_t',['../classsbepp_1_1uint64__opt__t.html',1,'sbepp']]], + ['uint64_5ft_5',['uint64_t',['../classsbepp_1_1uint64__t.html',1,'sbepp']]], + ['uint8_5fopt_5ft_6',['uint8_opt_t',['../classsbepp_1_1uint8__opt__t.html',1,'sbepp']]], + ['uint8_5ft_7',['uint8_t',['../classsbepp_1_1uint8__t.html',1,'sbepp']]], + ['unknown_5fenum_5fvalue_5ftag_8',['unknown_enum_value_tag',['../structsbepp_1_1unknown__enum__value__tag.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/close.svg b/1.4.1/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/1.4.1/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/1.4.1/search/concepts_0.js b/1.4.1/search/concepts_0.js new file mode 100644 index 0000000..cdc0299 --- /dev/null +++ b/1.4.1/search/concepts_0.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['sbepp_3a_3aarray_5ftype_0',['array_type',['../conceptsbepp_1_1array__type.html',1,'sbepp']]], + ['sbepp_3a_3acomposite_1',['composite',['../conceptsbepp_1_1composite.html',1,'sbepp']]], + ['sbepp_3a_3adata_2',['data',['../conceptsbepp_1_1data.html',1,'sbepp']]], + ['sbepp_3a_3aenumeration_3',['enumeration',['../conceptsbepp_1_1enumeration.html',1,'sbepp']]], + ['sbepp_3a_3aflat_5fgroup_4',['flat_group',['../conceptsbepp_1_1flat__group.html',1,'sbepp']]], + ['sbepp_3a_3agroup_5',['group',['../conceptsbepp_1_1group.html',1,'sbepp']]], + ['sbepp_3a_3amessage_6',['message',['../conceptsbepp_1_1message.html',1,'sbepp']]], + ['sbepp_3a_3anested_5fgroup_7',['nested_group',['../conceptsbepp_1_1nested__group.html',1,'sbepp']]], + ['sbepp_3a_3anon_5farray_5ftype_8',['non_array_type',['../conceptsbepp_1_1non__array__type.html',1,'sbepp']]], + ['sbepp_3a_3aoptional_5ftype_9',['optional_type',['../conceptsbepp_1_1optional__type.html',1,'sbepp']]], + ['sbepp_3a_3arequired_5ftype_10',['required_type',['../conceptsbepp_1_1required__type.html',1,'sbepp']]], + ['sbepp_3a_3aset_11',['set',['../conceptsbepp_1_1set.html',1,'sbepp']]], + ['sbepp_3a_3atype_12',['type',['../conceptsbepp_1_1type.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/defines_0.js b/1.4.1/search/defines_0.js new file mode 100644 index 0000000..762306c --- /dev/null +++ b/1.4.1/search/defines_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['sbepp_5fassert_5fhandler_0',['SBEPP_ASSERT_HANDLER',['../sbepp_8hpp.html#ae9a30a1ed9195270dc6dba235182ba34',1,'sbepp.hpp']]], + ['sbepp_5fbyte_5forder_1',['SBEPP_BYTE_ORDER',['../sbepp_8hpp.html#a9558ac0bbc3e7b40c3813566f4e3510e',1,'sbepp.hpp']]], + ['sbepp_5fdisable_5fasserts_2',['SBEPP_DISABLE_ASSERTS',['../sbepp_8hpp.html#a6a9a3e2c289e8eb83bd1937c0a54b14e',1,'sbepp.hpp']]], + ['sbepp_5fenable_5fasserts_5fwith_5fhandler_3',['SBEPP_ENABLE_ASSERTS_WITH_HANDLER',['../sbepp_8hpp.html#a0279553eb51c2609c3273da80e021278',1,'sbepp.hpp']]] +]; diff --git a/1.4.1/search/enums_0.js b/1.4.1/search/enums_0.js new file mode 100644 index 0000000..950adaf --- /dev/null +++ b/1.4.1/search/enums_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['endian_0',['endian',['../namespacesbepp.html#af318e06df8931dd69380221b420caec5',1,'sbepp']]], + ['eos_5fnull_1',['eos_null',['../namespacesbepp.html#a0ee177accf7d675a768848bb29e1512f',1,'sbepp']]] +]; diff --git a/1.4.1/search/enums_1.js b/1.4.1/search/enums_1.js new file mode 100644 index 0000000..a0e6a27 --- /dev/null +++ b/1.4.1/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['field_5fpresence_0',['field_presence',['../namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530',1,'sbepp']]] +]; diff --git a/1.4.1/search/enumvalues_0.js b/1.4.1/search/enumvalues_0.js new file mode 100644 index 0000000..84f5b31 --- /dev/null +++ b/1.4.1/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['all_0',['all',['../namespacesbepp.html#a0ee177accf7d675a768848bb29e1512faa181a603769c1f98ad927e7367c7aa51',1,'sbepp']]] +]; diff --git a/1.4.1/search/enumvalues_1.js b/1.4.1/search/enumvalues_1.js new file mode 100644 index 0000000..aa3c30f --- /dev/null +++ b/1.4.1/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['big_0',['big',['../namespacesbepp.html#af318e06df8931dd69380221b420caec5ad861877da56b8b4ceb35c8cbfdf65bb4',1,'sbepp']]] +]; diff --git a/1.4.1/search/enumvalues_2.js b/1.4.1/search/enumvalues_2.js new file mode 100644 index 0000000..ab1809a --- /dev/null +++ b/1.4.1/search/enumvalues_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['constant_0',['constant',['../namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530a617ac08757d38a5a7ed91c224f0e90a0',1,'sbepp']]] +]; diff --git a/1.4.1/search/enumvalues_3.js b/1.4.1/search/enumvalues_3.js new file mode 100644 index 0000000..a0cc9c1 --- /dev/null +++ b/1.4.1/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['little_0',['little',['../namespacesbepp.html#af318e06df8931dd69380221b420caec5aaae6635e044ac56046b2893a529b5114',1,'sbepp']]] +]; diff --git a/1.4.1/search/enumvalues_4.js b/1.4.1/search/enumvalues_4.js new file mode 100644 index 0000000..185234a --- /dev/null +++ b/1.4.1/search/enumvalues_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['native_0',['native',['../namespacesbepp.html#af318e06df8931dd69380221b420caec5a8e5f3adee38c8fccc13c1f3be0143796',1,'sbepp']]], + ['none_1',['none',['../namespacesbepp.html#a0ee177accf7d675a768848bb29e1512fa334c4a4c42fdb79d7ebc3e73b517e6f8',1,'sbepp']]] +]; diff --git a/1.4.1/search/enumvalues_5.js b/1.4.1/search/enumvalues_5.js new file mode 100644 index 0000000..f5426fa --- /dev/null +++ b/1.4.1/search/enumvalues_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['optional_0',['optional',['../namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530ad57c24f3fe52d16e7169b912dd647f0d',1,'sbepp']]] +]; diff --git a/1.4.1/search/enumvalues_6.js b/1.4.1/search/enumvalues_6.js new file mode 100644 index 0000000..bd07383 --- /dev/null +++ b/1.4.1/search/enumvalues_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['required_0',['required',['../namespacesbepp.html#a1ef75437d8fabab98acbec11d3702530aac67ede5a84eb5a1add7ff4440e9a485',1,'sbepp']]] +]; diff --git a/1.4.1/search/enumvalues_7.js b/1.4.1/search/enumvalues_7.js new file mode 100644 index 0000000..a5d48ed --- /dev/null +++ b/1.4.1/search/enumvalues_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['single_0',['single',['../namespacesbepp.html#a0ee177accf7d675a768848bb29e1512fadd5c07036f2975ff4bce568b6511d3bc',1,'sbepp']]] +]; diff --git a/1.4.1/search/files_0.js b/1.4.1/search/files_0.js new file mode 100644 index 0000000..aaf87db --- /dev/null +++ b/1.4.1/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['sbepp_2ehpp_0',['sbepp.hpp',['../sbepp_8hpp.html',1,'']]] +]; diff --git a/1.4.1/search/functions_0.js b/1.4.1/search/functions_0.js new file mode 100644 index 0000000..146b302 --- /dev/null +++ b/1.4.1/search/functions_0.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['addressof_0',['addressof',['../namespacesbepp.html#a870241790cb5759575b9f57d654392c2',1,'sbepp']]], + ['assertion_5ffailed_1',['assertion_failed',['../namespacesbepp.html#a9005f92162d3e00f4c4d1bd2e311f8b0',1,'sbepp']]], + ['assign_2',['assign',['../classsbepp_1_1detail_1_1static__array__ref.html#affc0a2f84dbd5fcc712f1692b7b372e0',1,'sbepp::detail::static_array_ref::assign(size_type count, const value_type value) const noexcept'],['../classsbepp_1_1detail_1_1static__array__ref.html#ae223375ae96f2b4a72cf5002c3ff38ea',1,'sbepp::detail::static_array_ref::assign(InputIt first, InputIt last) const'],['../classsbepp_1_1detail_1_1static__array__ref.html#a65e5c092105176c368e91706e948fca0',1,'sbepp::detail::static_array_ref::assign(std::initializer_list< value_type > ilist) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ab0bc4620ab86a21f2ddbfe18406eca1c',1,'sbepp::detail::dynamic_array_ref::assign(size_type count, const value_type value) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ad08611247f13c99807af0368180861f5',1,'sbepp::detail::dynamic_array_ref::assign(InputIt first, InputIt last) const'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a2cb21d19a322367df856b3fdf1243cf6',1,'sbepp::detail::dynamic_array_ref::assign(std::initializer_list< value_type > ilist) const noexcept']]], + ['assign_5frange_3',['assign_range',['../classsbepp_1_1detail_1_1static__array__ref.html#add93caee008d318e2faca8d31986f7f0',1,'sbepp::detail::static_array_ref::assign_range()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#aa9373ed8d2dbb0c7f755531074356a24',1,'sbepp::detail::dynamic_array_ref::assign_range()']]], + ['assign_5fstring_4',['assign_string',['../classsbepp_1_1detail_1_1static__array__ref.html#a1f63ff3a5b0cf99df9b632733ff507f3',1,'sbepp::detail::static_array_ref::assign_string(const char *str, const eos_null eos_mode=eos_null::all) const noexcept'],['../classsbepp_1_1detail_1_1static__array__ref.html#acfbcf354ba60eec9135579bf059d93cd',1,'sbepp::detail::static_array_ref::assign_string(R &&r, const eos_null eos_mode=eos_null::all) const'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a27476f9cf708075e344b509d3e7772e2',1,'sbepp::detail::dynamic_array_ref::assign_string()']]] +]; diff --git a/1.4.1/search/functions_1.js b/1.4.1/search/functions_1.js new file mode 100644 index 0000000..665a3cb --- /dev/null +++ b/1.4.1/search/functions_1.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['back_0',['back',['../classsbepp_1_1detail_1_1flat__group__base.html#ad29ce8e67aad9180fe3340ba84f73f3f',1,'sbepp::detail::flat_group_base::back()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a8161979b4c364af8280eab33295a846d',1,'sbepp::detail::static_array_ref::back()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a2d1259db5d27d8d7db07a1683f475f1d',1,'sbepp::detail::dynamic_array_ref::back()']]], + ['begin_1',['begin',['../classsbepp_1_1detail_1_1flat__group__base.html#a7e1d6a86257a96bed56bd00fb8b7e609',1,'sbepp::detail::flat_group_base::begin()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ae7cb7867e43f254ef4ed0f3bee35cdb6',1,'sbepp::detail::nested_group_base::begin()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a52cfd8c882748794a264f46b0e0c713d',1,'sbepp::detail::static_array_ref::begin()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a84298bef272e521a534e5c399facd85a',1,'sbepp::detail::dynamic_array_ref::begin()']]], + ['bitset_5fbase_2',['bitset_base',['../classsbepp_1_1detail_1_1bitset__base.html#aff9292d5470a65ccbac45033c271d186',1,'sbepp::detail::bitset_base::bitset_base()=default'],['../classsbepp_1_1detail_1_1bitset__base.html#a8218ec7a0569f6bd0c54bf1ed020e0a5',1,'sbepp::detail::bitset_base::bitset_base(T value) noexcept']]], + ['block_5flength_3',['block_length',['../classsbepp_1_1message__traits.html#ad50a4bd3f1a15fb6f7b7025370a78373',1,'sbepp::message_traits::block_length()'],['../classsbepp_1_1group__traits.html#a0156efd41771f12de1e50ae88330cc63',1,'sbepp::group_traits::block_length()']]], + ['byte_5forder_4',['byte_order',['../classsbepp_1_1schema__traits.html#ad6ebc5adc1b8a2385cb92f1f4d3bbab3',1,'sbepp::schema_traits']]], + ['byte_5frange_5',['byte_range',['../classsbepp_1_1detail_1_1byte__range.html#a7c71293de61b7e01d5f7ca29d72e394a',1,'sbepp::detail::byte_range::byte_range()=default'],['../classsbepp_1_1detail_1_1byte__range.html#aec6ab4f07a9910cb8baf29c41c62542b',1,'sbepp::detail::byte_range::byte_range(Byte *begin, Byte *end) noexcept'],['../classsbepp_1_1detail_1_1byte__range.html#a14cd2d9c6afb4a77d44eeb0dc18523f9',1,'sbepp::detail::byte_range::byte_range(Byte *ptr, const std::size_t size) noexcept'],['../classsbepp_1_1detail_1_1byte__range.html#a4d4774d319e0e9335f7103528aee55f8',1,'sbepp::detail::byte_range::byte_range(const byte_range< Byte2 > &other) noexcept']]] +]; diff --git a/1.4.1/search/functions_10.js b/1.4.1/search/functions_10.js new file mode 100644 index 0000000..be7314b --- /dev/null +++ b/1.4.1/search/functions_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['to_5funderlying_0',['to_underlying',['../namespacesbepp.html#a0d0a0af58987f30ee37fda64c15cc316',1,'sbepp']]] +]; diff --git a/1.4.1/search/functions_11.js b/1.4.1/search/functions_11.js new file mode 100644 index 0000000..4fb8b9b --- /dev/null +++ b/1.4.1/search/functions_11.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['value_0',['value',['../classsbepp_1_1detail_1_1required__base.html#a41b70ceece0da5f77cd12093da043bed',1,'sbepp::detail::required_base::value()'],['../classsbepp_1_1detail_1_1optional__base.html#a26c508ad9e9f3285170f5745112a6b0b',1,'sbepp::detail::optional_base::value()'],['../classsbepp_1_1enum__value__traits.html#a604abf8cf38677d33f93d81f972b8679',1,'sbepp::enum_value_traits::value()']]], + ['value_5for_1',['value_or',['../classsbepp_1_1detail_1_1optional__base.html#a573de5ba1180952c1493c9e1dd071d06',1,'sbepp::detail::optional_base']]], + ['version_2',['version',['../classsbepp_1_1schema__traits.html#a34fc19d3d1d2837bbdf4804d722d8cf5',1,'sbepp::schema_traits']]], + ['visit_3',['visit',['../namespacesbepp.html#a47c1cd81154bc5c56524604f74d52d27',1,'sbepp::visit(View view, Cursor &c, Visitor &&visitor={})'],['../namespacesbepp.html#a79950b0d08ddf3eafafb25a5693a6e2a',1,'sbepp::visit(View view, Visitor &&visitor={})'],['../namespacesbepp.html#a3dafbabb41e8a71abde1535551de2c6d',1,'sbepp::visit(Set s, Visitor &&visitor={})'],['../namespacesbepp.html#abf05c2c5e3e81c441cce4db02c0c642b',1,'sbepp::visit(Enum e, Visitor &&visitor={})']]], + ['visit_5fchildren_4',['visit_children',['../namespacesbepp.html#a23abc2b6b892aea5b2b7f6dde6c24e69',1,'sbepp::visit_children(View view, Cursor &c, Visitor &&visitor={})'],['../namespacesbepp.html#a306622dcac701f3c76abd3ea7c2902b6',1,'sbepp::visit_children(View view, Visitor &&visitor={})']]], + ['visit_5fset_5',['visit_set',['../namespacesbepp.html#aa253364a4276b55c0a157aefaa185c37',1,'sbepp']]] +]; diff --git a/1.4.1/search/functions_2.js b/1.4.1/search/functions_2.js new file mode 100644 index 0000000..e75270c --- /dev/null +++ b/1.4.1/search/functions_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['character_5fencoding_0',['character_encoding',['../classsbepp_1_1type__traits.html#a323337b97d9f115a64f732a1f947bfb4',1,'sbepp::type_traits']]], + ['clear_1',['clear',['../classsbepp_1_1detail_1_1flat__group__base.html#a2c73368a3be5a993f23185cd58320b11',1,'sbepp::detail::flat_group_base::clear()'],['../classsbepp_1_1detail_1_1nested__group__base.html#abcc1b411ab284958f0b08f49720d0cfa',1,'sbepp::detail::nested_group_base::clear()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ab5ad7952ef0fe9926a1d9491896e167e',1,'sbepp::detail::dynamic_array_ref::clear()']]], + ['cursor_2',['cursor',['../classsbepp_1_1cursor.html#a939a73d3177034f1504ad4bf323c18d1',1,'sbepp::cursor::cursor()=default'],['../classsbepp_1_1cursor.html#a1a02c8cd73c25c19372403426dfb7a1b',1,'sbepp::cursor::cursor(cursor< Byte2 > other) noexcept']]], + ['cursor_5fbegin_3',['cursor_begin',['../classsbepp_1_1detail_1_1flat__group__base.html#a7fbeff07ceabcd7a3bb835920c13703c',1,'sbepp::detail::flat_group_base::cursor_begin()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ac0d4433d69efcc6a6e380522c8abb937',1,'sbepp::detail::nested_group_base::cursor_begin()']]], + ['cursor_5fend_4',['cursor_end',['../classsbepp_1_1detail_1_1flat__group__base.html#ab0865fc30c9182d0d7f4d9b28ed21e7a',1,'sbepp::detail::flat_group_base::cursor_end()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ab78dfd70257bda1410e61994a03fe356',1,'sbepp::detail::nested_group_base::cursor_end()']]], + ['cursor_5frange_5',['cursor_range',['../classsbepp_1_1detail_1_1flat__group__base.html#a86d36b6de40321f5a13bf9b15783b936',1,'sbepp::detail::flat_group_base::cursor_range()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ada4f73e140660ecf2c28b031f28a9305',1,'sbepp::detail::nested_group_base::cursor_range()']]], + ['cursor_5fsubrange_6',['cursor_subrange',['../classsbepp_1_1detail_1_1flat__group__base.html#a58ab082a4ed58b06015ace4679d09a80',1,'sbepp::detail::flat_group_base::cursor_subrange(cursor< Byte2 > &c, const size_type pos) const noexcept'],['../classsbepp_1_1detail_1_1flat__group__base.html#ae155f92736a0daf59846125bc138a0ed',1,'sbepp::detail::flat_group_base::cursor_subrange(cursor< Byte2 > &c, const size_type pos, const size_type count) const noexcept'],['../classsbepp_1_1detail_1_1nested__group__base.html#a2187a8faa4c16725a362848fe6788c3c',1,'sbepp::detail::nested_group_base::cursor_subrange(cursor< Byte2 > &c, const size_type pos) const noexcept'],['../classsbepp_1_1detail_1_1nested__group__base.html#ade03dcd0feb2d6eb432cb1d99bf797fe',1,'sbepp::detail::nested_group_base::cursor_subrange(cursor< Byte2 > &c, const size_type pos, const size_type count) const noexcept']]] +]; diff --git a/1.4.1/search/functions_3.js b/1.4.1/search/functions_3.js new file mode 100644 index 0000000..a2efec7 --- /dev/null +++ b/1.4.1/search/functions_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['data_0',['data',['../classsbepp_1_1detail_1_1static__array__ref.html#aee2ad1343a3cb7125a0f709823d49ce2',1,'sbepp::detail::static_array_ref::data()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ab19b5f01fb457ad735e8eb94576f1f42',1,'sbepp::detail::dynamic_array_ref::data()']]], + ['deprecated_1',['deprecated',['../classsbepp_1_1type__traits.html#a699391a49a89fa0f2d291a56724d00ad',1,'sbepp::type_traits::deprecated()'],['../classsbepp_1_1enum__traits.html#a16266f7a6b0fae4eef9c69c701e398bc',1,'sbepp::enum_traits::deprecated()'],['../classsbepp_1_1enum__value__traits.html#abea5a711cb5fc4e3af9127f8553d8761',1,'sbepp::enum_value_traits::deprecated()'],['../classsbepp_1_1set__traits.html#a2e15d035e8101dde58265bf924837cda',1,'sbepp::set_traits::deprecated()'],['../classsbepp_1_1set__choice__traits.html#a9ac1bb04455e41922ea6443a9724acff',1,'sbepp::set_choice_traits::deprecated()'],['../classsbepp_1_1composite__traits.html#a91645f7df4b5d3820eacc3bf6f0158b2',1,'sbepp::composite_traits::deprecated()'],['../classsbepp_1_1message__traits.html#ad833e335b4743321663e7048411b5523',1,'sbepp::message_traits::deprecated()'],['../classsbepp_1_1field__traits.html#a863bbe73d390f81dd6e9ec11f11e3575',1,'sbepp::field_traits::deprecated()'],['../classsbepp_1_1group__traits.html#acffb1fe4444cf3908366585925f0be82',1,'sbepp::group_traits::deprecated()'],['../classsbepp_1_1data__traits.html#aa01969baded120c8b23e5c20c34c143b',1,'sbepp::data_traits::deprecated()']]], + ['description_2',['description',['../classsbepp_1_1type__traits.html#a62e403ded65bffffaaa50880ce37337d',1,'sbepp::type_traits::description()'],['../classsbepp_1_1schema__traits.html#a150aae33978ab248f3209058cd08cbe5',1,'sbepp::schema_traits::description()'],['../classsbepp_1_1enum__traits.html#a3fcfad02856d6f19af772f5a8bed9f29',1,'sbepp::enum_traits::description()'],['../classsbepp_1_1enum__value__traits.html#ac282af4bc41bd654ce7ca5dbeff52896',1,'sbepp::enum_value_traits::description()'],['../classsbepp_1_1set__traits.html#a14d925e0b8593e86cdc046c8cc412ca9',1,'sbepp::set_traits::description()'],['../classsbepp_1_1set__choice__traits.html#acdfa3553c5e091540f5c5cd327c7d4eb',1,'sbepp::set_choice_traits::description()'],['../classsbepp_1_1composite__traits.html#addcbb73179c08413f1eaf9beeec46846',1,'sbepp::composite_traits::description()'],['../classsbepp_1_1message__traits.html#ad4cea3aef6b41fdd4829d2732026049e',1,'sbepp::message_traits::description()'],['../classsbepp_1_1field__traits.html#a446e16ce49437a2cc3ad0fed3ae65e92',1,'sbepp::field_traits::description()'],['../classsbepp_1_1group__traits.html#a08e8c67eed286742270eb7c50d33a45c',1,'sbepp::group_traits::description()'],['../classsbepp_1_1data__traits.html#aef2b5cf5210d947ac3e69a58fda72b84',1,'sbepp::data_traits::description()']]], + ['dont_5fmove_3',['dont_move',['../namespacesbepp_1_1cursor__ops.html#a45f332328f49269fd0117bca732e7f36',1,'sbepp::cursor_ops']]] +]; diff --git a/1.4.1/search/functions_4.js b/1.4.1/search/functions_4.js new file mode 100644 index 0000000..ed85eb0 --- /dev/null +++ b/1.4.1/search/functions_4.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['empty_0',['empty',['../classsbepp_1_1detail_1_1flat__group__base.html#a8969dd197ca4a509ce61028663f0c117',1,'sbepp::detail::flat_group_base::empty()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ac4446b7435b0b902c93b3a9d8bf23a97',1,'sbepp::detail::nested_group_base::empty()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a0d37b6688d547bb416e0d69b21062b11',1,'sbepp::detail::static_array_ref::empty()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ac948e0b6d31263575513a2083829930c',1,'sbepp::detail::dynamic_array_ref::empty()']]], + ['end_1',['end',['../classsbepp_1_1detail_1_1flat__group__base.html#a8e7b30b77663460d88f47c70b450ef32',1,'sbepp::detail::flat_group_base::end()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a1eea9c4883cd16d7d8a1cf95a126b5ec',1,'sbepp::detail::nested_group_base::end()'],['../classsbepp_1_1detail_1_1static__array__ref.html#abebb90c516c364c907bb12866c63d204',1,'sbepp::detail::static_array_ref::end()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ad4b1146091b6f8d85ab25381b501f31a',1,'sbepp::detail::dynamic_array_ref::end()']]], + ['entry_5fbase_2',['entry_base',['../classsbepp_1_1detail_1_1entry__base.html#adab221bc15ccc3c6f7ba29d08a3285f5',1,'sbepp::detail::entry_base::entry_base()=default'],['../classsbepp_1_1detail_1_1entry__base.html#addf46369040007b8511ae531c1865138',1,'sbepp::detail::entry_base::entry_base(Byte *ptr, Byte *end, BlockLengthType block_length) noexcept'],['../classsbepp_1_1detail_1_1entry__base.html#ab00082644814254f9a62b430c5a3df3c',1,'sbepp::detail::entry_base::entry_base(Byte *ptr, const std::size_t size, const BlockLengthType block_length) noexcept'],['../classsbepp_1_1detail_1_1entry__base.html#a86dad2a468f1760a655cec07fd3e101b',1,'sbepp::detail::entry_base::entry_base(cursor< Byte2 > &c, Byte *end_ptr, BlockLengthType block_length) noexcept'],['../classsbepp_1_1detail_1_1entry__base.html#a86f9881d33a8021e5f4a828411c425ec',1,'sbepp::detail::entry_base::entry_base(const entry_base< Byte2, BlockLengthType > &other) noexcept']]], + ['enum_5fto_5fstring_3',['enum_to_string',['../namespacesbepp.html#a6b2d51af3f026b165fa40fe1d7ab19db',1,'sbepp']]], + ['erase_4',['erase',['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ab4d76c7225c80d6e5158a7c9873ae8eb',1,'sbepp::detail::dynamic_array_ref::erase(iterator pos) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a260941a7ccfcde104b5617538c447518',1,'sbepp::detail::dynamic_array_ref::erase(iterator first, iterator last) const noexcept']]] +]; diff --git a/1.4.1/search/functions_5.js b/1.4.1/search/functions_5.js new file mode 100644 index 0000000..c6c427e --- /dev/null +++ b/1.4.1/search/functions_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['fill_0',['fill',['../classsbepp_1_1detail_1_1static__array__ref.html#acfc71a6121767e84db3c226770dab01a',1,'sbepp::detail::static_array_ref']]], + ['fill_5fgroup_5fheader_1',['fill_group_header',['../namespacesbepp.html#a7d29b37dfc83150ae34eaaf94dd4ba4c',1,'sbepp']]], + ['fill_5fmessage_5fheader_2',['fill_message_header',['../namespacesbepp.html#a3b5dd3446b423149a101530f056bee64',1,'sbepp']]], + ['front_3',['front',['../classsbepp_1_1detail_1_1flat__group__base.html#a42b38f8a35ba8fb8167baa3b7807c459',1,'sbepp::detail::flat_group_base::front()'],['../classsbepp_1_1detail_1_1nested__group__base.html#ab1dbdc9532ded2939a7fec25f7366e5d',1,'sbepp::detail::nested_group_base::front()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a286579c340a4b1e83aa172c8663ea4e4',1,'sbepp::detail::static_array_ref::front()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a5d8e4d81aeee24786ae87d13a53dc1f6',1,'sbepp::detail::dynamic_array_ref::front()']]] +]; diff --git a/1.4.1/search/functions_6.js b/1.4.1/search/functions_6.js new file mode 100644 index 0000000..7bc85cb --- /dev/null +++ b/1.4.1/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['get_5fheader_0',['get_header',['../namespacesbepp.html#a12bbc67580e3f4bb2a0299033f01818d',1,'sbepp']]] +]; diff --git a/1.4.1/search/functions_7.js b/1.4.1/search/functions_7.js new file mode 100644 index 0000000..83002f4 --- /dev/null +++ b/1.4.1/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['has_5fvalue_0',['has_value',['../classsbepp_1_1detail_1_1optional__base.html#ad2a0d48a5f8448e41a65838af24a4269',1,'sbepp::detail::optional_base']]] +]; diff --git a/1.4.1/search/functions_8.js b/1.4.1/search/functions_8.js new file mode 100644 index 0000000..edc8fca --- /dev/null +++ b/1.4.1/search/functions_8.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['id_0',['id',['../classsbepp_1_1schema__traits.html#ab0c877463fb89a80f912f4fd301d7eec',1,'sbepp::schema_traits::id()'],['../classsbepp_1_1message__traits.html#ac3fc3e5864d0733a719073dcc7b4996d',1,'sbepp::message_traits::id()'],['../classsbepp_1_1field__traits.html#a7eb96e6399ed63d7d09edf61b5debb1c',1,'sbepp::field_traits::id()'],['../classsbepp_1_1group__traits.html#ae167fe0be7f32af6a00c076519a1d85f',1,'sbepp::group_traits::id()'],['../classsbepp_1_1data__traits.html#aaff21bc3ecb9f86b7b7805d29cdd48f5',1,'sbepp::data_traits::id()']]], + ['in_5frange_1',['in_range',['../classsbepp_1_1detail_1_1required__base.html#aa80bf5f235a4a5dfc01e606ebb883cc3',1,'sbepp::detail::required_base::in_range()'],['../classsbepp_1_1detail_1_1optional__base.html#ab9eb32c4e62dbb05397486c7ac9fc445',1,'sbepp::detail::optional_base::in_range()']]], + ['index_2',['index',['../classsbepp_1_1set__choice__traits.html#a122210e74a293ac61719eb352763a00c',1,'sbepp::set_choice_traits']]], + ['init_3',['init',['../namespacesbepp_1_1cursor__ops.html#a5ea08b77415fb7c92bf38fe43f7556ac',1,'sbepp::cursor_ops']]], + ['init_5fconst_5fcursor_4',['init_const_cursor',['../namespacesbepp.html#a399a5ac768befed2dc73396364eaa0c3',1,'sbepp']]], + ['init_5fcursor_5',['init_cursor',['../namespacesbepp.html#a125f1fbb9faadde1515f7822a7b6420f',1,'sbepp']]], + ['init_5fdont_5fmove_6',['init_dont_move',['../namespacesbepp_1_1cursor__ops.html#ac01ae8f083e748df66ee66514e26cb98',1,'sbepp::cursor_ops']]], + ['insert_7',['insert',['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a3b88bd1349617074c0beb63f8101fe4d',1,'sbepp::detail::dynamic_array_ref::insert(iterator pos, const value_type value) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#aab4c4ae63150590096af465fb4092561',1,'sbepp::detail::dynamic_array_ref::insert(iterator pos, size_type count, const value_type value) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a2c7b02230aefe0868d499dd14c1e5ddb',1,'sbepp::detail::dynamic_array_ref::insert(iterator pos, InputIt first, InputIt last) const'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a171445816ec7beca2131820fe1a4a568',1,'sbepp::detail::dynamic_array_ref::insert(iterator pos, std::initializer_list< value_type > ilist) const noexcept']]] +]; diff --git a/1.4.1/search/functions_9.js b/1.4.1/search/functions_9.js new file mode 100644 index 0000000..99d9284 --- /dev/null +++ b/1.4.1/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['length_0',['length',['../classsbepp_1_1type__traits.html#a87d46ff4037ce6b5ce1e8563369db121',1,'sbepp::type_traits']]] +]; diff --git a/1.4.1/search/functions_a.js b/1.4.1/search/functions_a.js new file mode 100644 index 0000000..4f5d414 --- /dev/null +++ b/1.4.1/search/functions_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['make_5fconst_5fview_0',['make_const_view',['../namespacesbepp.html#ae29503045a371b895af63f6ac6e0f3b9',1,'sbepp']]], + ['make_5fview_1',['make_view',['../namespacesbepp.html#a0dda436c46165f2419bb31e450e3b5b5',1,'sbepp']]], + ['max_5fsize_2',['max_size',['../classsbepp_1_1detail_1_1flat__group__base.html#ab6726c3198e40cca445331165a2d7330',1,'sbepp::detail::flat_group_base::max_size()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a2f5dfd804054c407c507a07b264ae96a',1,'sbepp::detail::nested_group_base::max_size()'],['../classsbepp_1_1detail_1_1static__array__ref.html#ae31484884a0b32d4a1f8a2fca7e75565',1,'sbepp::detail::static_array_ref::max_size()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a2121228d44f301dacbc7e3cab9197e57',1,'sbepp::detail::dynamic_array_ref::max_size()']]], + ['max_5fvalue_3',['max_value',['../classsbepp_1_1type__traits.html#abaa2f6f791cf5177511fb9e43c2d2fad',1,'sbepp::type_traits::max_value()'],['../classsbepp_1_1char__t.html#ae8c0ff6eaf78c1a6225073a31ef0d460',1,'sbepp::char_t::max_value()'],['../classsbepp_1_1char__opt__t.html#a301308f21261472648b1d97930e5bbb2',1,'sbepp::char_opt_t::max_value()'],['../classsbepp_1_1int8__t.html#aa71d022a6ce2f3cc1e92ef6eae81e6f1',1,'sbepp::int8_t::max_value()'],['../classsbepp_1_1int8__opt__t.html#a62f0d90604281961726ab8aeb4e8d13b',1,'sbepp::int8_opt_t::max_value()'],['../classsbepp_1_1uint8__t.html#a7679819f139b2f71c8b56113f5b1c9f1',1,'sbepp::uint8_t::max_value()'],['../classsbepp_1_1uint8__opt__t.html#a742b06e0948e9f268fd17847977e537e',1,'sbepp::uint8_opt_t::max_value()'],['../classsbepp_1_1int16__t.html#aa582a639abc634bcd7f90d56b7c71b20',1,'sbepp::int16_t::max_value()'],['../classsbepp_1_1int16__opt__t.html#a28b33cdc1201055d299d933b6ffcd665',1,'sbepp::int16_opt_t::max_value()'],['../classsbepp_1_1uint16__t.html#a3ce4054d2d8676b0c25ab53b624220cf',1,'sbepp::uint16_t::max_value()'],['../classsbepp_1_1uint16__opt__t.html#a2c4aa2a8bd863b02f02839ce66bbc59f',1,'sbepp::uint16_opt_t::max_value()'],['../classsbepp_1_1int32__t.html#adc1e240befe3215276633bd062674830',1,'sbepp::int32_t::max_value()'],['../classsbepp_1_1int32__opt__t.html#a56bee556a72c50b5994dd99be8382f91',1,'sbepp::int32_opt_t::max_value()'],['../classsbepp_1_1uint32__t.html#a0713469a6346a889a440b76b8e7bc41f',1,'sbepp::uint32_t::max_value()'],['../classsbepp_1_1uint32__opt__t.html#a5c58772211f52a2a5b93830a50191769',1,'sbepp::uint32_opt_t::max_value()'],['../classsbepp_1_1int64__t.html#a4b1ec26c02175c61b3eab1a236b31616',1,'sbepp::int64_t::max_value()'],['../classsbepp_1_1int64__opt__t.html#acb4bc2444f9b3fc56b0f27fc69c067d9',1,'sbepp::int64_opt_t::max_value()'],['../classsbepp_1_1uint64__t.html#a65b7ad3365c5af7fb2a796cdc4e55893',1,'sbepp::uint64_t::max_value()'],['../classsbepp_1_1uint64__opt__t.html#a06e1f6fe46542e654d2f2052d88f43cd',1,'sbepp::uint64_opt_t::max_value()'],['../classsbepp_1_1float__t.html#a15827ab10f89e6cec2982dd67c350377',1,'sbepp::float_t::max_value()'],['../classsbepp_1_1float__opt__t.html#ae8c2f4e159aea05c9a1dbb9fc6c47e33',1,'sbepp::float_opt_t::max_value()'],['../classsbepp_1_1double__t.html#a59a4bc55cd12c07dc0a77544c97fdb79',1,'sbepp::double_t::max_value()'],['../classsbepp_1_1double__opt__t.html#a08fefd0dee8502b5327231180d933edb',1,'sbepp::double_opt_t::max_value()']]], + ['min_5fvalue_4',['min_value',['../classsbepp_1_1type__traits.html#a1c5b2c2760446cf2b0a71e7f4fc2f273',1,'sbepp::type_traits::min_value()'],['../classsbepp_1_1char__t.html#abe61775abe283154e6c27b6ea08cfa04',1,'sbepp::char_t::min_value()'],['../classsbepp_1_1char__opt__t.html#a31a88d2a90ede7a65367e8019d3428da',1,'sbepp::char_opt_t::min_value()'],['../classsbepp_1_1int8__t.html#a00cb6de6cd2051fdb7a5f5b363386da9',1,'sbepp::int8_t::min_value()'],['../classsbepp_1_1int8__opt__t.html#ad4632577366cd998b86b3762b603acb1',1,'sbepp::int8_opt_t::min_value()'],['../classsbepp_1_1uint8__t.html#aa42321eb5738e634961557599e6f7e5d',1,'sbepp::uint8_t::min_value()'],['../classsbepp_1_1uint8__opt__t.html#a3bd711914b57b88886d147380c9d0b3b',1,'sbepp::uint8_opt_t::min_value()'],['../classsbepp_1_1int16__t.html#a138b8188ff40826c999d14699c125a17',1,'sbepp::int16_t::min_value()'],['../classsbepp_1_1int16__opt__t.html#acd38dd37100e52f27b63fcfb3f6eebc8',1,'sbepp::int16_opt_t::min_value()'],['../classsbepp_1_1uint16__t.html#a4a2ddb4abffd91f67d683eb701da9335',1,'sbepp::uint16_t::min_value()'],['../classsbepp_1_1uint16__opt__t.html#a2a1c50bc379359e4f880ca8bec89b913',1,'sbepp::uint16_opt_t::min_value()'],['../classsbepp_1_1int32__t.html#a583e1c8295421cffe17e5194dc28ff0c',1,'sbepp::int32_t::min_value()'],['../classsbepp_1_1int32__opt__t.html#a3c7b3a7d7efccf667fc0e7ef18d98524',1,'sbepp::int32_opt_t::min_value()'],['../classsbepp_1_1uint32__t.html#acbdb044818cda693933562332dd8671c',1,'sbepp::uint32_t::min_value()'],['../classsbepp_1_1uint32__opt__t.html#addef6c7a837cdbe162fc14a8d9c461f3',1,'sbepp::uint32_opt_t::min_value()'],['../classsbepp_1_1int64__t.html#a68e8259907f86ed558cbccea1908bb23',1,'sbepp::int64_t::min_value()'],['../classsbepp_1_1int64__opt__t.html#a78452e1e676eceef3c3dc1cfad27fb34',1,'sbepp::int64_opt_t::min_value()'],['../classsbepp_1_1uint64__t.html#ad4a76429f2610deda8236c4eb7b08d4d',1,'sbepp::uint64_t::min_value()'],['../classsbepp_1_1uint64__opt__t.html#ac56c9fd714d7115985cad8c579440c2f',1,'sbepp::uint64_opt_t::min_value()'],['../classsbepp_1_1float__t.html#aaed64a862bbeca974515624ff430da24',1,'sbepp::float_t::min_value()'],['../classsbepp_1_1float__opt__t.html#ae72c2d1bf216a8c549ec06497e4e999a',1,'sbepp::float_opt_t::min_value()'],['../classsbepp_1_1double__t.html#ad2896ddeeb9493393dd0d711e8300d6e',1,'sbepp::double_t::min_value()'],['../classsbepp_1_1double__opt__t.html#a32bc967ef4793fe2afd60e838c3900e9',1,'sbepp::double_opt_t::min_value()']]] +]; diff --git a/1.4.1/search/functions_b.js b/1.4.1/search/functions_b.js new file mode 100644 index 0000000..f356f61 --- /dev/null +++ b/1.4.1/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['name_0',['name',['../classsbepp_1_1type__traits.html#a91a111b461d9e6047a7e9687af0e31e9',1,'sbepp::type_traits::name()'],['../classsbepp_1_1enum__traits.html#a8c7abc5d82de24d9c04c7030da3c61c5',1,'sbepp::enum_traits::name()'],['../classsbepp_1_1enum__value__traits.html#aba278e3f1b4302ff7635f7f62e8dbe69',1,'sbepp::enum_value_traits::name()'],['../classsbepp_1_1set__traits.html#ad95851480bd973850d885ae154eed869',1,'sbepp::set_traits::name()'],['../classsbepp_1_1set__choice__traits.html#aacd9d1bdc4eb7fd24c0ba12bda58d009',1,'sbepp::set_choice_traits::name()'],['../classsbepp_1_1composite__traits.html#aa7e0ae6935557bdf01c572f5f26a6a66',1,'sbepp::composite_traits::name()'],['../classsbepp_1_1message__traits.html#a6a3bb549a842cae5a1a73fecd4953ec0',1,'sbepp::message_traits::name()'],['../classsbepp_1_1field__traits.html#a2fa8f1a89abec6a5b3d64d5f18f62d36',1,'sbepp::field_traits::name()'],['../classsbepp_1_1group__traits.html#ab093bbdffe658db01a2723a963f23dfe',1,'sbepp::group_traits::name()'],['../classsbepp_1_1data__traits.html#a40f356b6b324806a07819a5f16044517',1,'sbepp::data_traits::name()']]], + ['null_5fvalue_1',['null_value',['../classsbepp_1_1type__traits.html#ad1bc58f7d4f84fe7cb2d69383e9aa12d',1,'sbepp::type_traits::null_value()'],['../classsbepp_1_1char__opt__t.html#a41725a9e107b1e705956cfc118bfd7d5',1,'sbepp::char_opt_t::null_value()'],['../classsbepp_1_1int8__opt__t.html#acf771e03f92cf9ac63a420a1b7051c6e',1,'sbepp::int8_opt_t::null_value()'],['../classsbepp_1_1uint8__opt__t.html#a115cd24c24c57ff42802ffec6c1f26a7',1,'sbepp::uint8_opt_t::null_value()'],['../classsbepp_1_1int16__opt__t.html#a22c1123b6e1af1a1d12e627e2e0a8c71',1,'sbepp::int16_opt_t::null_value()'],['../classsbepp_1_1uint16__opt__t.html#a7211b08127b41552cee4ed931fa60af8',1,'sbepp::uint16_opt_t::null_value()'],['../classsbepp_1_1int32__opt__t.html#a06c746ca8e897adcce3ced1388c109e0',1,'sbepp::int32_opt_t::null_value()'],['../classsbepp_1_1uint32__opt__t.html#aac3078a00ad73e7d5110aad5e8e68a50',1,'sbepp::uint32_opt_t::null_value()'],['../classsbepp_1_1int64__opt__t.html#a7a9c32e68a140f6ae3f43c427754a283',1,'sbepp::int64_opt_t::null_value()'],['../classsbepp_1_1uint64__opt__t.html#ad81b79f64b26d5802fd5678dc2d0bdd0',1,'sbepp::uint64_opt_t::null_value()'],['../classsbepp_1_1float__opt__t.html#abc8557f3fa933ea98caf768598e7d94f',1,'sbepp::float_opt_t::null_value()'],['../classsbepp_1_1double__opt__t.html#a5164685c744584b2d78b826a129a28f5',1,'sbepp::double_opt_t::null_value()']]] +]; diff --git a/1.4.1/search/functions_c.js b/1.4.1/search/functions_c.js new file mode 100644 index 0000000..b80191a --- /dev/null +++ b/1.4.1/search/functions_c.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['offset_0',['offset',['../classsbepp_1_1type__traits.html#adaaae157699ce2ab4935ffa9636f920c',1,'sbepp::type_traits::offset()'],['../classsbepp_1_1enum__traits.html#a2e5af8a5c738266dcd960e5e5812d683',1,'sbepp::enum_traits::offset()'],['../classsbepp_1_1set__traits.html#a625aa85df60e81fdfe50acd71b815a7c',1,'sbepp::set_traits::offset()'],['../classsbepp_1_1composite__traits.html#a0bf3c9004856a6d356a17cd949acd50c',1,'sbepp::composite_traits::offset()'],['../classsbepp_1_1field__traits.html#a8d28426c7e1d1b5428f65da3bd9445d9',1,'sbepp::field_traits::offset()']]], + ['operator_20bool_1',['operator bool',['../classsbepp_1_1detail_1_1optional__base.html#a38fedc762cfb05bb0abf25c1abde297a',1,'sbepp::detail::optional_base']]], + ['operator_2a_2',['operator*',['../classsbepp_1_1detail_1_1bitset__base.html#a55c149fd634e7d1d72e451967f9a66af',1,'sbepp::detail::bitset_base::operator*() noexcept'],['../classsbepp_1_1detail_1_1bitset__base.html#a294da4f166672d95106d667af08f43f2',1,'sbepp::detail::bitset_base::operator*() const noexcept'],['../classsbepp_1_1detail_1_1required__base.html#a6615a8b9c2f761fa2051244ba52dac57',1,'sbepp::detail::required_base::operator*() noexcept'],['../classsbepp_1_1detail_1_1required__base.html#ac7da1724684e57848793d15a969dc11f',1,'sbepp::detail::required_base::operator*() const noexcept'],['../classsbepp_1_1detail_1_1optional__base.html#aed44c71edcb9d852a154cd63f7131cdc',1,'sbepp::detail::optional_base::operator*() noexcept'],['../classsbepp_1_1detail_1_1optional__base.html#ae6762b211da1f64d6c79b71dee8be69b',1,'sbepp::detail::optional_base::operator*() const noexcept']]], + ['operator_3d_3',['operator=',['../classsbepp_1_1cursor.html#ad40cf19febd9ea381ac2a572d9c9afa7',1,'sbepp::cursor']]], + ['operator_5b_5d_4',['operator[]',['../classsbepp_1_1detail_1_1flat__group__base.html#a7a631a0c841e3c1bb51a641a3e957238',1,'sbepp::detail::flat_group_base::operator[]()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a1ae586c96a448c07cf689c25b19fd029',1,'sbepp::detail::static_array_ref::operator[]()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a45cda3ca15223a4fabafa0cdb27506a5',1,'sbepp::detail::dynamic_array_ref::operator[]()']]], + ['optional_5fbase_5',['optional_base',['../classsbepp_1_1detail_1_1optional__base.html#a5584a3a3f8e074c4b3cb3d6fcfabda3b',1,'sbepp::detail::optional_base::optional_base()=default'],['../classsbepp_1_1detail_1_1optional__base.html#a448fd0118d8fefec3fe55cc00f918b02',1,'sbepp::detail::optional_base::optional_base(nullopt_t) noexcept'],['../classsbepp_1_1detail_1_1optional__base.html#ad0e8f5bf65d100e9a42a1834cd6623e0',1,'sbepp::detail::optional_base::optional_base(value_type val) noexcept']]] +]; diff --git a/1.4.1/search/functions_d.js b/1.4.1/search/functions_d.js new file mode 100644 index 0000000..1c3d638 --- /dev/null +++ b/1.4.1/search/functions_d.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['package_0',['package',['../classsbepp_1_1schema__traits.html#a566f5f3e68c427081010e3f7050c146e',1,'sbepp::schema_traits']]], + ['pointer_1',['pointer',['../classsbepp_1_1cursor.html#ac20d80344ad78a32aeea203936ce32c7',1,'sbepp::cursor::pointer() noexcept'],['../classsbepp_1_1cursor.html#a14a745ce53b7345b42ae67b4514a504e',1,'sbepp::cursor::pointer() const noexcept']]], + ['pop_5fback_2',['pop_back',['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a61607728d5839f4ed2b8e5090916e148',1,'sbepp::detail::dynamic_array_ref']]], + ['presence_3',['presence',['../classsbepp_1_1type__traits.html#aba778ee7c8d57f7c4ac2681f9f203846',1,'sbepp::type_traits::presence()'],['../classsbepp_1_1field__traits.html#add48af99ed7dba0b5e3ca3a210f513e0',1,'sbepp::field_traits::presence()']]], + ['push_5fback_4',['push_back',['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a34a7c75fb59e285879bd953c98c7565e',1,'sbepp::detail::dynamic_array_ref']]] +]; diff --git a/1.4.1/search/functions_e.js b/1.4.1/search/functions_e.js new file mode 100644 index 0000000..146941f --- /dev/null +++ b/1.4.1/search/functions_e.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['raw_0',['raw',['../classsbepp_1_1detail_1_1static__array__ref.html#a5dd21b7f6ea885f1a707ee3da056be14',1,'sbepp::detail::static_array_ref::raw()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a6e11538c6bd06b459ff444685889ef01',1,'sbepp::detail::dynamic_array_ref::raw()']]], + ['rbegin_1',['rbegin',['../classsbepp_1_1detail_1_1static__array__ref.html#addc12c2bc16cb23b01600c3e57d35ac4',1,'sbepp::detail::static_array_ref::rbegin()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#acb59720cd29ea9ad42732b3e49fb7fdd',1,'sbepp::detail::dynamic_array_ref::rbegin()']]], + ['rend_2',['rend',['../classsbepp_1_1detail_1_1static__array__ref.html#a08129031f89bb2966ed9c9bac94cd12c',1,'sbepp::detail::static_array_ref::rend()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a1f7852f3d0e1d562c399260497637abc',1,'sbepp::detail::dynamic_array_ref::rend()']]], + ['required_5fbase_3',['required_base',['../classsbepp_1_1detail_1_1required__base.html#a8b1e243938cfea876b2ae1ef49c52aee',1,'sbepp::detail::required_base::required_base()=default'],['../classsbepp_1_1detail_1_1required__base.html#ae72fc28c0a16383db0c88522e0de14df',1,'sbepp::detail::required_base::required_base(value_type val) noexcept']]], + ['resize_4',['resize',['../classsbepp_1_1detail_1_1flat__group__base.html#aab30c6ced657b372c6dff349953df862',1,'sbepp::detail::flat_group_base::resize()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a94d67364c1142558f4646b57f2c14aac',1,'sbepp::detail::nested_group_base::resize()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a45d0b3c8fa6597bf6c3c75d9a1904c25',1,'sbepp::detail::dynamic_array_ref::resize(size_type count) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#acbf9ea93f6c0d94e2fe077c04b25c137',1,'sbepp::detail::dynamic_array_ref::resize(size_type count, value_type value) const noexcept'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a3308cbc7befca03a7fd13d726c46ba57',1,'sbepp::detail::dynamic_array_ref::resize(size_type count, sbepp::default_init_t) const noexcept']]] +]; diff --git a/1.4.1/search/functions_f.js b/1.4.1/search/functions_f.js new file mode 100644 index 0000000..bc54123 --- /dev/null +++ b/1.4.1/search/functions_f.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['sbe_5fsize_0',['sbe_size',['../classsbepp_1_1detail_1_1flat__group__base.html#a2d8dc166146702d728af7f12ff8cecb7',1,'sbepp::detail::flat_group_base::sbe_size()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a7a5dc3e92cefe05d090c077c2dc21d2d',1,'sbepp::detail::nested_group_base::sbe_size()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#a07c3fc7ac3fe8f8900d30d6905f3ebb9',1,'sbepp::detail::dynamic_array_ref::sbe_size()']]], + ['semantic_5ftype_1',['semantic_type',['../classsbepp_1_1type__traits.html#ac9b0cf4d50d50d1bc9882e465c7d1d6d',1,'sbepp::type_traits::semantic_type()'],['../classsbepp_1_1composite__traits.html#a2a059a30076e25c6cae2ea3dbf7310df',1,'sbepp::composite_traits::semantic_type()'],['../classsbepp_1_1message__traits.html#a779d6e4596364c17b400b13ed4deee2f',1,'sbepp::message_traits::semantic_type()'],['../classsbepp_1_1group__traits.html#a9bfb7aca9d1936054fa76e5456e4f6e5',1,'sbepp::group_traits::semantic_type()']]], + ['semantic_5fversion_2',['semantic_version',['../classsbepp_1_1schema__traits.html#a7d5cd7a46358ff4b032ea76a621836ec',1,'sbepp::schema_traits']]], + ['since_5fversion_3',['since_version',['../classsbepp_1_1type__traits.html#adfe562c000ff65a0b7df47901f7de537',1,'sbepp::type_traits::since_version()'],['../classsbepp_1_1enum__traits.html#afbda2d5d27274f24a615aca65f6d674c',1,'sbepp::enum_traits::since_version()'],['../classsbepp_1_1enum__value__traits.html#a90fd98379e5afbb8eef3c88eef6395ae',1,'sbepp::enum_value_traits::since_version()'],['../classsbepp_1_1set__traits.html#afaea817cbf5995b7789805d86a9ba7b3',1,'sbepp::set_traits::since_version()'],['../classsbepp_1_1set__choice__traits.html#ae58862fd15c9bb2ff4de6a5a6e1fc01a',1,'sbepp::set_choice_traits::since_version()'],['../classsbepp_1_1composite__traits.html#a38110a381d5016be4da3c017634262cf',1,'sbepp::composite_traits::since_version()'],['../classsbepp_1_1message__traits.html#a6b44d38daa34a4881ac909af215a6bac',1,'sbepp::message_traits::since_version()'],['../classsbepp_1_1field__traits.html#a79ec220daf5af5ba4330efd8164b6f72',1,'sbepp::field_traits::since_version()'],['../classsbepp_1_1group__traits.html#a853ac0e8b6030f1d0f874b1030f584bb',1,'sbepp::group_traits::since_version()'],['../classsbepp_1_1data__traits.html#a9aec830c560d44ff877c7e0f93cab65e',1,'sbepp::data_traits::since_version()']]], + ['size_4',['size',['../classsbepp_1_1detail_1_1flat__group__base.html#a7e1b0794803482202b68663cb180d2e6',1,'sbepp::detail::flat_group_base::size()'],['../classsbepp_1_1detail_1_1nested__group__base.html#a0d7837dce6459b57de4042364c8c5160',1,'sbepp::detail::nested_group_base::size()'],['../classsbepp_1_1detail_1_1static__array__ref.html#a5d2d9f298405582da167e8648a981857',1,'sbepp::detail::static_array_ref::size()'],['../classsbepp_1_1detail_1_1dynamic__array__ref.html#ae1c72d67c5fdc3d34fae96e5bb9637b2',1,'sbepp::detail::dynamic_array_ref::size()']]], + ['size_5fbytes_5',['size_bytes',['../classsbepp_1_1composite__traits.html#aa3d60fcd7d882b6b6386593d964ec2ad',1,'sbepp::composite_traits::size_bytes()'],['../classsbepp_1_1message__traits.html#a211cee40215d5b7e153047320536cd6c',1,'sbepp::message_traits::size_bytes()'],['../classsbepp_1_1group__traits.html#a036cb645e639a171a206fe3a61e34c8c',1,'sbepp::group_traits::size_bytes()'],['../classsbepp_1_1data__traits.html#af995f36156aa36d168c31355a5e19b41',1,'sbepp::data_traits::size_bytes()'],['../namespacesbepp.html#a9346fd507c2d3760ac40032180d1a7a6',1,'sbepp::size_bytes(T v) noexcept'],['../namespacesbepp.html#a822c5047d62cddfb04c5ab2148ee9391',1,'sbepp::size_bytes(T v, cursor< Byte > c) noexcept']]], + ['size_5fbytes_5fchecked_6',['size_bytes_checked',['../namespacesbepp.html#abd9c1efb3c96d6fa71d1156811b47fa4',1,'sbepp']]], + ['skip_7',['skip',['../namespacesbepp_1_1cursor__ops.html#a1ba1e2668d8e1886dfe03a4f5ddc1eea',1,'sbepp::cursor_ops']]], + ['strlen_8',['strlen',['../classsbepp_1_1detail_1_1static__array__ref.html#a1e2ded095d44aead9e9d3bb51b19f24f',1,'sbepp::detail::static_array_ref']]], + ['strlen_5fr_9',['strlen_r',['../classsbepp_1_1detail_1_1static__array__ref.html#aba31d1b71c89e974a642de24de7c43bb',1,'sbepp::detail::static_array_ref']]] +]; diff --git a/1.4.1/search/groups_0.js b/1.4.1/search/groups_0.js new file mode 100644 index 0000000..ff867eb --- /dev/null +++ b/1.4.1/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['compiler_20features_0',['Compiler features',['../group__compiler-features.html',1,'']]] +]; diff --git a/1.4.1/search/groups_1.js b/1.4.1/search/groups_1.js new file mode 100644 index 0000000..63953c2 --- /dev/null +++ b/1.4.1/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['features_0',['Compiler features',['../group__compiler-features.html',1,'']]] +]; diff --git a/1.4.1/search/groups_2.js b/1.4.1/search/groups_2.js new file mode 100644 index 0000000..da97e9f --- /dev/null +++ b/1.4.1/search/groups_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_0',['Traits list',['../group__traits-list.html',1,'']]] +]; diff --git a/1.4.1/search/groups_3.js b/1.4.1/search/groups_3.js new file mode 100644 index 0000000..990bf1e --- /dev/null +++ b/1.4.1/search/groups_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['traits_20list_0',['Traits list',['../group__traits-list.html',1,'']]] +]; diff --git a/1.4.1/search/mag.svg b/1.4.1/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/1.4.1/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/1.4.1/search/mag_d.svg b/1.4.1/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/1.4.1/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/1.4.1/search/mag_sel.svg b/1.4.1/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/1.4.1/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/1.4.1/search/mag_seld.svg b/1.4.1/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/1.4.1/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/1.4.1/search/namespaces_0.js b/1.4.1/search/namespaces_0.js new file mode 100644 index 0000000..ab9af8f --- /dev/null +++ b/1.4.1/search/namespaces_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['sbepp_0',['sbepp',['../namespacesbepp.html',1,'']]], + ['sbepp_3a_3acursor_5fops_1',['cursor_ops',['../namespacesbepp_1_1cursor__ops.html',1,'sbepp']]], + ['sbepp_3a_3adetail_2',['detail',['../namespacesbepp_1_1detail.html',1,'sbepp']]] +]; diff --git a/1.4.1/search/pages_0.js b/1.4.1/search/pages_0.js new file mode 100644 index 0000000..f5996bf --- /dev/null +++ b/1.4.1/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['api_0',['Visit API',['../visit-api.html',1,'']]] +]; diff --git a/1.4.1/search/pages_1.js b/1.4.1/search/pages_1.js new file mode 100644 index 0000000..c2a2779 --- /dev/null +++ b/1.4.1/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['benchmarks_0',['Benchmarks',['../benchmarks.html',1,'']]] +]; diff --git a/1.4.1/search/pages_2.js b/1.4.1/search/pages_2.js new file mode 100644 index 0000000..044ef0a --- /dev/null +++ b/1.4.1/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['compiler_0',['Using the schema compiler',['../sbeppc.html',1,'']]] +]; diff --git a/1.4.1/search/pages_3.js b/1.4.1/search/pages_3.js new file mode 100644 index 0000000..4d85845 --- /dev/null +++ b/1.4.1/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/1.4.1/search/pages_4.js b/1.4.1/search/pages_4.js new file mode 100644 index 0000000..2572221 --- /dev/null +++ b/1.4.1/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['examples_0',['Examples',['../examples.html',1,'']]] +]; diff --git a/1.4.1/search/pages_5.js b/1.4.1/search/pages_5.js new file mode 100644 index 0000000..079290c --- /dev/null +++ b/1.4.1/search/pages_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['installation_0',['Installation',['../installation.html',1,'']]], + ['integration_20into_20your_20project_1',['Integration into your project',['../integration.html',1,'']]], + ['into_20your_20project_2',['Integration into your project',['../integration.html',1,'']]] +]; diff --git a/1.4.1/search/pages_6.js b/1.4.1/search/pages_6.js new file mode 100644 index 0000000..1ad91e3 --- /dev/null +++ b/1.4.1/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/1.4.1/search/pages_7.js b/1.4.1/search/pages_7.js new file mode 100644 index 0000000..0398f4f --- /dev/null +++ b/1.4.1/search/pages_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['overview_0',['Overview',['../index.html',1,'']]] +]; diff --git a/1.4.1/search/pages_8.js b/1.4.1/search/pages_8.js new file mode 100644 index 0000000..0139fb4 --- /dev/null +++ b/1.4.1/search/pages_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['primitives_0',['Stringification primitives',['../stringification.html',1,'']]], + ['project_1',['Integration into your project',['../integration.html',1,'']]] +]; diff --git a/1.4.1/search/pages_9.js b/1.4.1/search/pages_9.js new file mode 100644 index 0000000..bf7811d --- /dev/null +++ b/1.4.1/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['representation_0',['Schema representation',['../representation.html',1,'']]] +]; diff --git a/1.4.1/search/pages_a.js b/1.4.1/search/pages_a.js new file mode 100644 index 0000000..1be54e2 --- /dev/null +++ b/1.4.1/search/pages_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['schema_20compiler_0',['Using the schema compiler',['../sbeppc.html',1,'']]], + ['schema_20representation_1',['Schema representation',['../representation.html',1,'']]], + ['stringification_20primitives_2',['Stringification primitives',['../stringification.html',1,'']]] +]; diff --git a/1.4.1/search/pages_b.js b/1.4.1/search/pages_b.js new file mode 100644 index 0000000..dfe38af --- /dev/null +++ b/1.4.1/search/pages_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['the_20schema_20compiler_0',['Using the schema compiler',['../sbeppc.html',1,'']]], + ['traits_1',['Traits',['../traits.html',1,'']]] +]; diff --git a/1.4.1/search/pages_c.js b/1.4.1/search/pages_c.js new file mode 100644 index 0000000..035a258 --- /dev/null +++ b/1.4.1/search/pages_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['using_20the_20schema_20compiler_0',['Using the schema compiler',['../sbeppc.html',1,'']]] +]; diff --git a/1.4.1/search/pages_d.js b/1.4.1/search/pages_d.js new file mode 100644 index 0000000..6f67e1e --- /dev/null +++ b/1.4.1/search/pages_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['visit_20api_0',['Visit API',['../visit-api.html',1,'']]] +]; diff --git a/1.4.1/search/pages_e.js b/1.4.1/search/pages_e.js new file mode 100644 index 0000000..f7bc40c --- /dev/null +++ b/1.4.1/search/pages_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['your_20project_0',['Integration into your project',['../integration.html',1,'']]] +]; diff --git a/1.4.1/search/related_0.js b/1.4.1/search/related_0.js new file mode 100644 index 0000000..d3c683f --- /dev/null +++ b/1.4.1/search/related_0.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['operator_21_3d_0',['operator!=',['../classsbepp_1_1detail_1_1bitset__base.html#aef491dc98b3eb25722425cbb95ba4744',1,'sbepp::detail::bitset_base::operator!='],['../classsbepp_1_1detail_1_1required__base.html#a5fd1549b7b95017eeb1a6a8886d42ab6',1,'sbepp::detail::required_base::operator!='],['../classsbepp_1_1detail_1_1optional__base.html#a29c60222da3b2f5ca2cd966c807f448b',1,'sbepp::detail::optional_base::operator!=']]], + ['operator_3c_1',['operator<',['../classsbepp_1_1detail_1_1required__base.html#ab2d043a2687ca5a711d53dc96a997fe9',1,'sbepp::detail::required_base::operator<'],['../classsbepp_1_1detail_1_1optional__base.html#a0321dd26a52eedb9b06600ef8dc9501d',1,'sbepp::detail::optional_base::operator<']]], + ['operator_3c_3d_2',['operator<=',['../classsbepp_1_1detail_1_1required__base.html#aca77edb88ade9fe2c734865861c00e3f',1,'sbepp::detail::required_base::operator<='],['../classsbepp_1_1detail_1_1optional__base.html#a31a03308d5620d572e5745c5e4892d29',1,'sbepp::detail::optional_base::operator<=']]], + ['operator_3c_3d_3e_3',['operator<=>',['../classsbepp_1_1detail_1_1required__base.html#ae603655d322cdbb43304a9c3fbd25e9c',1,'sbepp::detail::required_base::operator<=>'],['../classsbepp_1_1detail_1_1optional__base.html#af9693d0d4a0c754e6bb111c69333dfec',1,'sbepp::detail::optional_base::operator<=>']]], + ['operator_3d_3d_4',['operator==',['../classsbepp_1_1detail_1_1bitset__base.html#a2d338f6e17f7ac9a6c90f33d31802347',1,'sbepp::detail::bitset_base::operator=='],['../classsbepp_1_1detail_1_1required__base.html#a706e5340ab700f60a8b8c8280d437380',1,'sbepp::detail::required_base::operator=='],['../classsbepp_1_1detail_1_1optional__base.html#af29c05ce41885297bf1851c281b3bcfb',1,'sbepp::detail::optional_base::operator==']]], + ['operator_3e_5',['operator>',['../classsbepp_1_1detail_1_1required__base.html#a0a220179854bc5b4203fba5def9c7626',1,'sbepp::detail::required_base::operator>'],['../classsbepp_1_1detail_1_1optional__base.html#ae4bd79af6b3ededa779f5995d185b947',1,'sbepp::detail::optional_base::operator>']]], + ['operator_3e_3d_6',['operator>=',['../classsbepp_1_1detail_1_1required__base.html#a32116c6fa9d0ac885430c13d2c63725f',1,'sbepp::detail::required_base::operator>='],['../classsbepp_1_1detail_1_1optional__base.html#a5bdb6d4fd37359ab7d45624be2487053',1,'sbepp::detail::optional_base::operator>=']]] +]; diff --git a/1.4.1/search/search.css b/1.4.1/search/search.css new file mode 100644 index 0000000..d7b0f90 --- /dev/null +++ b/1.4.1/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #EEF1F7; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EEF1F7; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/1.4.1/search/search.js b/1.4.1/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/1.4.1/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + + +sbepp: Stringification primitives + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Stringification primitives
    +
    +
    +

    Deprecated
    Functionality described on this page is deprecated in favor of more generic sbepp::visit. You can find up-to-date stringification example here.
    +

    Instead of providing fully-fledged stringification mechanism out of the box, sbepp provides only low-level primitives which in pair with Visit API can be used to build to_string()-like routine that uses a specific formatting/output mechanisms.
    + For most field types their raw value is enough to produce human-readable representation. The only exceptions are enums, for which we need enumerator's name, and sets, for which we need choice names. These two cases are covered by sbepp::enum_to_string() and sbepp::visit_set().

    +
    +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1byte__type-members.html b/1.4.1/structsbepp_1_1byte__type-members.html new file mode 100644 index 0000000..bb7ef16 --- /dev/null +++ b/1.4.1/structsbepp_1_1byte__type-members.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sbepp::byte_type< View > Member List
    +
    +
    + +

    This is the complete list of members for sbepp::byte_type< View >, including all inherited members.

    + + +
    type typedefsbepp::byte_type< View >
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1byte__type.html b/1.4.1/structsbepp_1_1byte__type.html new file mode 100644 index 0000000..4fba60f --- /dev/null +++ b/1.4.1/structsbepp_1_1byte__type.html @@ -0,0 +1,145 @@ + + + + + + + + +sbepp: sbepp::byte_type< View > Struct Template Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp::byte_type< View > Struct Template Reference
    +
    +
    + +

    Trait to get view's byte type. + More...

    + +

    #include <sbepp.hpp>

    + + + + + +

    +Public Types

    +using type
     holds View's byte type
     
    +

    Detailed Description

    +
    template<typename View>
    +struct sbepp::byte_type< View >

    Trait to get view's byte type.

    +
    Template Parameters
    + + +
    Viewview type
    +
    +
    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1byte__type.js b/1.4.1/structsbepp_1_1byte__type.js new file mode 100644 index 0000000..b7c569e --- /dev/null +++ b/1.4.1/structsbepp_1_1byte__type.js @@ -0,0 +1,4 @@ +var structsbepp_1_1byte__type = +[ + [ "type", "structsbepp_1_1byte__type.html#a5309c044561c3ad72f35fa55f6d61ed7", null ] +]; \ No newline at end of file diff --git a/1.4.1/structsbepp_1_1default__init__t-members.html b/1.4.1/structsbepp_1_1default__init__t-members.html new file mode 100644 index 0000000..cd66add --- /dev/null +++ b/1.4.1/structsbepp_1_1default__init__t-members.html @@ -0,0 +1,118 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sbepp::default_init_t Member List
    +
    +
    + +

    This is the complete list of members for sbepp::default_init_t, including all inherited members.

    +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1default__init__t.html b/1.4.1/structsbepp_1_1default__init__t.html new file mode 100644 index 0000000..aa08d54 --- /dev/null +++ b/1.4.1/structsbepp_1_1default__init__t.html @@ -0,0 +1,129 @@ + + + + + + + + +sbepp: sbepp::default_init_t Struct Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp::default_init_t Struct Reference
    +
    +
    + +

    tag for dynamic_array_ref::resize(). Used to skip value initialization. + More...

    + +

    #include <sbepp.hpp>

    +

    Detailed Description

    +

    tag for dynamic_array_ref::resize(). Used to skip value initialization.

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1is__enum.html b/1.4.1/structsbepp_1_1is__enum.html new file mode 100644 index 0000000..f67ca55 --- /dev/null +++ b/1.4.1/structsbepp_1_1is__enum.html @@ -0,0 +1,130 @@ + + + + + + + + +sbepp: sbepp::is_enum< T, typename > Struct Template Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sbepp::is_enum< T, typename > Struct Template Reference
    +
    +
    + +

    Checks if T is an enumeration. + More...

    + +

    #include <sbepp.hpp>

    + +

    Inherits std::false_type.

    +

    Detailed Description

    +
    template<typename T, typename = void>
    +struct sbepp::is_enum< T, typename >

    Checks if T is an enumeration.

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1nullopt__t-members.html b/1.4.1/structsbepp_1_1nullopt__t-members.html new file mode 100644 index 0000000..63d497e --- /dev/null +++ b/1.4.1/structsbepp_1_1nullopt__t-members.html @@ -0,0 +1,118 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sbepp::nullopt_t Member List
    +
    +
    + +

    This is the complete list of members for sbepp::nullopt_t, including all inherited members.

    +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1nullopt__t.html b/1.4.1/structsbepp_1_1nullopt__t.html new file mode 100644 index 0000000..3638abd --- /dev/null +++ b/1.4.1/structsbepp_1_1nullopt__t.html @@ -0,0 +1,129 @@ + + + + + + + + +sbepp: sbepp::nullopt_t Struct Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp::nullopt_t Struct Reference
    +
    +
    + +

    Tag type used to initialize optional types with null value. + More...

    + +

    #include <sbepp.hpp>

    +

    Detailed Description

    +

    Tag type used to initialize optional types with null value.

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1size__bytes__checked__result-members.html b/1.4.1/structsbepp_1_1size__bytes__checked__result-members.html new file mode 100644 index 0000000..cf12a35 --- /dev/null +++ b/1.4.1/structsbepp_1_1size__bytes__checked__result-members.html @@ -0,0 +1,121 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sbepp::size_bytes_checked_result Member List
    +
    +
    + +

    This is the complete list of members for sbepp::size_bytes_checked_result, including all inherited members.

    + + + +
    sizesbepp::size_bytes_checked_result
    validsbepp::size_bytes_checked_result
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1size__bytes__checked__result.html b/1.4.1/structsbepp_1_1size__bytes__checked__result.html new file mode 100644 index 0000000..5cbc77a --- /dev/null +++ b/1.4.1/structsbepp_1_1size__bytes__checked__result.html @@ -0,0 +1,142 @@ + + + + + + + + +sbepp: sbepp::size_bytes_checked_result Struct Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp::size_bytes_checked_result Struct Reference
    +
    +
    + +

    Result type of size_bytes_checked + More...

    + +

    #include <sbepp.hpp>

    + + + + + + + + +

    +Public Attributes

    +bool valid
     Denotes whether size is valid.
     
    +std::size_t size
     Calculated size, valid only if valid == true
     
    +

    Detailed Description

    +

    Result type of size_bytes_checked

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1size__bytes__checked__result.js b/1.4.1/structsbepp_1_1size__bytes__checked__result.js new file mode 100644 index 0000000..68f1338 --- /dev/null +++ b/1.4.1/structsbepp_1_1size__bytes__checked__result.js @@ -0,0 +1,5 @@ +var structsbepp_1_1size__bytes__checked__result = +[ + [ "size", "structsbepp_1_1size__bytes__checked__result.html#aac927165dbd01e54d4f83e3a9be39266", null ], + [ "valid", "structsbepp_1_1size__bytes__checked__result.html#a9627848534794b032e8c5e53e796b83d", null ] +]; \ No newline at end of file diff --git a/1.4.1/structsbepp_1_1traits__tag-members.html b/1.4.1/structsbepp_1_1traits__tag-members.html new file mode 100644 index 0000000..f87f0ee --- /dev/null +++ b/1.4.1/structsbepp_1_1traits__tag-members.html @@ -0,0 +1,120 @@ + + + + + + + + +sbepp: Member List + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sbepp::traits_tag< ValueType > Member List
    +
    +
    + +

    This is the complete list of members for sbepp::traits_tag< ValueType >, including all inherited members.

    + + +
    type typedefsbepp::traits_tag< ValueType >
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1traits__tag.html b/1.4.1/structsbepp_1_1traits__tag.html new file mode 100644 index 0000000..835842f --- /dev/null +++ b/1.4.1/structsbepp_1_1traits__tag.html @@ -0,0 +1,156 @@ + + + + + + + + +sbepp: sbepp::traits_tag< ValueType > Struct Template Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    sbepp::traits_tag< ValueType > Struct Template Reference
    +
    +
    + +

    Maps representation type to its tag. + More...

    + + + + + +

    +Public Types

    +using type = Tag
     Tag to access ValueType's traits.
     
    +

    Detailed Description

    +
    template<typename ValueType>
    +struct sbepp::traits_tag< ValueType >

    Maps representation type to its tag.

    +
    Template Parameters
    + + +
    ValueTyperepresentation type
    +
    +
    +

    Can be used to avoid typing both representation and tag types explicitly in code. Available for messages, groups and all schema types except numeric constants. Not available for <data> members.

    +

    Example:

    template<typename Message>
    +
    void send_message(Message m){
    +
    constexpr auto msg_name = sbepp::message_traits<
    + +
    log("sending `{}` message", msg_name);
    + +
    }
    +
    Provides various traits/attributes of a <message> element.
    Definition sbepp.hpp:4334
    +
    typename traits_tag< ValueType >::type traits_tag_t
    Shorthand for sbepp::traits_tag<T>::type
    Definition sbepp.hpp:4647
    +
    constexpr auto addressof(T v) noexcept -> decltype(v(detail::addressof_tag{}))
    Returns pointer to the underlying data referenced by a view.
    Definition sbepp.hpp:1619
    +
    constexpr std::size_t size_bytes(T v) noexcept
    Returns the size of the underlying data represented by message/group/entry/data/composite view,...
    Definition sbepp.hpp:1580
    +
    See also
    sbepp::traits_tag_t
    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/1.4.1/structsbepp_1_1traits__tag.js b/1.4.1/structsbepp_1_1traits__tag.js new file mode 100644 index 0000000..2d0e687 --- /dev/null +++ b/1.4.1/structsbepp_1_1traits__tag.js @@ -0,0 +1,4 @@ +var structsbepp_1_1traits__tag = +[ + [ "type", "structsbepp_1_1traits__tag.html#a18958c7e8785cc5a83cb1cee0873d588", null ] +]; \ No newline at end of file diff --git a/1.4.1/structsbepp_1_1unknown__enum__value__tag.html b/1.4.1/structsbepp_1_1unknown__enum__value__tag.html new file mode 100644 index 0000000..f0403bd --- /dev/null +++ b/1.4.1/structsbepp_1_1unknown__enum__value__tag.html @@ -0,0 +1,128 @@ + + + + + + + + +sbepp: sbepp::unknown_enum_value_tag Struct Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sbepp::unknown_enum_value_tag Struct Reference
    +
    +
    + +

    Tag for unknown enum values. + More...

    + +

    #include <sbepp.hpp>

    +

    Detailed Description

    +

    Tag for unknown enum values.

    +

    Passed to on_enum_value callback by sbepp::visit() for unknown enum values. sbepp::enum_value_traits is not defined for it.

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/1.4.1/sync_off.png b/1.4.1/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/1.4.1/sync_off.png differ diff --git a/1.4.1/sync_on.png b/1.4.1/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/1.4.1/sync_on.png differ diff --git a/1.4.1/tab_a.png b/1.4.1/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/1.4.1/tab_a.png differ diff --git a/1.4.1/tab_ad.png b/1.4.1/tab_ad.png new file mode 100644 index 0000000..e34850a Binary files /dev/null and b/1.4.1/tab_ad.png differ diff --git a/1.4.1/tab_b.png b/1.4.1/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/1.4.1/tab_b.png differ diff --git a/1.4.1/tab_bd.png b/1.4.1/tab_bd.png new file mode 100644 index 0000000..91c2524 Binary files /dev/null and b/1.4.1/tab_bd.png differ diff --git a/1.4.1/tab_h.png b/1.4.1/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/1.4.1/tab_h.png differ diff --git a/1.4.1/tab_hd.png b/1.4.1/tab_hd.png new file mode 100644 index 0000000..2489273 Binary files /dev/null and b/1.4.1/tab_hd.png differ diff --git a/1.4.1/tab_s.png b/1.4.1/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/1.4.1/tab_s.png differ diff --git a/1.4.1/tab_sd.png b/1.4.1/tab_sd.png new file mode 100644 index 0000000..757a565 Binary files /dev/null and b/1.4.1/tab_sd.png differ diff --git a/1.4.1/tabs.css b/1.4.1/tabs.css new file mode 100644 index 0000000..6c21d61 --- /dev/null +++ b/1.4.1/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} \ No newline at end of file diff --git a/1.4.1/traits.html b/1.4.1/traits.html new file mode 100644 index 0000000..da88ea7 --- /dev/null +++ b/1.4.1/traits.html @@ -0,0 +1,183 @@ + + + + + + + + +sbepp: Traits + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Traits
    +
    +
    +

    sbepp provides a way to access nearly all information provided by XML schema and other useful properties via traits mechanism.

    +
    +

    +Tags

    +

    To access any trait you need a schema entity's tag. Tag is basically a path to an entity. The tag for a schema itself (for sbepp::schema_traits) is <schema_name>::schema. Tags for messages have form <schema_name>::schema::messages::<msg_name> and tags for types <schema_name>::schema::types::<type_name>. Here's an example:

    +
    <?xml version="1.0" encoding="UTF-8"?>
    +
    <!-- schema_name::schema -->
    +
    <sbe:messageSchema package="schema_name">
    +
    <types>
    +
    <!-- schema_name::schema::types::uint32_req -->
    +
    <type name="uint32_req" primitiveType="uint32"/>
    +
    +
    <!-- schema_name::schema::types::numbers -->
    +
    <enum name="numbers" encodingType="uint8">
    +
    <!-- schema_name::schema::types::numbers::One -->
    +
    <validValue name="One">1</validValue>
    +
    <!-- schema_name::schema::types::numbers::Two -->
    +
    <validValue name="Two">2</validValue>
    +
    </enum>
    +
    +
    <!-- schema_name::schema::types::options -->
    +
    <set name="options" encodingType="uint8">
    +
    <!-- schema_name::schema::types::options::A -->
    +
    <choice name="A">0</choice>
    +
    <!-- schema_name::schema::types::options::B -->
    +
    <choice name="B">2</choice>
    +
    </set>
    +
    +
    <!-- schema_name::schema::types::groupSizeEncoding -->
    +
    <composite name="groupSizeEncoding">
    +
    <!-- schema_name::schema::types::groupSizeEncoding::blockLength -->
    +
    <type name="blockLength" primitiveType="uint16"/>
    +
    <!-- schema_name::schema::types::groupSizeEncoding::numInGroup -->
    +
    <type name="numInGroup" primitiveType="uint16"/>
    +
    </composite>
    +
    </types>
    +
    +
    <!-- schema_name::schema::messages::msg -->
    +
    <sbe:message name="msg" id="1">
    +
    <!-- schema_name::schema::messages::msg::field -->
    +
    <field name="field" id="1" type="uint32"/>
    +
    +
    <!-- schema_name::schema::messages::msg::group -->
    +
    <group name="group" id="2">
    +
    <!-- schema_name::schema::messages::msg::group::field -->
    +
    <field name="field" id="1" type="uint32"/>
    +
    </group>
    +
    +
    <!-- schema_name::schema::messages::msg::data -->
    +
    <data name="data" id="3" type="varDataEncoding"/>
    +
    </sbe:message>
    +
    </sbe:messageSchema>
    +

    For built-in types like sbepp::char_t, the type itself works as a tag, e.g.

    +
    // get maxValue of a built-in required `char` type
    + +
    static constexpr primitive_type max_value() noexcept
    Returns maxValue. Available only if length() == 1 and presence() != field_presence::constant
    +

    +

    +Using traits

    +

    Similar to std::numeric_limits, sbepp traits are accessed like trait_name<Tag>::value():

    +
    + +
    static constexpr version_t version() noexcept
    Returns version attribute.
    +
    static constexpr primitive_type null_value() noexcept
    Returns nullValue. Available only if length() == 1 and presence() == field_presence::optional
    +

    For the list of available traits see Traits list.

    +
    See also
    sbepp::traits_tag
    +
    +
    +
    + + + + diff --git a/1.4.1/usergroup0.html b/1.4.1/usergroup0.html new file mode 100644 index 0000000..8bd6e01 --- /dev/null +++ b/1.4.1/usergroup0.html @@ -0,0 +1,123 @@ + + + + + + + + +sbepp: Using generated code + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Using generated code
    +
    + +
    + + + + diff --git a/1.4.1/usergroup1.html b/1.4.1/usergroup1.html new file mode 100644 index 0000000..82ac138 --- /dev/null +++ b/1.4.1/usergroup1.html @@ -0,0 +1,127 @@ + + + + + + + + +sbepp: API Reference + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    API Reference
    +
    + +
    + + + + diff --git a/1.4.1/version_selector_handler.js b/1.4.1/version_selector_handler.js new file mode 100644 index 0000000..2461380 --- /dev/null +++ b/1.4.1/version_selector_handler.js @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +// Copyright (c) 2024, Oleksandr Koval + +$(function () { + var repoName = window.location.pathname.split('/')[1]; + $.get('/' + repoName + '/version_selector.html', function (data) { + // Inject version selector HTML into the page + $('#projectnumber').html(data); + + // Event listener to handle version selection + document.getElementById('versionSelector').addEventListener('change', function () { + var selectedVersion = this.value; + window.location.href = '/' + repoName + '/' + selectedVersion + '/index.html'; + }); + + // Set the selected option based on the current version + var currentVersion = window.location.pathname.split('/')[2]; + $('#versionSelector').val(currentVersion); + }); +}); diff --git a/1.4.1/visit-api.html b/1.4.1/visit-api.html new file mode 100644 index 0000000..2af4452 --- /dev/null +++ b/1.4.1/visit-api.html @@ -0,0 +1,200 @@ + + + + + + + + +sbepp: Visit API + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    sbepp +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Visit API
    +
    +
    +

    Visit API provides a way to access various SBE entities and iterate over their inner parts. It can be used for stringification or conversion to another data format. sbepp uses this mechanism to implement sbepp::size_bytes_checked() to gradually iterate over message parts and check that it fits into a buffer.

    +

    The API is based on two functions, sbepp::visit() and sbepp::visit_children(). They have different behavior but both have the same set of overloads:

      +
    • Visitor&& f(ThingToVisit, Visitor&&)
    • +
    • Visitor&& f(ThingToVisit, Cursor&, Visitor&&)
    • +
    +

    To be efficient, Visit API always uses cursors under the hood, the first overload creates it implicitly, the second relies on the provided one. Visitor is an object with member functions in form of void/bool on_<entity type>(EntityValue, [Cursor&,] EntityTag), where <entity type> corresponds to schema entity being visited, e.g. on_message, on_group, etc. When return type is bool, returned value works as a stop-flag, i.e., setting it to true stops further visiting. As described above, Visit API relies on cursor accessors, additional Cursor& parameter allows to pass the cursor to a nested sbepp::visit()/sbepp::visit_children() call. EntityTag represents a tag of an entity.

    +

    Note that visitor is not required to have all possible on_<entity type>() functions but only those that correspond to the structure of the object being visited. For example, composite visitor doesn't need on_group() function. If it has only type members, having on_type() is enough to visit it.

    +

    In general, visiting has two parts:

    +

    However, this order is not required, each call can be used independently from the other. For example, if one wants to visit composite members but not the composite object itself, there's nothing wrong with calling only sbepp::visit_children() without sbepp::visit().

    +
    +

    +Visiting parent views

    +

    Message/group/entry/composite views are called "parent" in this context because they are the only ones that can contain nested/children members. For them, sbepp::visit() visits only the provided view itself. Here's a complete visitor interface for such a call:

    +
    class parent_visitor
    +
    {
    +
    public:
    +
    template<typename T, typename Cursor, typename Tag>
    +
    void on_message(T message, Cursor& c, Tag);
    +
    +
    template<typename T, typename Cursor, typename Tag>
    +
    bool on_group(T group, Cursor& c, Tag);
    +
    +
    template<typename T, typename Cursor, typename Tag>
    +
    bool on_entry(T entry, Cursor& c, Tag);
    +
    +
    template<typename T, typename Tag>
    +
    bool on_composite(T composite, Tag);
    +
    };
    +

    For message, group and entry visitors, Cursor& is provided to support efficient children visiting. For composites it's not needed because they support efficient member access without cursors.

    +
    +

    +Visiting children

    +

    sbepp::visit_children() visits children of a parent view in the following way:

      +
    • for message and group entry, visits their direct field/group/data members in schema order
    • +
    • for group, visits all its entries
    • +
    • for composite, visits its type/enum/set/composite direct members in schema order
    • +
    +

    Here's a corresponding visitor interface:

    +
    class children_visitor
    +
    {
    +
    public:
    +
    template<typename T, typename Cursor, typename Tag>
    +
    bool on_group(T group, Cursor& c, Tag);
    +
    +
    template<typename T, typename Cursor, typename Tag>
    +
    bool on_entry(T entry, Cursor& c, Tag);
    +
    +
    template<typename T, typename Tag>
    +
    bool on_composite(T composite, Tag);
    +
    +
    template<typename T, typename Tag>
    +
    bool on_data(T data, Tag);
    +
    +
    template<typename T, typename Tag>
    +
    bool on_field(T field, Tag);
    +
    +
    template<typename T, typename Tag>
    +
    bool on_type(T type, Tag);
    +
    +
    template<typename T, typename Tag>
    +
    bool on_enum(T enumeration, Tag);
    +
    +
    template<typename T, typename Tag>
    +
    bool on_set(T set, Tag);
    +
    };
    +

    Note that a field can be represented by type/enum/set/composite so traits/concepts are often needed to distinguish them for further processing (e.g. sbepp::is_type, sbepp::composite).

    +
    +

    +Visiting enums and sets

    +

    When sbepp::visit() is applied to a set, it visits all its known choices and passes their values/tags to a visitor via the following function:

    +
    class set_visitor{
    +
    template<typename Tag>
    +
    void on_set_choice(bool choice_value, Tag);
    +
    };
    +

    For enums, sbepp::visit() invokes visitor with enum value and its tag. When value is not one of the ones defined in schema, it provides sbepp::unknown_enum_value_tag as a tag. The visitor interface is:

    +
    class enum_visitor{
    +
    template<typename T, typename Tag>
    +
    void on_enum_value(T enumeration, Tag);
    +
    };
    +

    See stringification example for an example of how all of the above can be used together to implement to_string()-like functionality.

    +
    +
    +
    + + + +