X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.databoard%2Fsrc-isv%2Fspec%2FBinary%20Format.mediawiki;fp=bundles%2Forg.simantics.databoard%2Fsrc-isv%2Fspec%2FBinary%20Format.mediawiki;h=d97fa149f1c9aed09a587cec51ef5b109d7a17f5;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.databoard/src-isv/spec/Binary Format.mediawiki b/bundles/org.simantics.databoard/src-isv/spec/Binary Format.mediawiki new file mode 100644 index 000000000..d97fa149f --- /dev/null +++ b/bundles/org.simantics.databoard/src-isv/spec/Binary Format.mediawiki @@ -0,0 +1,181 @@ +=Binary Format= +''Binary serialization'' is used in files and network communication. +This document gives a specification how Datatypes and Datavalues are written in binary format. + +All numeric values are in [http://en.wikipedia.org/wiki/Endianness Big Endian] order, aka Network byte order. + +===Boolean=== +Boolean is an UINT8, with one of the following values. + +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Value''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|0 +|false +|- +|1 +|true +|- style="background-color: #f9f9f9;" +|2..255 +|''Invalid value'' +|} + +===Numbers=== +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Type''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|Byte +|Int8 +|- +|Integer +|Int32 +|- style="background-color: #f9f9f9;" +|Long +|Int64 +|- +|Float +|Float +|- style="background-color: #f9f9f9;" +|Double +|Double +|} + +===Optional=== +There is a Boolean that describes whether there is an actual value. +If false no data follows, true the content ensues. + +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Field''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|hasValue : Boolean +|Tells whether there is a ''value'' +|- +|''value'' +|The actual value, available only if hasValue == true. +|} + +===String=== +String is a series of bytes encoded as [http://download.oracle.com/javase/6/docs/api/java/io/DataInput.html#modified-utf-8 Modified-UTF-8]. + +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Field''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|length : Length +|Describes the number of bytes in the string using packed integer encoding (1-5 bytes). +|- +|''data'' +|Modified-UTF-8 encoded String. +|} + +The length is encoded as UInt32 of 1 to 5 bytes. +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Value''' +|'''Encoding''' +|- style="background-color: #f9f9f9;" +| 0x00000000..0x0000007F +| ''value'' (1 byte) +|- +| 0x00000080..0x00003FFF +| ''value & 0x3f | 0x80'', ''value>>6 & 0xff'' (2 bytes) +|- style="background-color: #f9f9f9;" +| 0x00004000..0x001FFFFF +| ''value & 0x1f | 0xC0'', ''value>>5 & 0xff'', ''value>>13 & 0xff'' (3 bytes) +|- +| 0x02000000..0x0FFFFFFF +| ''value & 0x1f | 0xE0'', ''value>>3 & 0xff'', ''value>>12 & 0xff'', ''value>>20 & 0xff'' (4 bytes) +|- style="background-color: #f9f9f9;" +| 0x10000000..0xFFFFFFFF +| ''value & 0x07 | 0xF0'', ''value>>3 & 0xff'', ''value>>11 & 0xff'', ''value>>19 & 0xff'', ''value>>27 & 0xff'' (5 bytes) +|} + + + +===Array=== +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Field''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|length : UInt32 +|Describes the number of elements as unsigned integer. This field is omited if the range is constant. +|- +|''<elements>'' +|Array elements +|} + +===Generic Record=== +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Field''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|''<fields>'' +|Component fields in the order specified in datatype. +|} + +===Referable Record=== +Referable records are objects that are referenced else where in the datavalue. The way they are serialized is that, when a record is serialized the first time, a 0 is written and then the actual record value. The serializer object gives it a next id number and takes a note of it. Id is not written, it is implicit and only interpretable by reading the stream. When a refereable record the second time, or afterwards, only it's id number is written, not the whole content. +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Field''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|recordId : Integer +|Identity that refers in this serialiation to this instance. +|- +|''<fields>'' +|Component fields in the order specified in datatype. +|} + +===Generic Union=== +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Field''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|tag : Byte, Short or Integer +|Number that indicates that type in the UnionType's ''components'' array. Type depends on the number of cases. +|- +|''value'' +|The value of the component type. +|} + +===Variant=== +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Field''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|type : DataType +|Describes the datatype of the following value. +|- +|''value'' +|The value serialized according to the type +|} + +===Map=== +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Field''' +|'''Description''' +|- style="background-color: #f9f9f9;" +|length : UInt32 +|Describes the number of entries in the map using integer encoding. +|- +|''<entries>'' +|Map Entries +|- style="background-color: #f9f9f9;" +|     key : K +|The key serializes according to the Key type +|- +|     value : V +|The value serialized according to the Value type +|} +Entries are written in ascending of the key (See [[typesystem.html#Comparison]]) + + +=File types= +{| border="1" cellpadding="3" cellspacing="0" align="center" +|'''Extension''' +|'''Description''' +|- +|.dbb ||Databoard Binary File. Concatenation of Datatype + value +|}