Module Name: othersrc Committed By: agc Date: Mon Feb 24 05:59:14 UTC 2014
Update of /cvsroot/othersrc/external/bsd/transit In directory ivanova.netbsd.org:/tmp/cvs-serv13510 Log Message: Initial import of transit-20140222 into othersrc transit is a simple data serialisation library, in contrast to JSON or CBOR (RFC 7049). It is much simplified from CBOR, and has none of the binary string or escaped character issues that JSON faces. There are two atomic types in the transit library + a numeric value, encoded using the bottom 7 bits in a byte, and only using the necessary number of bytes to fully represent the value. + a string of bytes (which can be of any value). The bytes are preceded by a numeric atom giving the length of the byte string. Byte strings do not need to be NUL-terminated, nor do any characters need escaping within the byte string. As in JSON, there are two types of structured data based on top of these two atoms: + a list of elements, and + a dictionary of pairs of elements and each element in a list or dictionary can be any of the other types, although the keys of dictionary pairs are usually represented as strings. A specific marker in the encoding represents the end of a list or dictionary (similar to CBOR's indefinite length construction). libtransit(3) gives a worked example of the data representation: to represent the abstract array "[1,["two",3],["four",5]]", the encoding would look like: 03 -- List follows 01 -- Number follows 01 -- 1 03 -- List follows 02 -- String follows 03 -- 3 bytes in string 74776f -- "two" 01 -- Number follows 03 -- 3 05 -- End of list (inner list) 03 -- List follows 02 -- String follows 04 -- 4 bytes in string 666f7572 -- "four" 01 -- Number follows 05 -- 5 05 -- End of list (inner list) 05 -- End of list (outer list) as can be seen from the following dump of the JSON conversion output % transit -j '[1,["two",3],["four",5]]' | hexdump -C 00000000 03 01 01 03 02 03 74 77 6f 01 03 05 03 02 04 66 |......two......f| 00000010 6f 75 72 01 05 05 05 |our....| 00000017 % transit -j '[1,["two",3],["four",5]]' | transit -d list number 1 list string two number 3 list string four number 5 % As can be seen above, there is a primitive provided to convert from encoded JSON into the encoded transit representation. When decoding transit-encoded streams, the transit_decode(3) function is the main means of getting the individual parts into a parsed stream of atoms. In addition, a number of accessor functions for the transit tree as a whole, and the tree of atoms in particular, are provided. This can be seen in the walk functions provided in the main transit program. An additional walk function, from a different program, is shown below: static int walk(transit_t *t) { transit_atom_t *list; transit_atom_t *atom; uint64_t *els; unsigned i; /* the input is a list of dicts */ list = transit_atom(t, 0); /* the indices of the elements are in the array in the "list" atom */ els = transit_atom_ptr(list); for (i = 0 ; i < transit_atom_size(list) - 1 ; i++) { /* add 1 field for the "name" key in the dict pair */ /* add 1 field for the "value" of the pair */ atom = transit_atom(t, els[i] + 1 + 1); printf("name: %s\n", transit_atom_ptr(atom)); } return 1; } Status: Vendor Tag: CROOKS Release Tags: transit-20140222-base N othersrc/external/bsd/transit/Makefile N othersrc/external/bsd/transit/bin/1.expected N othersrc/external/bsd/transit/bin/Makefile N othersrc/external/bsd/transit/bin/2.expected N othersrc/external/bsd/transit/bin/3.expected N othersrc/external/bsd/transit/bin/4.expected N othersrc/external/bsd/transit/bin/5.expected N othersrc/external/bsd/transit/bin/6.expected N othersrc/external/bsd/transit/bin/7.expected N othersrc/external/bsd/transit/bin/12.expected N othersrc/external/bsd/transit/bin/9.in N othersrc/external/bsd/transit/bin/10.in N othersrc/external/bsd/transit/bin/8.expected N othersrc/external/bsd/transit/bin/9.expected N othersrc/external/bsd/transit/bin/10.expected N othersrc/external/bsd/transit/bin/11.expected N othersrc/external/bsd/transit/dist/transit.1 N othersrc/external/bsd/transit/dist/Makefile N othersrc/external/bsd/transit/dist/libtransit.3 N othersrc/external/bsd/transit/dist/main.c N othersrc/external/bsd/transit/dist/transit.c N othersrc/external/bsd/transit/dist/transit.h N othersrc/external/bsd/transit/lib/shlib_version N othersrc/external/bsd/transit/lib/Makefile No conflicts created by this import