JSON BinPack  0.0.1
A space-efficient open-source binary JSON serialization format based on JSON Schema with both schema-driven and schema-less support.
sourcemeta::jsonbinpack::BOUNDED_8BITS_TYPED_ARRAY Struct Reference

The encoding consists of the length of the array minus minimum encoded as an 8-bit fixed-length unsigned integer followed by the elements of the array encoded in order. The encoding of the element at index i is either prefix_encodings[i] if set, or encoding. More...

#include <runtime_plan.h>

Public Attributes

const std::uint64_t minimum
 The minimum length of the array.
 
const std::uint64_t maximum
 The maximum length of the array.
 
const SinglePlan encoding
 Element encoding.
 
const MultiplePlans prefix_encodings
 Positional encodings.
 

Detailed Description

The encoding consists of the length of the array minus minimum encoded as an 8-bit fixed-length unsigned integer followed by the elements of the array encoded in order. The encoding of the element at index i is either prefix_encodings[i] if set, or encoding.

Options

Option Type Description
minimum uint The minimum length of the array
maximum uint The maximum length of the array
prefixEncodings encoding[] Positional encodings
encoding encoding Element encoding

Conditions

Condition Description
len(value) >= minimum The length of the array must be greater than or equal to the minimum
len(value) <= maximum The length of the array must be less than or equal to the maximum
len(prefixEncodings) <= maximum The number of prefix encodings must be less than or equal to the maximum array length
len(maximum) - len(minimum) < 2 ** 8 The array length must be representable in 8 bits

Examples

Given the array [ true, false, 5 ] where the minimum is 1 and the maximum is 3, the prefixEncodings corresponds to BYTE_CHOICE_INDEX with choices [ false, true ] and BYTE_CHOICE_INDEX with choices [ false, true ] and encoding corresponds to BOUNDED_MULTIPLE_8BITS_ENUM_FIXED with minimum 0 and maximum 255, the encoding results in:

+------+------+------+------+
| 0x02 | 0x01 | 0x00 | 0x05 |
+------+------+------+------+
size true false 5