Specify order of BDF dictionary keys

akwizgran
2015-04-27 09:08:41 +00:00
parent 8aa902f6a0
commit 71c3e3adcb

@@ -1,4 +1,4 @@
BDF is a data format designed for simplicity and compactness. It is a schema-less format with six primitive types (null, boolean, integer, float, string, raw) and two container types (list, dictionary).
BDF is a data format designed for simplicity and compactness. It has six primitive types (null, boolean, integer, float, string, raw) and two container types (list, dictionary).
Each object consists of a type, length and value. The first four bits give the type. Depending on the type, the next four bits either give the length of the value, or the length of the length of the value. All lengths are measured in bytes.
@@ -6,10 +6,10 @@ Each object consists of a type, length and value. The first four bits give the t
* **1: Boolean** - Length is 1, value is 0 or 1.
* **2: Integer** - Length is 0, 1, 2, 4 or 8. Value is an integer with the specified length.
* **3: Float** - Length is 4 or 8. Value is a floating point number with the specified length.
* **4: String** - Length is 0, 1, 2, 4 or 8. Value is an integer with the specified length, followed by a string with its length given by the integer.
* **5: Raw** - Length is 0, 1, 2, 4 or 8. Value is an integer with the specified length, followed by raw binary data with its length given by the integer.
* **6: List** - Length is 0. The value consists of zero or more objects of any type followed by an end marker.
* **7: Dictionary** - Length is 0. The value consists of zero or more key-value pairs followed by an end marker. The keys are strings and the values may be of any type.
* **4: String** - Length-of-length is 0, 1, 2, 4 or 8. Length is an integer with the specified length. Value is a string with its length given by the integer.
* **5: Raw** - Length-of-length is 0, 1, 2, 4 or 8. Length is an integer with the specified length. Value is raw data with its length given by the integer.
* **6: List** - Length is 0. Value consists of zero or more objects of any type followed by an end marker.
* **7: Dictionary** - Length is 0. Value consists of zero or more key-value pairs followed by an end marker. Keys are strings and values may be of any type.
* **8: End** - Length is 0, value is empty. Marks the end of a list or dictionary.
All integers are big-endian two's complement, floating point numbers are IEEE 754, and strings are UTF-8. Integers must be represented using the minimum number of bytes. A dictionary's keys must all be different and may not be empty.
Lengths are big-endian unsigned, integers are big-endian two's complement, floating point numbers are IEEE 754, and strings are UTF-8. Integers and lengths must be represented using the minimum number of bytes. Dictionary keys must all be different, may not be empty, and must be in lexicographic order when compared as byte strings.