1#ifndef SOURCEMETA_BLAZE_BINPACK_ENCODING_H_
2#define SOURCEMETA_BLAZE_BINPACK_ENCODING_H_
4#include <sourcemeta/core/json.h>
5#include <sourcemeta/core/numeric.h>
12namespace sourcemeta::blaze {
468namespace any_packed_type_tag_byte_prefix {
469constexpr auto TYPE_SIZE = 3;
470constexpr std::uint8_t TYPE_SHARED_STRING = 0b00000000;
471constexpr std::uint8_t TYPE_STRING = 0b00000001;
472constexpr std::uint8_t TYPE_LONG_STRING = 0b00000010;
473constexpr std::uint8_t TYPE_OBJECT = 0b00000011;
474constexpr std::uint8_t TYPE_ARRAY = 0b00000100;
475constexpr std::uint8_t TYPE_POSITIVE_INTEGER_BYTE = 0b00000101;
476constexpr std::uint8_t TYPE_NEGATIVE_INTEGER_BYTE = 0b00000110;
477constexpr std::uint8_t TYPE_OTHER = 0b00000111;
478static_assert(TYPE_SHARED_STRING <= sourcemeta::core::uint_max<TYPE_SIZE>);
479static_assert(TYPE_STRING <= sourcemeta::core::uint_max<TYPE_SIZE>);
480static_assert(TYPE_LONG_STRING <= sourcemeta::core::uint_max<TYPE_SIZE>);
481static_assert(TYPE_OBJECT <= sourcemeta::core::uint_max<TYPE_SIZE>);
482static_assert(TYPE_ARRAY <= sourcemeta::core::uint_max<TYPE_SIZE>);
483static_assert(TYPE_POSITIVE_INTEGER_BYTE <=
484 sourcemeta::core::uint_max<TYPE_SIZE>);
485static_assert(TYPE_NEGATIVE_INTEGER_BYTE <=
486 sourcemeta::core::uint_max<TYPE_SIZE>);
487static_assert(TYPE_OTHER <= sourcemeta::core::uint_max<TYPE_SIZE>);
489constexpr auto SUBTYPE_SIZE = 5;
490constexpr std::uint8_t SUBTYPE_FALSE = 0b00000000;
491constexpr std::uint8_t SUBTYPE_TRUE = 0b00000001;
492constexpr std::uint8_t SUBTYPE_NULL = 0b00000010;
493constexpr std::uint8_t SUBTYPE_POSITIVE_INTEGER = 0b00000011;
494constexpr std::uint8_t SUBTYPE_NEGATIVE_INTEGER = 0b00000100;
495constexpr std::uint8_t SUBTYPE_NUMBER = 0b00000101;
496constexpr std::uint8_t SUBTYPE_POSITIVE_REAL_INTEGER_BYTE = 0b00000110;
497constexpr std::uint8_t SUBTYPE_LONG_STRING_BASE_EXPONENT_7 = 0b00000111;
498constexpr std::uint8_t SUBTYPE_LONG_STRING_BASE_EXPONENT_8 = 0b00001000;
499constexpr std::uint8_t SUBTYPE_LONG_STRING_BASE_EXPONENT_9 = 0b00001001;
500constexpr std::uint8_t SUBTYPE_LONG_STRING_BASE_EXPONENT_10 = 0b00001010;
501constexpr std::uint8_t SUBTYPE_DECIMAL = 0b00001011;
503static_assert(SUBTYPE_FALSE <= sourcemeta::core::uint_max<SUBTYPE_SIZE>);
504static_assert(SUBTYPE_TRUE <= sourcemeta::core::uint_max<SUBTYPE_SIZE>);
505static_assert(SUBTYPE_NULL <= sourcemeta::core::uint_max<SUBTYPE_SIZE>);
506static_assert(SUBTYPE_POSITIVE_INTEGER <=
507 sourcemeta::core::uint_max<SUBTYPE_SIZE>);
508static_assert(SUBTYPE_NEGATIVE_INTEGER <=
509 sourcemeta::core::uint_max<SUBTYPE_SIZE>);
510static_assert(SUBTYPE_NUMBER <= sourcemeta::core::uint_max<SUBTYPE_SIZE>);
511static_assert(SUBTYPE_POSITIVE_REAL_INTEGER_BYTE <=
512 sourcemeta::core::uint_max<SUBTYPE_SIZE>);
513static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_7 <=
514 sourcemeta::core::uint_max<SUBTYPE_SIZE>);
515static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_8 <=
516 sourcemeta::core::uint_max<SUBTYPE_SIZE>);
517static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_9 <=
518 sourcemeta::core::uint_max<SUBTYPE_SIZE>);
519static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_10 <=
520 sourcemeta::core::uint_max<SUBTYPE_SIZE>);
521static_assert(SUBTYPE_DECIMAL <= sourcemeta::core::uint_max<SUBTYPE_SIZE>);
524static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_7 == 7);
525static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_8 == 8);
526static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_9 == 9);
527static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_10 == 10);
std::variant< BOUNDED_MULTIPLE_8BITS_ENUM_FIXED, FLOOR_MULTIPLE_ENUM_VARINT, ROOF_MULTIPLE_MIRROR_ENUM_VARINT, ARBITRARY_MULTIPLE_ZIGZAG_VARINT, DOUBLE_VARINT_TUPLE, BYTE_CHOICE_INDEX, LARGE_CHOICE_INDEX, TOP_LEVEL_BYTE_CHOICE_INDEX, CONST_NONE, ANY_PACKED_TYPE_TAG_BYTE_PREFIX, UTF8_STRING_NO_LENGTH, FLOOR_VARINT_PREFIX_UTF8_STRING_SHARED, ROOF_VARINT_PREFIX_UTF8_STRING_SHARED, BOUNDED_8BIT_PREFIX_UTF8_STRING_SHARED, RFC3339_DATE_INTEGER_TRIPLET, PREFIX_VARINT_LENGTH_STRING_SHARED, FIXED_TYPED_ARRAY, BOUNDED_8BITS_TYPED_ARRAY, FLOOR_TYPED_ARRAY, ROOF_TYPED_ARRAY, FIXED_TYPED_ARBITRARY_OBJECT, VARINT_TYPED_ARBITRARY_OBJECT, NUMBER_VARINT_TUPLE > BinPackEncoding
Definition binpack_encoding.h:49
std::vector< sourcemeta::core::JSON > choices
The set of choice values.
Definition binpack_encoding.h:367
std::vector< sourcemeta::core::JSON > choices
The set of choice values.
Definition binpack_encoding.h:401
sourcemeta::core::JSON value
The constant value.
Definition binpack_encoding.h:462
std::vector< sourcemeta::core::JSON > choices
The set of choice values.
Definition binpack_encoding.h:440
std::vector< BinPackEncoding > prefix_encodings
Positional encodings.
Definition binpack_encoding.h:920
std::shared_ptr< BinPackEncoding > encoding
Element encoding.
Definition binpack_encoding.h:1009
std::uint64_t maximum
The maximum length of the array.
Definition binpack_encoding.h:1007
std::shared_ptr< BinPackEncoding > encoding
Element encoding.
Definition binpack_encoding.h:964
std::shared_ptr< BinPackEncoding > encoding
Element encoding.
Definition binpack_encoding.h:867
std::uint64_t minimum
The minimum length of the array.
Definition binpack_encoding.h:914
std::vector< BinPackEncoding > prefix_encodings
Positional encodings.
Definition binpack_encoding.h:1011
std::vector< BinPackEncoding > prefix_encodings
Positional encodings.
Definition binpack_encoding.h:869
std::uint64_t minimum
The minimum length of the array.
Definition binpack_encoding.h:962
std::uint64_t maximum
The maximum length of the array.
Definition binpack_encoding.h:916
std::vector< BinPackEncoding > prefix_encodings
Positional encodings.
Definition binpack_encoding.h:966
std::uint64_t size
The array length.
Definition binpack_encoding.h:865
std::shared_ptr< BinPackEncoding > encoding
Element encoding.
Definition binpack_encoding.h:918
std::int64_t maximum
The inclusive maximum value.
Definition binpack_encoding.h:185
std::uint64_t multiplier
The multiplier value.
Definition binpack_encoding.h:149
std::uint64_t multiplier
The multiplier value.
Definition binpack_encoding.h:187
std::uint64_t multiplier
The multiplier value.
Definition binpack_encoding.h:110
std::uint64_t multiplier
The multiplier value.
Definition binpack_encoding.h:220
std::int64_t minimum
The inclusive minimum value.
Definition binpack_encoding.h:147
std::int64_t maximum
The inclusive maximum value.
Definition binpack_encoding.h:108
std::int64_t minimum
The inclusive minimum value.
Definition binpack_encoding.h:106
std::uint64_t size
The object size.
Definition binpack_encoding.h:1064
std::shared_ptr< BinPackEncoding > key_encoding
Key encoding.
Definition binpack_encoding.h:1110
std::shared_ptr< BinPackEncoding > key_encoding
Key encoding.
Definition binpack_encoding.h:1066
std::shared_ptr< BinPackEncoding > encoding
Value encoding.
Definition binpack_encoding.h:1068
std::shared_ptr< BinPackEncoding > encoding
Value encoding.
Definition binpack_encoding.h:1112
std::uint64_t maximum
The inclusive maximum string UTF-8 byte-length.
Definition binpack_encoding.h:736
std::uint64_t maximum
The inclusive maximum string UTF-8 byte-length.
Definition binpack_encoding.h:674
std::uint64_t minimum
The inclusive minimum string UTF-8 byte-length.
Definition binpack_encoding.h:620
std::uint64_t size
The string UTF-8 byte-length.
Definition binpack_encoding.h:566
std::uint64_t minimum
The inclusive minimum string UTF-8 byte-length.
Definition binpack_encoding.h:734