1 #ifndef SOURCEMETA_JSONBINPACK_RUNTIME_ENCODING_H_
2 #define SOURCEMETA_JSONBINPACK_RUNTIME_ENCODING_H_
4 #include <sourcemeta/jsonbinpack/runtime_numeric.h>
5 #include <sourcemeta/jsontoolkit/json.h>
12 namespace sourcemeta::jsonbinpack {
17 struct __internal_encoding_wrapper;
19 using SinglePlan = std::shared_ptr<__internal_encoding_wrapper>;
20 using MultiplePlans = std::vector<__internal_encoding_wrapper>;
271 const std::vector<sourcemeta::jsontoolkit::JSON>
choices;
305 const std::vector<sourcemeta::jsontoolkit::JSON>
choices;
344 const std::vector<sourcemeta::jsontoolkit::JSON>
choices;
366 const sourcemeta::jsontoolkit::JSON
value;
962 namespace internal::ANY_PACKED_TYPE_TAG_BYTE_PREFIX {
963 constexpr
auto type_size = 3;
964 constexpr std::uint8_t TYPE_SHARED_STRING = 0b00000000;
965 constexpr std::uint8_t TYPE_STRING = 0b00000001;
966 constexpr std::uint8_t TYPE_LONG_STRING = 0b00000010;
967 constexpr std::uint8_t TYPE_OBJECT = 0b00000011;
968 constexpr std::uint8_t TYPE_ARRAY = 0b00000100;
969 constexpr std::uint8_t TYPE_POSITIVE_INTEGER_BYTE = 0b00000101;
970 constexpr std::uint8_t TYPE_NEGATIVE_INTEGER_BYTE = 0b00000110;
971 constexpr std::uint8_t TYPE_OTHER = 0b00000111;
972 static_assert(TYPE_SHARED_STRING <= uint_max<type_size>);
973 static_assert(TYPE_STRING <= uint_max<type_size>);
974 static_assert(TYPE_LONG_STRING <= uint_max<type_size>);
975 static_assert(TYPE_OBJECT <= uint_max<type_size>);
976 static_assert(TYPE_ARRAY <= uint_max<type_size>);
977 static_assert(TYPE_POSITIVE_INTEGER_BYTE <= uint_max<type_size>);
978 static_assert(TYPE_NEGATIVE_INTEGER_BYTE <= uint_max<type_size>);
979 static_assert(TYPE_OTHER <= uint_max<type_size>);
981 constexpr
auto subtype_size = 5;
982 constexpr std::uint8_t SUBTYPE_FALSE = 0b00000000;
983 constexpr std::uint8_t SUBTYPE_TRUE = 0b00000001;
984 constexpr std::uint8_t SUBTYPE_NULL = 0b00000010;
985 constexpr std::uint8_t SUBTYPE_POSITIVE_INTEGER = 0b00000011;
986 constexpr std::uint8_t SUBTYPE_NEGATIVE_INTEGER = 0b00000100;
987 constexpr std::uint8_t SUBTYPE_NUMBER = 0b00000101;
988 constexpr std::uint8_t SUBTYPE_LONG_STRING_BASE_EXPONENT_7 = 0b00000111;
989 constexpr std::uint8_t SUBTYPE_LONG_STRING_BASE_EXPONENT_8 = 0b00001000;
990 constexpr std::uint8_t SUBTYPE_LONG_STRING_BASE_EXPONENT_9 = 0b00001001;
991 constexpr std::uint8_t SUBTYPE_LONG_STRING_BASE_EXPONENT_10 = 0b00001010;
993 static_assert(SUBTYPE_FALSE <= uint_max<subtype_size>);
994 static_assert(SUBTYPE_TRUE <= uint_max<subtype_size>);
995 static_assert(SUBTYPE_NULL <= uint_max<subtype_size>);
996 static_assert(SUBTYPE_POSITIVE_INTEGER <= uint_max<subtype_size>);
997 static_assert(SUBTYPE_NEGATIVE_INTEGER <= uint_max<subtype_size>);
998 static_assert(SUBTYPE_NUMBER <= uint_max<subtype_size>);
999 static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_7 <= uint_max<subtype_size>);
1000 static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_8 <= uint_max<subtype_size>);
1001 static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_9 <= uint_max<subtype_size>);
1002 static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_10 <= uint_max<subtype_size>);
1005 static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_7 == 7);
1006 static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_8 == 8);
1007 static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_9 == 9);
1008 static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_10 == 10);
1033 struct __internal_encoding_wrapper {
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, 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, ANY_PACKED_TYPE_TAG_BYTE_PREFIX > Plan
Definition: runtime_plan.h:1028