Artifact 32fbbdee0fd47aefb3cfbcd88b360d17fe725f89:
0000: 0a 6d 73 67 70 61 63 6b 20 2d 20 41 20 70 75 72 .msgpack - A pur
0010: 65 20 54 63 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 e Tcl implementa
0020: 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d 65 73 73 tion of the Mess
0030: 61 67 65 50 61 63 6b 20 6f 62 6a 65 63 74 20 73 agePack object s
0040: 65 72 69 61 6c 69 7a 61 74 69 6f 6e 20 6c 69 62 erialization lib
0050: 72 61 72 79 0a 47 65 6e 65 72 61 74 65 64 20 66 rary.Generated f
0060: 72 6f 6d 20 66 69 6c 65 20 27 6d 73 67 70 61 63 rom file 'msgpac
0070: 6b 2e 6d 61 6e 27 20 62 79 20 74 63 6c 6c 69 62 k.man' by tcllib
0080: 2f 64 6f 63 74 6f 6f 6c 73 20 77 69 74 68 20 66 /doctools with f
0090: 6f 72 6d 61 74 20 27 74 65 78 74 27 0a 6d 73 67 ormat 'text'.msg
00a0: 70 61 63 6b 28 6e 29 20 32 2e 30 2e 30 20 20 22 pack(n) 2.0.0 "
00b0: 41 20 70 75 72 65 20 54 63 6c 20 69 6d 70 6c 65 A pure Tcl imple
00c0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 mentation of the
00d0: 20 4d 65 73 73 61 67 65 50 61 63 6b 20 6f 62 6a MessagePack obj
00e0: 65 63 74 20 73 65 72 69 61 6c 69 7a 61 74 69 6f ect serializatio
00f0: 6e 20 6c 69 62 72 61 72 79 22 0a 0a 4e 41 4d 45 n library"..NAME
0100: 0a 3d 3d 3d 3d 0a 0a 6d 73 67 70 61 63 6b 20 2d .====..msgpack -
0110: 20 6d 73 67 70 61 63 6b 20 50 61 63 6b 61 67 65 msgpack Package
0120: 20 52 65 66 65 72 65 6e 63 65 0a 0a 53 59 4e 4f Reference..SYNO
0130: 50 53 49 53 0a 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 70 PSIS.========..p
0140: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 54 ackage require T
0150: 63 6c 20 38 2e 36 0a 70 61 63 6b 61 67 65 20 72 cl 8.6.package r
0160: 65 71 75 69 72 65 20 6d 73 67 70 61 63 6b 20 3f equire msgpack ?
0170: 32 2e 30 2e 30 3f 0a 0a 6d 73 67 70 61 63 6b 3a 2.0.0?..msgpack:
0180: 3a 70 61 63 6b 65 72 20 6e 65 77 0a 70 61 63 6b :packer new.pack
0190: 65 72 4f 62 6a 65 63 74 20 64 61 74 61 0a 70 61 erObject data.pa
01a0: 63 6b 65 72 4f 62 6a 65 63 74 20 64 65 73 74 72 ckerObject destr
01b0: 6f 79 0a 70 61 63 6b 65 72 4f 62 6a 65 63 74 20 oy.packerObject
01c0: 70 61 63 6b 20 61 72 67 73 0a 70 61 63 6b 65 72 pack args.packer
01d0: 4f 62 6a 65 63 74 20 72 65 73 65 74 0a 6d 73 67 Object reset.msg
01e0: 70 61 63 6b 3a 3a 75 6e 70 61 63 6b 65 72 20 6e pack::unpacker n
01f0: 65 77 0a 75 6e 70 61 63 6b 65 72 4f 62 6a 65 63 ew.unpackerObjec
0200: 74 20 64 65 73 74 72 6f 79 0a 75 6e 70 61 63 6b t destroy.unpack
0210: 65 72 4f 62 6a 65 63 74 20 73 65 74 5f 65 78 74 erObject set_ext
0220: 5f 75 6e 70 61 63 6b 65 72 20 3f 74 79 70 65 3f _unpacker ?type?
0230: 20 3f 73 63 72 69 70 74 3f 0a 75 6e 70 61 63 6b ?script?.unpack
0240: 65 72 4f 62 6a 65 63 74 20 75 6e 70 61 63 6b 5f erObject unpack_
0250: 73 74 72 65 61 6d 20 69 73 74 72 65 61 6d 20 63 stream istream c
0260: 61 6c 6c 62 61 63 6b 0a 75 6e 70 61 63 6b 65 72 allback.unpacker
0270: 4f 62 6a 65 63 74 20 75 6e 70 61 63 6b 5f 73 74 Object unpack_st
0280: 72 69 6e 67 20 69 73 74 72 69 6e 67 20 3f 63 61 ring istring ?ca
0290: 6c 6c 62 61 63 6b 3f 0a 6d 73 67 70 61 63 6b 20 llback?.msgpack
02a0: 61 72 72 61 79 32 6c 69 73 74 20 0a 6d 73 67 70 array2list .msgp
02b0: 61 63 6b 20 6d 61 70 32 61 72 72 61 79 20 0a 6d ack map2array .m
02c0: 73 67 70 61 63 6b 20 6d 61 70 32 64 69 63 74 20 sgpack map2dict
02d0: 0a 6d 73 67 70 61 63 6b 20 70 61 63 6b 20 61 72 .msgpack pack ar
02e0: 67 73 0a 6d 73 67 70 61 63 6b 20 75 6e 70 61 63 gs.msgpack unpac
02f0: 6b 20 73 74 72 69 6e 67 0a 0a 44 45 53 43 52 49 k string..DESCRI
0300: 50 54 49 4f 4e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d PTION.==========
0310: 3d 0a 0a 54 68 65 20 5f 6d 73 67 70 61 63 6b 5f =..The _msgpack_
0320: 20 70 61 63 6b 61 67 65 20 69 73 20 61 20 70 75 package is a pu
0330: 72 65 20 54 63 6c 20 69 6d 70 6c 65 6d 65 6e 74 re Tcl implement
0340: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d 65 73 ation of the Mes
0350: 73 61 67 65 50 61 63 6b 20 6f 62 6a 65 63 74 0a sagePack object.
0360: 73 65 72 69 61 6c 69 7a 61 74 69 6f 6e 20 6c 69 serialization li
0370: 62 72 61 72 79 2e 20 59 6f 75 20 63 61 6e 20 66 brary. You can f
0380: 69 6e 64 20 74 68 65 20 63 6f 64 65 20 61 74 20 ind the code at
0390: 47 69 74 48 75 62 3a 0a 3c 55 52 4c 3a 68 74 74 GitHub:.<URL:htt
03a0: 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f ps://github.com/
03b0: 6a 64 63 38 2f 6d 73 67 70 61 63 6b 3e 2e 20 4d jdc8/msgpack>. M
03c0: 65 73 73 61 67 65 50 61 63 6b 20 63 61 6e 20 62 essagePack can b
03d0: 65 20 66 6f 75 6e 64 20 61 74 0a 3c 55 52 4c 3a e found at.<URL:
03e0: 68 74 74 70 3a 2f 2f 6d 73 67 70 61 63 6b 2e 6f http://msgpack.o
03f0: 72 67 2f 3e 2e 0a 0a 55 73 65 20 74 68 69 73 20 rg/>...Use this
0400: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 69 6e documentation in
0410: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 77 69 74 combination wit
0420: 68 20 74 68 65 20 4d 65 73 73 61 67 65 50 61 63 h the MessagePac
0430: 6b 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 k documentation
0440: 66 6f 72 0a 6d 6f 72 65 20 64 65 74 61 69 6c 73 for.more details
0450: 2e 0a 0a 50 61 63 6b 65 72 20 63 6c 61 73 73 0a ...Packer class.
0460: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 20 20 ============..
0470: 20 20 6d 73 67 70 61 63 6b 3a 3a 70 61 63 6b 65 msgpack::packe
0480: 72 20 6e 65 77 0a 0a 20 20 20 20 20 20 20 20 5f r new.. _
0490: 6f 6f 3a 3a 63 6c 61 73 73 5f 20 3c 55 52 4c 3a oo::class_ <URL:
04a0: 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 http://www.tcl.t
04b0: 6b 2f 6d 61 6e 2f 74 63 6c 38 2e 36 2f 54 63 6c k/man/tcl8.6/Tcl
04c0: 43 6d 64 2f 63 6c 61 73 73 2e 68 74 6d 3e 0a 20 Cmd/class.htm>.
04d0: 20 20 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 implement
04e0: 69 6e 67 20 74 68 65 20 4d 65 73 73 61 67 65 50 ing the MessageP
04f0: 61 63 6b 20 70 61 63 6b 69 6e 67 2e 0a 0a 20 20 ack packing...
0500: 20 20 70 61 63 6b 65 72 4f 62 6a 65 63 74 20 64 packerObject d
0510: 61 74 61 0a 0a 20 20 20 20 20 20 20 20 52 65 74 ata.. Ret
0520: 75 72 6e 20 74 68 65 20 70 61 63 6b 65 64 20 64 urn the packed d
0530: 61 74 61 2e 0a 0a 20 20 20 20 70 61 63 6b 65 72 ata... packer
0540: 4f 62 6a 65 63 74 20 64 65 73 74 72 6f 79 0a 0a Object destroy..
0550: 20 20 20 20 20 20 20 20 44 65 73 74 72 6f 79 20 Destroy
0560: 74 68 65 20 70 61 63 6b 65 72 20 6f 62 6a 65 63 the packer objec
0570: 74 2e 0a 0a 20 20 20 20 70 61 63 6b 65 72 4f 62 t... packerOb
0580: 6a 65 63 74 20 70 61 63 6b 20 61 72 67 73 0a 0a ject pack args..
0590: 20 20 20 20 20 20 20 20 50 61 63 6b 20 74 68 65 Pack the
05a0: 20 73 70 65 63 69 66 69 65 64 20 76 61 6c 75 65 specified value
05b0: 20 61 6e 64 20 73 74 6f 72 65 20 69 74 20 69 6e and store it in
05c0: 74 65 72 6e 61 6c 6c 79 2e 20 4d 6f 72 65 20 69 ternally. More i
05d0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0a 20 20 nformation on.
05e0: 20 20 20 20 20 20 68 6f 77 20 74 6f 20 73 70 65 how to spe
05f0: 63 69 66 79 20 76 61 6c 75 65 73 20 74 6f 20 62 cify values to b
0600: 65 20 70 61 63 6b 65 64 20 63 61 6e 20 62 65 20 e packed can be
0610: 66 6f 75 6e 64 20 69 6e 20 73 65 63 74 69 6f 6e found in section
0620: 20 2d 3e 20 50 61 63 6b 0a 20 20 20 20 20 20 20 -> Pack.
0630: 20 6f 70 74 69 6f 6e 73 2e 20 54 6f 20 67 65 74 options. To get
0640: 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 61 the packed data
0650: 2c 20 75 73 65 20 74 68 65 20 64 61 74 61 20 6d , use the data m
0660: 65 74 68 6f 64 2e 0a 0a 20 20 20 20 70 61 63 6b ethod... pack
0670: 65 72 4f 62 6a 65 63 74 20 72 65 73 65 74 0a 0a erObject reset..
0680: 20 20 20 20 20 20 20 20 52 65 73 65 74 20 74 68 Reset th
0690: 65 20 70 61 63 6b 65 72 2e 0a 0a 55 6e 70 61 63 e packer...Unpac
06a0: 6b 65 72 20 63 6c 61 73 73 0a 3d 3d 3d 3d 3d 3d ker class.======
06b0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 20 20 20 20 6d 73 ========.. ms
06c0: 67 70 61 63 6b 3a 3a 75 6e 70 61 63 6b 65 72 20 gpack::unpacker
06d0: 6e 65 77 0a 0a 20 20 20 20 20 20 20 20 5f 6f 6f new.. _oo
06e0: 3a 3a 63 6c 61 73 73 5f 20 3c 55 52 4c 3a 68 74 ::class_ <URL:ht
06f0: 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f tp://www.tcl.tk/
0700: 6d 61 6e 2f 74 63 6c 38 2e 36 2f 54 63 6c 43 6d man/tcl8.6/TclCm
0710: 64 2f 63 6c 61 73 73 2e 68 74 6d 3e 0a 20 20 20 d/class.htm>.
0720: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 69 6e implementin
0730: 67 20 74 68 65 20 4d 65 73 73 61 67 65 50 61 63 g the MessagePac
0740: 6b 20 75 6e 70 61 63 6b 69 6e 67 2e 0a 0a 20 20 k unpacking...
0750: 20 20 75 6e 70 61 63 6b 65 72 4f 62 6a 65 63 74 unpackerObject
0760: 20 64 65 73 74 72 6f 79 0a 0a 20 20 20 20 20 20 destroy..
0770: 20 20 44 65 73 74 72 6f 79 20 74 68 65 20 75 6e Destroy the un
0780: 70 61 63 6b 65 72 20 6f 62 6a 65 63 74 2e 0a 0a packer object...
0790: 20 20 20 20 75 6e 70 61 63 6b 65 72 4f 62 6a 65 unpackerObje
07a0: 63 74 20 73 65 74 5f 65 78 74 5f 75 6e 70 61 63 ct set_ext_unpac
07b0: 6b 65 72 20 3f 74 79 70 65 3f 20 3f 73 63 72 69 ker ?type? ?scri
07c0: 70 74 3f 0a 0a 20 20 20 20 20 20 20 20 53 65 74 pt?.. Set
07d0: 20 74 68 65 20 68 61 6e 64 6c 65 72 20 66 6f 72 the handler for
07e0: 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 79 an extension ty
07f0: 70 65 2e 20 57 68 65 6e 20 74 68 65 20 75 6e 70 pe. When the unp
0800: 61 63 6b 65 72 20 65 6e 63 6f 75 6e 74 65 72 73 acker encounters
0810: 0a 20 20 20 20 20 20 20 20 65 78 74 65 6e 73 69 . extensi
0820: 6f 6e 20 74 79 70 65 20 74 79 70 65 2c 20 69 74 on type type, it
0830: 20 77 69 6c 6c 20 63 61 6c 6c 20 73 63 72 69 70 will call scrip
0840: 74 20 77 69 74 68 20 74 68 65 20 74 79 70 65 20 t with the type
0850: 61 6e 64 20 74 68 65 20 64 61 74 61 20 61 73 0a and the data as.
0860: 20 20 20 20 20 20 20 20 69 74 73 20 61 72 67 75 its argu
0870: 6d 65 6e 74 73 2e 20 4f 6d 69 74 20 73 63 72 69 ments. Omit scri
0880: 70 74 20 6f 72 20 73 63 72 69 70 74 20 61 6e 64 pt or script and
0890: 20 74 79 70 65 20 74 6f 20 67 65 74 20 68 61 6e type to get han
08a0: 64 6c 65 72 73 2e 20 53 65 74 20 74 68 65 0a 20 dlers. Set the.
08b0: 20 20 20 20 20 20 20 68 61 6e 64 6c 65 72 20 66 handler f
08c0: 6f 72 20 61 20 74 79 70 65 20 74 6f 20 61 6e 20 or a type to an
08d0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 74 6f 20 empty string to
08e0: 64 69 73 61 62 6c 65 20 69 74 2e 0a 0a 20 20 20 disable it...
08f0: 20 75 6e 70 61 63 6b 65 72 4f 62 6a 65 63 74 20 unpackerObject
0900: 75 6e 70 61 63 6b 5f 73 74 72 65 61 6d 20 69 73 unpack_stream is
0910: 74 72 65 61 6d 20 63 61 6c 6c 62 61 63 6b 0a 0a tream callback..
0920: 20 20 20 20 20 20 20 20 55 6e 70 61 63 6b 20 64 Unpack d
0930: 61 74 61 20 72 65 61 64 20 66 72 6f 6d 20 74 68 ata read from th
0940: 65 20 69 73 74 72 65 61 6d 20 61 72 67 75 6d 65 e istream argume
0950: 6e 74 2e 20 54 68 65 20 63 61 6c 6c 62 61 63 6b nt. The callback
0960: 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 20 20 20 20 command is.
0970: 20 20 20 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 called when
0980: 61 20 4d 65 73 73 61 67 65 50 61 63 6b 20 6f 62 a MessagePack ob
0990: 6a 65 63 74 20 69 73 20 75 6e 70 61 63 6b 65 64 ject is unpacked
09a0: 2e 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 . Before calling
09b0: 20 74 68 65 0a 20 20 20 20 20 20 20 20 63 61 6c the. cal
09c0: 6c 62 61 63 6b 20 63 6f 6d 6d 61 6e 64 2c 20 74 lback command, t
09d0: 68 65 20 77 6f 72 64 20 5f 64 61 74 61 5f 20 61 he word _data_ a
09e0: 6e 64 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 nd the unpacked
09f0: 4d 65 73 73 61 67 65 50 61 63 6b 20 6f 62 6a 65 MessagePack obje
0a00: 63 74 20 69 73 0a 20 20 20 20 20 20 20 20 5f 6c ct is. _l
0a10: 61 70 70 65 6e 64 5f 2d 65 64 20 74 6f 20 74 68 append_-ed to th
0a20: 65 20 63 6f 6d 6d 61 6e 64 2e 20 57 68 65 6e 20 e command. When
0a30: 74 68 65 20 73 74 72 65 61 6d 20 69 73 20 63 6c the stream is cl
0a40: 6f 73 65 64 20 28 5f 65 6f 66 5f 20 64 65 74 65 osed (_eof_ dete
0a50: 63 74 65 64 29 2c 0a 20 20 20 20 20 20 20 20 74 cted),. t
0a60: 68 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6d 6d he callback comm
0a70: 61 6e 64 20 69 73 20 63 61 6c 6c 65 64 20 77 69 and is called wi
0a80: 74 68 20 74 68 65 20 77 6f 72 64 20 5f 65 6f 66 th the word _eof
0a90: 5f 20 61 6e 64 20 74 68 65 20 73 74 72 65 61 6d _ and the stream
0aa0: 20 68 61 6e 64 6c 65 0a 20 20 20 20 20 20 20 20 handle.
0ab0: 5f 6c 61 70 70 65 6e 64 5f 2d 65 64 2e 0a 0a 20 _lappend_-ed...
0ac0: 20 20 20 20 20 20 20 54 68 65 20 69 73 74 72 65 The istre
0ad0: 61 6d 20 69 73 20 63 6f 6e 66 69 67 75 72 65 20 am is configure
0ae0: 6c 69 6b 65 20 74 68 69 73 3a 0a 0a 20 20 20 20 like this:..
0af0: 20 20 20 20 2a 20 20 20 4e 6f 6e 20 62 6c 6f 63 * Non bloc
0b00: 6b 69 6e 67 0a 0a 20 20 20 20 20 20 20 20 2a 20 king.. *
0b10: 20 20 55 6e 62 75 66 66 65 72 65 64 0a 0a 20 20 Unbuffered..
0b20: 20 20 20 20 20 20 2a 20 20 20 54 72 61 6e 73 6c * Transl
0b30: 61 74 69 6f 6e 20 5f 62 69 6e 61 72 79 5f 0a 0a ation _binary_..
0b40: 20 20 20 20 20 20 20 20 2a 20 20 20 45 6e 63 6f * Enco
0b50: 64 69 6e 67 20 5f 62 69 6e 61 72 79 5f 0a 0a 20 ding _binary_..
0b60: 20 20 20 20 20 20 20 4f 70 65 6e 69 6e 67 20 61 Opening a
0b70: 6e 64 20 63 6c 6f 73 69 6e 67 20 74 68 65 20 69 nd closing the i
0b80: 73 74 72 65 61 6d 20 69 73 20 74 68 65 20 72 65 stream is the re
0b90: 73 70 6f 6e 73 61 62 69 6c 69 74 79 20 6f 66 20 sponsability of
0ba0: 74 68 65 20 73 63 72 69 70 74 0a 20 20 20 20 20 the script.
0bb0: 20 20 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 75 calling the u
0bc0: 6e 70 61 63 6b 5f 73 74 72 65 61 6d 20 6d 65 74 npack_stream met
0bd0: 68 6f 64 2e 0a 0a 20 20 20 20 75 6e 70 61 63 6b hod... unpack
0be0: 65 72 4f 62 6a 65 63 74 20 75 6e 70 61 63 6b 5f erObject unpack_
0bf0: 73 74 72 69 6e 67 20 69 73 74 72 69 6e 67 20 3f string istring ?
0c00: 63 61 6c 6c 62 61 63 6b 3f 0a 0a 20 20 20 20 20 callback?..
0c10: 20 20 20 55 6e 70 61 63 6b 20 74 68 65 20 73 70 Unpack the sp
0c20: 65 63 69 66 69 65 64 20 64 61 74 61 2e 20 49 66 ecified data. If
0c30: 20 6e 6f 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6d no callback com
0c40: 6d 61 6e 64 20 69 73 20 73 70 65 63 69 66 69 65 mand is specifie
0c50: 64 2c 20 61 20 6c 69 73 74 0a 20 20 20 20 20 20 d, a list.
0c60: 20 20 77 69 74 68 20 75 6e 70 61 63 6b 65 64 20 with unpacked
0c70: 74 79 70 65 20 28 73 65 65 20 62 65 6c 6f 77 29 type (see below)
0c80: 20 61 6e 64 20 76 61 6c 75 65 20 70 61 69 72 73 and value pairs
0c90: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 49 66 is returned. If
0ca0: 20 61 0a 20 20 20 20 20 20 20 20 63 61 6c 6c 62 a. callb
0cb0: 61 63 6b 20 63 6f 6d 6d 61 6e 64 20 69 73 20 73 ack command is s
0cc0: 70 65 63 69 66 69 65 64 2c 20 74 68 69 73 20 63 pecified, this c
0cd0: 6f 6d 6d 61 6e 64 20 69 73 20 63 61 6c 6c 65 64 ommand is called
0ce0: 20 77 68 65 6e 20 61 20 4d 65 73 73 61 67 65 50 when a MessageP
0cf0: 61 63 6b 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 ack. obje
0d00: 63 74 20 69 73 20 75 6e 70 61 63 6b 65 64 2e 20 ct is unpacked.
0d10: 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 Before calling t
0d20: 68 65 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6d 6d he callback comm
0d30: 61 6e 64 2c 20 74 68 65 20 77 6f 72 64 20 5f 64 and, the word _d
0d40: 61 74 61 5f 0a 20 20 20 20 20 20 20 20 61 6e 64 ata_. and
0d50: 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 4d 65 the unpacked Me
0d60: 73 73 61 67 65 50 61 63 6b 20 6f 62 6a 65 63 74 ssagePack object
0d70: 20 69 73 20 5f 6c 61 70 70 65 6e 64 5f 2d 65 64 is _lappend_-ed
0d80: 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e to the command.
0d90: 0a 0a 54 79 70 65 20 69 6e 66 6f 72 6d 61 74 69 ..Type informati
0da0: 6f 6e 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 on found in the
0db0: 75 6e 70 61 63 6b 65 64 20 4d 65 73 73 61 67 65 unpacked Message
0dc0: 50 61 63 6b 20 6f 62 6a 65 63 74 73 20 63 61 6e Pack objects can
0dd0: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 66 be one of the.f
0de0: 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 20 20 20 20 61 ollowing:.. a
0df0: 72 72 61 79 0a 0a 20 20 20 20 62 69 6e 0a 0a 20 rray.. bin..
0e00: 20 20 20 62 6f 6f 6c 65 61 6e 0a 0a 20 20 20 20 boolean..
0e10: 65 78 74 0a 0a 20 20 20 20 66 6c 6f 61 74 33 32 ext.. float32
0e20: 0a 0a 20 20 20 20 66 6c 6f 61 74 36 34 0a 0a 20 .. float64..
0e30: 20 20 20 69 6e 74 65 67 65 72 0a 0a 20 20 20 20 integer..
0e40: 6d 61 70 0a 0a 20 20 20 20 6e 69 6c 0a 0a 20 20 map.. nil..
0e50: 20 20 73 74 72 0a 0a 20 20 20 20 74 69 6d 65 73 str.. times
0e60: 74 61 6d 70 0a 0a 56 61 6c 75 65 73 20 63 61 6e tamp..Values can
0e70: 20 62 65 20 6e 65 73 74 65 64 20 74 79 70 65 2f be nested type/
0e80: 76 61 6c 75 65 20 6c 69 73 74 2e 0a 0a 55 74 69 value list...Uti
0e90: 6c 69 74 69 65 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d lities.=========
0ea0: 0a 0a 20 20 20 20 6d 73 67 70 61 63 6b 20 61 72 .. msgpack ar
0eb0: 72 61 79 32 6c 69 73 74 0a 0a 20 20 20 20 20 20 ray2list..
0ec0: 20 20 43 6f 6e 76 65 72 74 20 61 20 4d 65 73 73 Convert a Mess
0ed0: 61 67 65 50 61 63 6b 20 61 72 72 61 79 20 61 73 agePack array as
0ee0: 20 72 65 74 75 6e 65 64 20 62 79 20 74 68 65 20 retuned by the
0ef0: 75 6e 70 61 63 6b 20 63 6f 6d 6d 61 6e 64 20 6f unpack command o
0f00: 72 20 6d 65 74 68 6f 64 0a 20 20 20 20 20 20 20 r method.
0f10: 20 69 6e 74 6f 20 61 20 54 63 6c 20 6c 69 73 74 into a Tcl list
0f20: 2e 0a 0a 20 20 20 20 6d 73 67 70 61 63 6b 20 6d ... msgpack m
0f30: 61 70 32 61 72 72 61 79 0a 0a 20 20 20 20 20 20 ap2array..
0f40: 20 20 43 6f 6e 76 65 72 74 20 61 20 4d 65 73 73 Convert a Mess
0f50: 61 67 65 50 61 63 6b 20 6d 61 70 20 61 73 20 72 agePack map as r
0f60: 65 74 75 6e 65 64 20 62 79 20 74 68 65 20 75 6e etuned by the un
0f70: 70 61 63 6b 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 pack command or
0f80: 6d 65 74 68 6f 64 0a 20 20 20 20 20 20 20 20 69 method. i
0f90: 6e 74 6f 20 61 20 54 63 6c 20 61 72 72 61 79 2e nto a Tcl array.
0fa0: 0a 0a 20 20 20 20 6d 73 67 70 61 63 6b 20 6d 61 .. msgpack ma
0fb0: 70 32 64 69 63 74 0a 0a 20 20 20 20 20 20 20 20 p2dict..
0fc0: 43 6f 6e 76 65 72 74 20 61 20 4d 65 73 73 61 67 Convert a Messag
0fd0: 65 50 61 63 6b 20 6d 61 70 20 61 73 20 72 65 74 ePack map as ret
0fe0: 75 6e 65 64 20 62 79 20 74 68 65 20 75 6e 70 61 uned by the unpa
0ff0: 63 6b 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 6d 65 ck command or me
1000: 74 68 6f 64 0a 20 20 20 20 20 20 20 20 69 6e 74 thod. int
1010: 6f 20 61 20 54 63 6c 20 64 69 63 74 2e 0a 0a 20 o a Tcl dict...
1020: 20 20 20 6d 73 67 70 61 63 6b 20 70 61 63 6b 20 msgpack pack
1030: 61 72 67 73 0a 0a 20 20 20 20 20 20 20 20 50 61 args.. Pa
1040: 63 6b 20 74 68 65 20 73 70 65 63 69 66 69 65 64 ck the specified
1050: 20 76 61 6c 75 65 2e 20 54 68 65 20 70 61 63 6b value. The pack
1060: 65 64 20 76 61 6c 75 65 20 69 73 20 72 65 74 75 ed value is retu
1070: 72 6e 65 64 2e 20 4d 6f 72 65 20 69 6e 66 6f 72 rned. More infor
1080: 6d 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 6f mation. o
1090: 6e 20 68 6f 77 20 74 6f 20 73 70 65 63 69 66 79 n how to specify
10a0: 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 70 61 values to be pa
10b0: 63 6b 65 64 20 63 61 6e 20 62 65 20 66 6f 75 6e cked can be foun
10c0: 64 20 69 6e 20 73 65 63 74 69 6f 6e 20 2d 3e 20 d in section ->
10d0: 50 61 63 6b 0a 20 20 20 20 20 20 20 20 6f 70 74 Pack. opt
10e0: 69 6f 6e 73 2e 0a 0a 20 20 20 20 6d 73 67 70 61 ions... msgpa
10f0: 63 6b 20 75 6e 70 61 63 6b 20 73 74 72 69 6e 67 ck unpack string
1100: 0a 0a 20 20 20 20 20 20 20 20 55 6e 70 61 63 6b .. Unpack
1110: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 the specified d
1120: 61 74 61 2e 20 41 20 6c 69 73 74 20 77 69 74 68 ata. A list with
1130: 20 75 6e 70 61 63 6b 65 64 20 74 79 70 65 20 28 unpacked type (
1140: 73 65 65 20 2d 3e 20 55 6e 70 61 63 6b 65 72 0a see -> Unpacker.
1150: 20 20 20 20 20 20 20 20 63 6c 61 73 73 29 20 61 class) a
1160: 6e 64 20 76 61 6c 75 65 20 70 61 69 72 73 20 69 nd value pairs i
1170: 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 50 61 63 s returned...Pac
1180: 6b 20 6f 70 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d k options.======
1190: 3d 3d 3d 3d 3d 3d 0a 0a 54 68 65 20 61 72 67 75 ======..The argu
11a0: 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20 70 61 ments for the pa
11b0: 63 6b 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 6d 65 ck command or me
11c0: 74 68 6f 64 20 61 72 65 20 61 6c 77 61 79 73 20 thod are always
11d0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 79 70 65 one or more type
11e0: 0a 73 70 65 63 69 66 69 65 72 73 20 61 6e 64 20 .specifiers and
11f0: 69 66 20 6e 65 65 64 65 64 20 61 20 76 61 6c 75 if needed a valu
1200: 65 2e 20 54 68 65 20 6c 69 73 74 20 62 65 6c 6f e. The list belo
1210: 77 20 73 68 6f 77 73 20 74 68 65 20 73 75 70 70 w shows the supp
1220: 6f 72 74 65 64 20 74 79 70 65 73 3a 0a 0a 20 20 orted types:..
1230: 20 20 61 72 72 61 79 20 73 69 7a 65 0a 0a 20 20 array size..
1240: 20 20 20 20 20 20 41 64 64 20 61 72 72 61 79 20 Add array
1250: 73 69 7a 65 20 74 6f 20 70 61 63 6b 65 64 20 64 size to packed d
1260: 61 74 61 2e 20 4d 75 73 74 20 62 65 20 66 6f 6c ata. Must be fol
1270: 6c 6f 77 65 64 20 62 79 20 73 69 7a 65 20 63 61 lowed by size ca
1280: 6c 6c 73 20 74 6f 20 6d 65 74 68 6f 64 0a 20 20 lls to method.
1290: 20 20 20 20 20 20 70 61 63 6b 20 74 6f 20 61 64 pack to ad
12a0: 64 20 74 68 65 20 61 72 72 61 79 20 65 6c 65 6d d the array elem
12b0: 65 6e 74 73 20 74 6f 20 74 68 65 20 70 61 63 6b ents to the pack
12c0: 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 62 69 ed data... bi
12d0: 6e 20 62 79 74 65 73 0a 0a 20 20 20 20 20 20 20 n bytes..
12e0: 20 41 64 64 20 61 20 62 79 74 65 20 61 72 72 61 Add a byte arra
12f0: 79 20 28 61 20 62 69 6e 61 72 79 20 73 74 72 69 y (a binary stri
1300: 6e 67 29 20 74 6f 20 74 68 65 20 70 61 63 6b 65 ng) to the packe
1310: 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 62 6f 6f d data... boo
1320: 6c 65 61 6e 20 64 61 74 61 0a 0a 20 20 20 20 20 lean data..
1330: 20 20 20 41 64 64 20 61 20 62 6f 6f 6c 65 61 6e Add a boolean
1340: 20 74 6f 20 74 68 65 20 70 61 63 6b 65 64 20 64 to the packed d
1350: 61 74 61 2e 20 49 73 20 65 71 75 69 76 61 6c 65 ata. Is equivale
1360: 6e 74 20 63 61 6c 6c 69 6e 67 20 6d 65 74 68 6f nt calling metho
1370: 64 73 20 70 61 63 6b 0a 20 20 20 20 20 20 20 20 ds pack.
1380: 74 72 75 65 20 6f 72 20 70 61 63 6b 20 66 61 6c true or pack fal
1390: 73 65 2e 0a 0a 20 20 20 20 64 69 63 74 20 6b 65 se... dict ke
13a0: 79 54 79 70 65 20 76 61 6c 75 65 54 79 70 65 20 yType valueType
13b0: 64 69 63 74 69 6f 6e 61 72 79 56 61 6c 75 65 0a dictionaryValue.
13c0: 0a 20 20 20 20 20 20 20 20 41 64 64 20 61 20 64 . Add a d
13d0: 69 63 74 20 74 6f 20 74 68 65 20 70 61 63 6b 65 ict to the packe
13e0: 64 20 64 61 74 61 2e 20 54 68 69 73 20 69 73 20 d data. This is
13f0: 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 63 61 equivalent to ca
1400: 6c 6c 69 6e 67 20 6d 65 74 68 6f 64 20 70 61 63 lling method pac
1410: 6b 0a 20 20 20 20 20 20 20 20 6d 61 70 20 77 69 k. map wi
1420: 74 68 20 74 68 65 20 64 69 63 74 20 73 69 7a 65 th the dict size
1430: 20 61 73 20 61 72 67 75 6d 65 6e 74 2c 20 66 6f as argument, fo
1440: 6c 6c 6f 77 65 64 20 62 79 20 63 61 6c 6c 69 6e llowed by callin
1450: 67 20 6d 65 74 68 6f 64 20 70 61 63 6b 0a 20 20 g method pack.
1460: 20 20 20 20 20 20 6b 65 79 54 79 70 65 20 61 6e keyType an
1470: 64 20 6d 65 74 68 6f 64 20 70 61 63 6b 20 76 61 d method pack va
1480: 6c 75 65 54 79 70 65 20 66 6f 72 20 65 61 63 68 lueType for each
1490: 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 20 key/value pair
14a0: 69 6e 20 74 68 65 20 64 69 63 74 2e 0a 0a 20 20 in the dict...
14b0: 20 20 65 78 74 20 74 79 70 65 20 62 79 74 65 73 ext type bytes
14c0: 0a 0a 20 20 20 20 20 20 20 20 41 64 64 20 61 20 .. Add a
14d0: 62 79 74 65 20 61 72 72 61 79 20 6f 66 20 61 20 byte array of a
14e0: 63 68 6f 73 65 6e 20 65 78 74 65 6e 73 69 6f 6e chosen extension
14f0: 20 74 79 70 65 20 74 6f 20 74 68 65 20 70 61 63 type to the pac
1500: 6b 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 ked data... f
1510: 61 6c 73 65 0a 0a 20 20 20 20 20 20 20 20 41 64 alse.. Ad
1520: 64 20 61 20 62 6f 6f 6c 65 61 6e 20 77 69 74 68 d a boolean with
1530: 20 76 61 6c 75 65 20 66 61 6c 73 65 20 74 6f 20 value false to
1540: 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 61 2e the packed data.
1550: 0a 0a 20 20 20 20 66 69 78 5f 65 78 74 31 20 74 .. fix_ext1 t
1560: 79 70 65 20 62 79 74 65 0a 0a 20 20 20 20 20 20 ype byte..
1570: 20 20 41 64 64 20 31 20 62 79 74 65 20 6f 66 20 Add 1 byte of
1580: 61 20 63 68 6f 73 65 6e 20 65 78 74 65 6e 73 69 a chosen extensi
1590: 6f 6e 20 74 79 70 65 20 74 6f 20 74 68 65 20 70 on type to the p
15a0: 61 63 6b 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 acked data...
15b0: 20 66 69 78 5f 65 78 74 32 20 74 79 70 65 20 62 fix_ext2 type b
15c0: 79 74 65 73 0a 0a 20 20 20 20 20 20 20 20 41 64 ytes.. Ad
15d0: 64 20 32 20 62 79 74 65 73 20 6f 66 20 61 20 63 d 2 bytes of a c
15e0: 68 6f 73 65 6e 20 65 78 74 65 6e 73 69 6f 6e 20 hosen extension
15f0: 74 79 70 65 20 74 6f 20 74 68 65 20 70 61 63 6b type to the pack
1600: 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 69 ed data... fi
1610: 78 5f 65 78 74 34 20 74 79 70 65 20 62 79 74 65 x_ext4 type byte
1620: 73 0a 0a 20 20 20 20 20 20 20 20 41 64 64 20 34 s.. Add 4
1630: 20 62 79 74 65 73 20 6f 66 20 61 20 63 68 6f 73 bytes of a chos
1640: 65 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 79 70 en extension typ
1650: 65 20 74 6f 20 74 68 65 20 70 61 63 6b 65 64 20 e to the packed
1660: 64 61 74 61 2e 0a 0a 20 20 20 20 66 69 78 5f 65 data... fix_e
1670: 78 74 38 20 74 79 70 65 20 62 79 74 65 73 0a 0a xt8 type bytes..
1680: 20 20 20 20 20 20 20 20 41 64 64 20 38 20 62 79 Add 8 by
1690: 74 65 73 20 6f 66 20 61 20 63 68 6f 73 65 6e 20 tes of a chosen
16a0: 65 78 74 65 6e 73 69 6f 6e 20 74 79 70 65 20 74 extension type t
16b0: 6f 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 o the packed dat
16c0: 61 2e 0a 0a 20 20 20 20 66 69 78 5f 65 78 74 31 a... fix_ext1
16d0: 36 20 74 79 70 65 20 62 79 74 65 73 0a 0a 20 20 6 type bytes..
16e0: 20 20 20 20 20 20 41 64 64 20 31 36 20 62 79 74 Add 16 byt
16f0: 65 73 20 6f 66 20 61 20 63 68 6f 73 65 6e 20 65 es of a chosen e
1700: 78 74 65 6e 73 69 6f 6e 20 74 79 70 65 20 74 6f xtension type to
1710: 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 61 the packed data
1720: 2e 0a 0a 20 20 20 20 66 69 78 5f 69 6e 74 38 20 ... fix_int8
1730: 64 61 74 61 0a 0a 20 20 20 20 20 20 20 20 41 64 data.. Ad
1740: 64 20 61 6e 20 38 20 62 69 74 20 69 6e 74 65 67 d an 8 bit integ
1750: 65 72 20 74 6f 20 74 68 65 20 70 61 63 6b 65 64 er to the packed
1760: 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 69 78 5f data... fix_
1770: 69 6e 74 31 36 20 64 61 74 61 0a 0a 20 20 20 20 int16 data..
1780: 20 20 20 20 41 64 64 20 61 20 31 36 20 62 69 74 Add a 16 bit
1790: 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65 20 integer to the
17a0: 70 61 63 6b 65 64 20 64 61 74 61 2e 0a 0a 20 20 packed data...
17b0: 20 20 66 69 78 5f 69 6e 74 33 32 20 64 61 74 61 fix_int32 data
17c0: 0a 0a 20 20 20 20 20 20 20 20 41 64 64 20 61 20 .. Add a
17d0: 33 32 20 62 69 74 20 69 6e 74 65 67 65 72 20 74 32 bit integer t
17e0: 6f 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 o the packed dat
17f0: 61 2e 0a 0a 20 20 20 20 66 69 78 5f 69 6e 74 36 a... fix_int6
1800: 34 20 64 61 74 61 0a 0a 20 20 20 20 20 20 20 20 4 data..
1810: 41 64 64 20 61 20 36 34 20 62 69 74 20 69 6e 74 Add a 64 bit int
1820: 65 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 6b eger to the pack
1830: 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 69 ed data... fi
1840: 78 5f 75 69 6e 74 38 20 64 61 74 61 0a 0a 20 20 x_uint8 data..
1850: 20 20 20 20 20 20 41 64 64 20 61 6e 20 38 20 62 Add an 8 b
1860: 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 it unsigned inte
1870: 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 6b 65 ger to the packe
1880: 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 69 78 d data... fix
1890: 5f 75 69 6e 74 31 36 20 64 61 74 61 0a 0a 20 20 _uint16 data..
18a0: 20 20 20 20 20 20 41 64 64 20 61 20 31 36 20 62 Add a 16 b
18b0: 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 it unsigned inte
18c0: 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 6b 65 ger to the packe
18d0: 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 69 78 d data... fix
18e0: 5f 75 69 6e 74 33 32 20 64 61 74 61 0a 0a 20 20 _uint32 data..
18f0: 20 20 20 20 20 20 41 64 64 20 61 20 33 32 20 62 Add a 32 b
1900: 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 it unsigned inte
1910: 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 6b 65 ger to the packe
1920: 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 69 78 d data... fix
1930: 5f 75 69 6e 74 36 34 20 64 61 74 61 0a 0a 20 20 _uint64 data..
1940: 20 20 20 20 20 20 41 64 64 20 61 20 36 34 20 62 Add a 64 b
1950: 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 it unsigned inte
1960: 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 6b 65 ger to the packe
1970: 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 6c 6f d data... flo
1980: 61 74 33 32 20 64 61 74 61 0a 0a 20 20 20 20 20 at32 data..
1990: 20 20 20 41 64 64 20 61 20 33 32 2d 62 69 74 20 Add a 32-bit
19a0: 66 6c 6f 61 74 20 74 6f 20 74 68 65 20 70 61 63 float to the pac
19b0: 6b 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 66 ked data... f
19c0: 6c 6f 61 74 36 34 20 64 61 74 61 0a 0a 20 20 20 loat64 data..
19d0: 20 20 20 20 20 41 64 64 20 61 20 36 34 2d 62 69 Add a 64-bi
19e0: 74 20 28 64 6f 75 62 6c 65 20 70 72 65 63 69 73 t (double precis
19f0: 69 6f 6e 29 20 66 6c 6f 61 74 20 74 6f 20 74 68 ion) float to th
1a00: 65 20 70 61 63 6b 65 64 20 64 61 74 61 2e 0a 0a e packed data...
1a10: 20 20 20 20 69 6e 74 20 64 61 74 61 0a 0a 20 20 int data..
1a20: 20 20 20 20 20 20 41 64 64 20 61 6e 20 69 6e 74 Add an int
1a30: 65 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 6b eger to the pack
1a40: 65 64 20 64 61 74 61 2c 20 6c 65 74 20 74 68 65 ed data, let the
1a50: 20 70 61 63 6b 65 72 20 63 68 6f 6f 73 65 20 74 packer choose t
1a60: 68 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 20 he best.
1a70: 70 61 63 6b 69 6e 67 2e 0a 0a 20 20 20 20 69 6e packing... in
1a80: 74 38 20 64 61 74 61 0a 0a 20 20 20 20 20 20 20 t8 data..
1a90: 20 41 64 64 20 61 6e 20 38 20 62 69 74 20 69 6e Add an 8 bit in
1aa0: 74 65 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 teger to the pac
1ab0: 6b 65 64 20 64 61 74 61 2c 20 6c 65 74 20 74 68 ked data, let th
1ac0: 65 20 70 61 63 6b 65 72 20 63 68 6f 6f 73 65 20 e packer choose
1ad0: 74 68 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 the best.
1ae0: 20 70 61 63 6b 69 6e 67 2e 0a 0a 20 20 20 20 69 packing... i
1af0: 6e 74 31 36 20 64 61 74 61 0a 0a 20 20 20 20 20 nt16 data..
1b00: 20 20 20 41 64 64 20 61 20 31 36 20 62 69 74 20 Add a 16 bit
1b10: 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65 20 70 integer to the p
1b20: 61 63 6b 65 64 20 64 61 74 61 2c 20 6c 65 74 20 acked data, let
1b30: 74 68 65 20 70 61 63 6b 65 72 20 63 68 6f 6f 73 the packer choos
1b40: 65 20 74 68 65 20 62 65 73 74 0a 20 20 20 20 20 e the best.
1b50: 20 20 20 70 61 63 6b 69 6e 67 2e 0a 0a 20 20 20 packing...
1b60: 20 69 6e 74 33 32 20 64 61 74 61 0a 0a 20 20 20 int32 data..
1b70: 20 20 20 20 20 41 64 64 20 61 20 33 32 20 62 69 Add a 32 bi
1b80: 74 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65 t integer to the
1b90: 20 70 61 63 6b 65 64 20 64 61 74 61 2c 20 6c 65 packed data, le
1ba0: 74 20 74 68 65 20 70 61 63 6b 65 72 20 63 68 6f t the packer cho
1bb0: 6f 73 65 20 74 68 65 20 62 65 73 74 0a 20 20 20 ose the best.
1bc0: 20 20 20 20 20 70 61 63 6b 69 6e 67 2e 0a 0a 20 packing...
1bd0: 20 20 20 69 6e 74 36 34 20 64 61 74 61 0a 0a 20 int64 data..
1be0: 20 20 20 20 20 20 20 41 64 64 20 61 20 36 34 20 Add a 64
1bf0: 62 69 74 20 69 6e 74 65 67 65 72 20 74 6f 20 74 bit integer to t
1c00: 68 65 20 70 61 63 6b 65 64 20 64 61 74 61 2c 20 he packed data,
1c10: 6c 65 74 20 74 68 65 20 70 61 63 6b 65 72 20 63 let the packer c
1c20: 68 6f 6f 73 65 20 74 68 65 20 62 65 73 74 0a 20 hoose the best.
1c30: 20 20 20 20 20 20 20 70 61 63 6b 69 6e 67 2e 0a packing..
1c40: 0a 20 20 20 20 6c 69 73 74 20 65 6c 65 6d 65 6e . list elemen
1c50: 54 79 70 65 20 6c 69 73 74 0a 0a 20 20 20 20 20 Type list..
1c60: 20 20 20 41 64 64 20 61 20 54 63 6c 20 6c 69 73 Add a Tcl lis
1c70: 74 20 74 6f 20 74 68 65 20 70 61 63 6b 65 64 20 t to the packed
1c80: 64 61 74 61 2e 20 54 68 69 73 20 69 73 20 65 71 data. This is eq
1c90: 75 69 76 61 6c 65 6e 74 20 74 6f 20 63 61 6c 6c uivalent to call
1ca0: 69 6e 67 20 6d 65 74 68 6f 64 0a 20 20 20 20 20 ing method.
1cb0: 20 20 20 70 61 63 6b 20 61 72 72 61 79 20 77 69 pack array wi
1cc0: 74 68 20 74 68 65 20 6c 69 73 74 20 6c 65 6e 67 th the list leng
1cd0: 74 68 20 61 73 20 61 72 67 75 6d 65 6e 74 20 66 th as argument f
1ce0: 6f 6c 6c 6f 77 65 64 20 62 79 20 63 61 6c 6c 73 ollowed by calls
1cf0: 20 74 6f 20 6d 65 74 68 6f 64 0a 20 20 20 20 20 to method.
1d00: 20 20 20 70 61 63 6b 20 65 6c 65 6d 65 6e 74 54 pack elementT
1d10: 79 70 65 20 66 6f 72 20 65 61 63 68 20 6c 69 73 ype for each lis
1d20: 74 20 65 6c 65 6d 65 6e 74 2e 0a 0a 20 20 20 20 t element...
1d30: 6c 6f 6e 67 20 64 61 74 61 0a 0a 20 20 20 20 20 long data..
1d40: 20 20 20 41 64 64 20 61 20 6c 6f 6e 67 20 69 6e Add a long in
1d50: 74 65 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 teger to the pac
1d60: 6b 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 6c ked data... l
1d70: 6f 6e 67 5f 6c 6f 6e 67 20 64 61 74 61 0a 0a 20 ong_long data..
1d80: 20 20 20 20 20 20 20 41 64 64 20 61 20 6c 6f 6e Add a lon
1d90: 67 20 6c 6f 6e 67 20 69 6e 74 65 67 65 72 20 74 g long integer t
1da0: 6f 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 o the packed dat
1db0: 61 2e 0a 0a 20 20 20 20 6d 61 70 20 73 69 7a 65 a... map size
1dc0: 0a 0a 20 20 20 20 20 20 20 20 41 64 64 20 74 68 .. Add th
1dd0: 65 20 6d 61 70 20 73 69 7a 65 20 74 6f 20 74 68 e map size to th
1de0: 65 20 70 61 63 6b 65 64 20 64 61 74 61 2e 20 4d e packed data. M
1df0: 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 ust be followed
1e00: 62 79 20 73 69 7a 65 20 70 61 69 72 73 20 6f 66 by size pairs of
1e10: 0a 20 20 20 20 20 20 20 20 63 61 6c 6c 73 20 74 . calls t
1e20: 6f 20 6d 65 74 68 6f 64 20 70 61 63 6b 20 74 6f o method pack to
1e30: 20 61 64 64 20 74 68 65 20 6b 65 79 73 20 61 6e add the keys an
1e40: 64 20 76 61 6c 75 65 73 20 74 6f 20 74 68 65 20 d values to the
1e50: 70 61 63 6b 65 64 20 64 61 74 61 2e 0a 0a 20 20 packed data...
1e60: 20 20 6d 69 63 72 6f 73 65 63 6f 6e 64 73 20 6d microseconds m
1e70: 69 63 72 6f 73 0a 0a 20 20 20 20 20 20 20 20 41 icros.. A
1e80: 64 64 20 61 20 6d 69 63 72 6f 73 65 63 6f 6e 64 dd a microsecond
1e90: 20 74 69 6d 65 73 74 61 6d 70 20 74 6f 20 74 68 timestamp to th
1ea0: 65 20 70 61 63 6b 65 64 20 64 61 74 61 20 61 73 e packed data as
1eb0: 20 61 20 74 69 6d 65 73 74 61 6d 70 39 36 2e 0a a timestamp96..
1ec0: 0a 20 20 20 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 . millisecond
1ed0: 73 20 6d 69 6c 6c 69 73 0a 0a 20 20 20 20 20 20 s millis..
1ee0: 20 20 41 64 64 20 61 20 6d 69 6c 6c 69 73 65 63 Add a millisec
1ef0: 6f 6e 64 20 74 69 6d 65 73 74 61 6d 70 20 74 6f ond timestamp to
1f00: 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 61 the packed data
1f10: 20 61 73 20 61 20 74 69 6d 65 73 74 61 6d 70 39 as a timestamp9
1f20: 36 2e 0a 0a 20 20 20 20 6e 69 6c 0a 0a 20 20 20 6... nil..
1f30: 20 20 20 20 20 41 64 64 20 61 20 6e 69 6c 20 74 Add a nil t
1f40: 6f 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 o the packed dat
1f50: 61 2e 0a 0a 20 20 20 20 73 68 6f 72 74 20 64 61 a... short da
1f60: 74 61 0a 0a 20 20 20 20 20 20 20 20 41 64 64 20 ta.. Add
1f70: 61 20 73 68 6f 72 74 20 69 6e 74 65 67 65 72 20 a short integer
1f80: 74 6f 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 to the packed da
1f90: 74 61 2e 0a 0a 20 20 20 20 73 74 72 20 73 74 72 ta... str str
1fa0: 69 6e 67 0a 0a 20 20 20 20 20 20 20 20 41 64 64 ing.. Add
1fb0: 20 61 20 73 74 72 69 6e 67 20 74 6f 20 74 68 65 a string to the
1fc0: 20 70 61 63 6b 65 64 20 64 61 74 61 2e 0a 0a 20 packed data...
1fd0: 20 20 20 74 63 6c 5f 61 72 72 61 79 20 6b 65 79 tcl_array key
1fe0: 54 79 70 65 20 76 61 6c 75 65 54 79 70 65 20 61 Type valueType a
1ff0: 72 72 61 79 4e 61 6d 65 0a 0a 20 20 20 20 20 20 rrayName..
2000: 20 20 41 64 64 20 61 20 54 63 6c 20 61 72 72 61 Add a Tcl arra
2010: 79 20 74 6f 20 74 68 65 20 70 61 63 6b 65 64 20 y to the packed
2020: 64 61 74 61 2e 20 54 68 69 73 20 69 73 20 65 71 data. This is eq
2030: 75 69 76 61 6c 65 6e 74 20 74 6f 20 63 61 6c 6c uivalent to call
2040: 69 6e 67 20 6d 65 74 68 6f 64 0a 20 20 20 20 20 ing method.
2050: 20 20 20 70 61 63 6b 20 6d 61 70 20 77 69 74 68 pack map with
2060: 20 74 68 65 20 61 72 72 61 79 20 73 69 7a 65 20 the array size
2070: 61 73 20 61 72 67 75 6d 65 6e 74 2c 20 66 6f 6c as argument, fol
2080: 6c 6f 77 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 lowed by calling
2090: 20 6d 65 74 68 6f 64 0a 20 20 20 20 20 20 20 20 method.
20a0: 70 61 63 6b 20 6b 65 79 54 79 70 65 20 61 6e 64 pack keyType and
20b0: 20 6d 65 74 68 6f 64 20 70 61 63 6b 20 76 61 6c method pack val
20c0: 75 65 54 79 70 65 20 66 6f 72 20 65 61 63 68 20 ueType for each
20d0: 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 20 69 key/value pair i
20e0: 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 61 72 n the. ar
20f0: 72 61 79 2e 0a 0a 20 20 20 20 74 69 6d 65 73 74 ray... timest
2100: 61 6d 70 33 32 20 73 65 63 6f 6e 64 73 0a 0a 20 amp32 seconds..
2110: 20 20 20 20 20 20 20 41 64 64 20 61 20 33 32 2d Add a 32-
2120: 62 69 74 20 75 6e 73 69 67 6e 65 64 20 74 69 6d bit unsigned tim
2130: 65 73 74 61 6d 70 20 74 6f 20 74 68 65 20 70 61 estamp to the pa
2140: 63 6b 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 cked data...
2150: 74 69 6d 65 73 74 61 6d 70 36 34 20 73 65 63 6f timestamp64 seco
2160: 6e 64 73 20 6e 61 6e 6f 73 65 63 6f 6e 64 73 0a nds nanoseconds.
2170: 0a 20 20 20 20 20 20 20 20 41 64 64 20 61 20 36 . Add a 6
2180: 34 2d 62 69 74 20 74 69 6d 65 73 74 61 6d 70 20 4-bit timestamp
2190: 28 33 34 20 62 69 74 73 20 66 6f 72 20 73 65 63 (34 bits for sec
21a0: 6f 6e 64 73 2c 20 33 30 20 62 69 74 73 20 66 6f onds, 30 bits fo
21b0: 72 20 6e 61 6e 6f 73 65 63 6f 6e 64 73 2c 0a 20 r nanoseconds,.
21c0: 20 20 20 20 20 20 20 62 6f 74 68 20 75 6e 73 69 both unsi
21d0: 67 6e 65 64 29 20 74 6f 20 74 68 65 20 70 61 63 gned) to the pac
21e0: 6b 65 64 20 64 61 74 61 2e 20 4e 61 6e 6f 73 65 ked data. Nanose
21f0: 63 6f 6e 64 73 20 6d 75 73 74 20 6e 6f 74 20 65 conds must not e
2200: 78 63 65 65 64 0a 20 20 20 20 20 20 20 20 39 39 xceed. 99
2210: 39 39 39 39 39 39 39 2e 0a 0a 20 20 20 20 74 69 9999999... ti
2220: 6d 65 73 74 61 6d 70 39 36 20 73 65 63 6f 6e 64 mestamp96 second
2230: 73 20 6e 61 6e 6f 73 65 63 6f 6e 64 73 0a 0a 20 s nanoseconds..
2240: 20 20 20 20 20 20 20 41 64 64 20 61 20 39 36 2d Add a 96-
2250: 62 69 74 20 74 69 6d 65 73 74 61 6d 70 20 28 36 bit timestamp (6
2260: 34 20 62 69 74 73 20 66 6f 72 20 73 65 63 6f 6e 4 bits for secon
2270: 64 73 2c 20 73 69 67 6e 65 64 2c 20 61 6e 64 20 ds, signed, and
2280: 33 32 20 62 69 74 73 20 66 6f 72 0a 20 20 20 20 32 bits for.
2290: 20 20 20 20 6e 61 6e 6f 73 65 63 6f 6e 64 73 2c nanoseconds,
22a0: 20 75 6e 73 69 67 6e 65 64 29 20 74 6f 20 74 68 unsigned) to th
22b0: 65 20 70 61 63 6b 65 64 20 64 61 74 61 2e 20 4e e packed data. N
22c0: 61 6e 6f 73 65 63 6f 6e 64 73 20 6d 75 73 74 20 anoseconds must
22d0: 6e 6f 74 20 65 78 63 65 65 64 0a 20 20 20 20 20 not exceed.
22e0: 20 20 20 39 39 39 39 39 39 39 39 39 2e 0a 0a 20 999999999...
22f0: 20 20 20 74 72 75 65 0a 0a 20 20 20 20 20 20 20 true..
2300: 20 41 64 64 20 61 20 62 6f 6f 6c 65 61 6e 20 77 Add a boolean w
2310: 69 74 68 20 76 61 6c 75 65 20 74 72 75 65 20 74 ith value true t
2320: 6f 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 o the packed dat
2330: 61 2e 0a 0a 20 20 20 20 75 69 6e 74 38 20 64 61 a... uint8 da
2340: 74 61 0a 0a 20 20 20 20 20 20 20 20 41 64 64 20 ta.. Add
2350: 61 6e 20 38 20 62 69 74 20 75 6e 73 69 67 6e 65 an 8 bit unsigne
2360: 64 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65 d integer to the
2370: 20 70 61 63 6b 65 64 20 64 61 74 61 2c 20 6c 65 packed data, le
2380: 74 20 74 68 65 20 70 61 63 6b 65 72 20 63 68 6f t the packer cho
2390: 6f 73 65 0a 20 20 20 20 20 20 20 20 74 68 65 20 ose. the
23a0: 62 65 73 74 20 70 61 63 6b 69 6e 67 2e 0a 0a 20 best packing...
23b0: 20 20 20 75 69 6e 74 31 36 20 64 61 74 61 0a 0a uint16 data..
23c0: 20 20 20 20 20 20 20 20 41 64 64 20 61 20 31 36 Add a 16
23d0: 20 62 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e bit unsigned in
23e0: 74 65 67 65 72 20 74 6f 20 74 68 65 20 70 61 63 teger to the pac
23f0: 6b 65 64 20 64 61 74 61 2c 20 6c 65 74 20 74 68 ked data, let th
2400: 65 20 70 61 63 6b 65 72 20 63 68 6f 6f 73 65 0a e packer choose.
2410: 20 20 20 20 20 20 20 20 74 68 65 20 62 65 73 74 the best
2420: 20 70 61 63 6b 69 6e 67 2e 0a 0a 20 20 20 20 75 packing... u
2430: 69 6e 74 33 32 20 64 61 74 61 0a 0a 20 20 20 20 int32 data..
2440: 20 20 20 20 41 64 64 20 61 20 33 32 20 62 69 74 Add a 32 bit
2450: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 unsigned intege
2460: 72 20 74 6f 20 74 68 65 20 70 61 63 6b 65 64 20 r to the packed
2470: 64 61 74 61 2c 20 6c 65 74 20 74 68 65 20 70 61 data, let the pa
2480: 63 6b 65 72 20 63 68 6f 6f 73 65 0a 20 20 20 20 cker choose.
2490: 20 20 20 20 74 68 65 20 62 65 73 74 20 70 61 63 the best pac
24a0: 6b 69 6e 67 2e 0a 0a 20 20 20 20 75 69 6e 74 36 king... uint6
24b0: 34 20 64 61 74 61 0a 0a 20 20 20 20 20 20 20 20 4 data..
24c0: 41 64 64 20 61 20 36 34 20 62 69 74 20 75 6e 73 Add a 64 bit uns
24d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 6f igned integer to
24e0: 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 61 the packed data
24f0: 2c 20 6c 65 74 20 74 68 65 20 70 61 63 6b 65 72 , let the packer
2500: 20 63 68 6f 6f 73 65 0a 20 20 20 20 20 20 20 20 choose.
2510: 74 68 65 20 62 65 73 74 20 70 61 63 6b 69 6e 67 the best packing
2520: 2e 0a 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 5f ... unsigned_
2530: 69 6e 74 20 64 61 74 61 0a 0a 20 20 20 20 20 20 int data..
2540: 20 20 41 64 64 20 61 6e 20 75 6e 73 69 67 6e 65 Add an unsigne
2550: 64 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65 d integer to the
2560: 20 70 61 63 6b 65 64 20 64 61 74 61 2e 0a 0a 20 packed data...
2570: 20 20 20 75 6e 73 69 67 6e 65 64 5f 6c 6f 6e 67 unsigned_long
2580: 20 64 61 74 61 0a 0a 20 20 20 20 20 20 20 20 41 data.. A
2590: 64 64 20 61 20 75 6e 73 69 67 6e 65 64 20 6c 6f dd a unsigned lo
25a0: 6e 67 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 ng integer to th
25b0: 65 20 70 61 63 6b 65 64 20 64 61 74 61 2e 0a 0a e packed data...
25c0: 20 20 20 20 75 6e 73 69 67 6e 65 64 5f 6c 6f 6e unsigned_lon
25d0: 67 5f 6c 6f 6e 67 20 64 61 74 61 0a 0a 20 20 20 g_long data..
25e0: 20 20 20 20 20 41 64 64 20 61 6e 20 75 6e 73 69 Add an unsi
25f0: 67 6e 65 64 20 6c 6f 6e 67 20 6c 6f 6e 67 20 69 gned long long i
2600: 6e 74 65 67 65 72 20 74 6f 20 74 68 65 20 70 61 nteger to the pa
2610: 63 6b 65 64 20 64 61 74 61 2e 0a 0a 20 20 20 20 cked data...
2620: 75 6e 73 69 67 6e 65 64 5f 73 68 6f 72 74 20 64 unsigned_short d
2630: 61 74 61 0a 0a 20 20 20 20 20 20 20 20 41 64 64 ata.. Add
2640: 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 73 68 6f an unsigned sho
2650: 72 74 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 rt integer to th
2660: 65 20 70 61 63 6b 65 64 20 64 61 74 61 2e 0a 0a e packed data...
2670: 45 78 61 6d 70 6c 65 73 0a 3d 3d 3d 3d 3d 3d 3d Examples.=======
2680: 3d 0a 0a 43 72 65 61 74 69 6e 67 20 61 20 2a 6d =..Creating a *m
2690: 73 67 70 61 63 6b 3a 3a 70 61 63 6b 65 72 2a 20 sgpack::packer*
26a0: 6f 62 6a 65 63 74 20 61 6e 64 20 70 61 63 6b 69 object and packi
26b0: 6e 67 20 73 6f 6d 65 20 64 61 74 61 3a 0a 0a 7c ng some data:..|
26c0: 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 package require
26d0: 20 6d 73 67 70 61 63 6b 0a 0a 7c 20 73 65 74 20 msgpack..| set
26e0: 70 20 5b 6d 73 67 70 61 63 6b 3a 3a 70 61 63 6b p [msgpack::pack
26f0: 65 72 20 6e 65 77 5d 0a 0a 7c 20 24 70 20 70 61 er new]..| $p pa
2700: 63 6b 20 69 6e 74 20 31 32 33 34 35 36 37 38 39 ck int 123456789
2710: 0a 7c 20 24 70 20 70 61 63 6b 20 73 74 72 20 22 .| $p pack str "
2720: 41 20 4d 65 73 73 61 67 65 50 61 63 6b 20 65 78 A MessagePack ex
2730: 61 6d 70 6c 65 22 0a 7c 20 24 70 20 70 61 63 6b ample".| $p pack
2740: 20 64 69 63 74 20 69 6e 74 20 73 74 72 20 7b 31 dict int str {1
2750: 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 7c 20 73 65 one 2 two}.| se
2760: 74 20 70 61 63 6b 65 64 5f 64 61 74 61 20 5b 24 t packed_data [$
2770: 70 20 64 61 74 61 5d 0a 7c 20 24 70 20 64 65 73 p data].| $p des
2780: 74 72 6f 79 0a 0a 4e 6f 77 20 75 6e 70 61 63 6b troy..Now unpack
2790: 20 74 68 65 20 70 61 63 6b 65 64 20 64 61 74 61 the packed data
27a0: 20 75 73 69 6e 67 20 61 20 2a 6d 73 67 70 61 63 using a *msgpac
27b0: 6b 3a 3a 70 61 63 6b 65 72 2a 20 6f 62 6a 65 63 k::packer* objec
27c0: 74 3a 0a 0a 7c 20 70 61 63 6b 61 67 65 20 72 65 t:..| package re
27d0: 71 75 69 72 65 20 6d 73 67 70 61 63 6b 0a 0a 7c quire msgpack..|
27e0: 20 73 65 74 20 75 20 5b 6d 73 67 70 61 63 6b 3a set u [msgpack:
27f0: 3a 75 6e 70 61 63 6b 65 72 20 6e 65 77 5d 0a 7c :unpacker new].|
2800: 20 24 75 20 75 6e 70 61 63 6b 5f 73 74 72 69 6e $u unpack_strin
2810: 67 20 24 70 61 63 6b 65 64 5f 64 61 74 61 0a 0a g $packed_data..
2820: 7c 20 24 75 20 64 65 73 74 72 6f 79 0a 0a 41 66 | $u destroy..Af
2830: 74 65 72 20 75 6e 70 61 63 6b 69 6e 67 2c 20 74 ter unpacking, t
2840: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 73 he following lis
2850: 74 20 6f 66 20 74 79 70 65 2f 76 61 6c 75 65 20 t of type/value
2860: 70 61 69 72 73 20 69 73 20 72 65 74 75 72 6e 65 pairs is returne
2870: 64 20 62 79 20 74 68 65 0a 75 6e 70 61 63 6b 5f d by the.unpack_
2880: 73 74 72 69 6e 67 20 6d 65 74 68 6f 64 3a 0a 0a string method:..
2890: 7c 20 7b 69 6e 74 65 67 65 72 20 31 32 33 34 35 | {integer 12345
28a0: 36 37 38 39 7d 20 7b 73 74 72 20 7b 41 20 4d 65 6789} {str {A Me
28b0: 73 73 61 67 65 50 61 63 6b 20 65 78 61 6d 70 6c ssagePack exampl
28c0: 65 7d 7d 20 7b 6d 61 70 20 7b 7b 69 6e 74 65 67 e}} {map {{integ
28d0: 65 72 20 31 7d 20 7b 73 74 72 20 6f 6e 65 7d 20 er 1} {str one}
28e0: 7b 69 6e 74 65 67 65 72 20 32 7d 20 7b 73 74 72 {integer 2} {str
28f0: 20 74 77 6f 7d 7d 7d 0a 0a 54 68 65 20 73 61 6d two}}}..The sam
2900: 65 20 65 78 61 6d 70 6c 65 20 75 73 69 6e 67 20 e example using
2910: 74 68 65 20 70 61 63 6b 20 75 74 69 6c 69 74 79 the pack utility
2920: 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 70 61 function for pa
2930: 63 6b 69 6e 67 20 74 68 65 20 64 61 74 61 3a 0a cking the data:.
2940: 0a 7c 20 73 65 74 20 70 61 63 6b 65 64 5f 64 61 .| set packed_da
2950: 74 61 20 22 22 0a 7c 20 61 70 70 65 6e 64 20 70 ta "".| append p
2960: 61 63 6b 65 64 5f 64 61 74 61 20 5b 6d 73 67 70 acked_data [msgp
2970: 61 63 6b 20 70 61 63 6b 20 69 6e 74 20 30 78 46 ack pack int 0xF
2980: 46 46 46 46 46 46 46 5d 0a 7c 20 61 70 70 65 6e FFFFFFF].| appen
2990: 64 20 70 61 63 6b 65 64 5f 64 61 74 61 20 5b 6d d packed_data [m
29a0: 73 67 70 61 63 6b 20 70 61 63 6b 20 62 69 6e 20 sgpack pack bin
29b0: 22 41 20 55 74 69 6c 69 74 79 20 65 78 61 6d 70 "A Utility examp
29c0: 6c 65 22 5d 0a 7c 20 61 70 70 65 6e 64 20 70 61 le"].| append pa
29d0: 63 6b 65 64 5f 64 61 74 61 20 5b 6d 73 67 70 61 cked_data [msgpa
29e0: 63 6b 20 70 61 63 6b 20 64 69 63 74 20 69 6e 74 ck pack dict int
29f0: 20 73 74 72 20 7b 33 20 74 68 72 65 65 20 34 20 str {3 three 4
2a00: 66 6f 75 72 7d 5d 0a 0a 41 6e 20 75 73 69 6e 67 four}]..An using
2a10: 20 74 68 65 20 75 6e 70 61 63 6b 20 75 74 69 6c the unpack util
2a20: 69 74 79 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 ity function to
2a30: 75 6e 70 61 63 6b 20 74 68 65 20 64 61 74 61 3a unpack the data:
2a40: 0a 0a 7c 20 70 75 74 73 20 5b 6d 73 67 70 61 63 ..| puts [msgpac
2a50: 6b 20 75 6e 70 61 63 6b 20 24 70 61 63 6b 65 64 k unpack $packed
2a60: 5f 64 61 74 61 5d 0a 0a 41 66 74 65 72 20 75 6e _data]..After un
2a70: 70 61 63 6b 69 6e 67 2c 20 74 68 65 20 66 6f 6c packing, the fol
2a80: 6c 6f 77 69 6e 67 20 6c 69 73 74 20 6f 66 20 74 lowing list of t
2a90: 79 70 65 2f 76 61 6c 75 65 20 70 61 69 72 73 20 ype/value pairs
2aa0: 69 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 is returned by t
2ab0: 68 65 0a 75 6e 70 61 63 6b 20 75 74 69 6c 69 74 he.unpack utilit
2ac0: 79 20 66 75 6e 63 74 69 6f 6e 3a 0a 0a 7c 20 7b y function:..| {
2ad0: 69 6e 74 65 67 65 72 20 34 32 39 34 39 36 37 32 integer 42949672
2ae0: 39 35 7d 20 7b 62 69 6e 20 7b 41 20 55 74 69 6c 95} {bin {A Util
2af0: 69 74 79 20 65 78 61 6d 70 6c 65 7d 7d 20 7b 6d ity example}} {m
2b00: 61 70 20 7b 7b 69 6e 74 65 67 65 72 20 33 7d 20 ap {{integer 3}
2b10: 7b 73 74 72 20 74 68 72 65 65 7d 20 7b 69 6e 74 {str three} {int
2b20: 65 67 65 72 20 34 7d 20 7b 73 74 72 20 66 6f 75 eger 4} {str fou
2b30: 72 7d 7d 7d 0a 0a 57 69 74 68 20 73 65 74 5f 65 r}}}..With set_e
2b40: 78 74 5f 75 6e 70 61 63 6b 65 72 20 79 6f 75 20 xt_unpacker you
2b50: 63 61 6e 20 72 65 67 69 73 74 65 72 20 61 20 68 can register a h
2b60: 61 6e 64 6c 65 72 20 74 6f 20 75 6e 70 61 63 6b andler to unpack
2b70: 20 63 75 73 74 6f 6d 20 65 78 74 65 6e 73 69 6f custom extensio
2b80: 6e 0a 74 79 70 65 73 2e 0a 0a 7c 20 73 65 74 20 n.types...| set
2b90: 75 70 20 5b 6d 73 67 70 61 63 6b 3a 3a 75 6e 70 up [msgpack::unp
2ba0: 61 63 6b 65 72 20 6e 65 77 5d 0a 0a 7c 20 70 72 acker new]..| pr
2bb0: 6f 63 20 78 6f 72 20 7b 6e 20 74 79 70 65 20 64 oc xor {n type d
2bc0: 61 74 61 7d 20 7b 0a 7c 20 20 20 20 20 73 65 74 ata} {.| set
2bd0: 20 72 65 73 20 7b 7d 0a 7c 20 20 20 20 20 66 6f res {}.| fo
2be0: 72 65 61 63 68 20 62 20 5b 73 70 6c 69 74 20 24 reach b [split $
2bf0: 64 61 74 61 20 7b 7d 5d 20 7b 0a 7c 20 20 20 20 data {}] {.|
2c00: 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 73 set code [s
2c10: 63 61 6e 20 24 62 20 25 63 5d 0a 7c 20 20 20 20 can $b %c].|
2c20: 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 20 append res
2c30: 5b 66 6f 72 6d 61 74 20 25 63 20 5b 65 78 70 72 [format %c [expr
2c40: 20 7b 20 24 63 6f 64 65 20 5e 20 24 6e 20 7d 5d { $code ^ $n }]
2c50: 5d 0a 7c 20 20 20 20 20 7d 0a 0a 7c 20 20 20 20 ].| }..|
2c60: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 65 6e return [list en
2c70: 63 72 79 70 74 65 64 20 24 72 65 73 5d 0a 7c 20 crypted $res].|
2c80: 7d 0a 0a 7c 20 24 75 70 20 73 65 74 5f 65 78 74 }..| $up set_ext
2c90: 5f 75 6e 70 61 63 6b 65 72 20 31 30 30 20 7b 78 _unpacker 100 {x
2ca0: 6f 72 20 35 7d 0a 7c 20 23 20 50 72 69 6e 74 73 or 5}.| # Prints
2cb0: 20 22 7b 65 6e 63 72 79 70 74 65 64 20 48 65 6c "{encrypted Hel
2cc0: 6c 6f 21 7d 22 2e 0a 7c 20 70 75 74 73 20 5b 24 lo!}"..| puts [$
2cd0: 75 70 20 75 6e 70 61 63 6b 5f 73 74 72 69 6e 67 up unpack_string
2ce0: 20 5b 6d 73 67 70 61 63 6b 20 70 61 63 6b 20 65 [msgpack pack e
2cf0: 78 74 20 31 30 30 20 4d 60 69 69 6a 24 5d 5d 0a xt 100 M`iij$]].
2d00: 7c 20 24 75 70 20 64 65 73 74 72 6f 79 0a 0a 42 | $up destroy..B
2d10: 75 67 73 2c 20 69 64 65 61 73 2c 20 66 65 65 64 ugs, ideas, feed
2d20: 62 61 63 6b 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d back.===========
2d30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 ==========..This
2d40: 20 64 6f 63 75 6d 65 6e 74 2c 20 61 6e 64 20 74 document, and t
2d50: 68 65 20 70 61 63 6b 61 67 65 20 69 74 20 64 65 he package it de
2d60: 73 63 72 69 62 65 73 2c 20 77 69 6c 6c 20 75 6e scribes, will un
2d70: 64 6f 75 62 74 65 64 6c 79 20 63 6f 6e 74 61 69 doubtedly contai
2d80: 6e 20 62 75 67 73 20 61 6e 64 0a 6f 74 68 65 72 n bugs and.other
2d90: 20 70 72 6f 62 6c 65 6d 73 2e 20 50 6c 65 61 73 problems. Pleas
2da0: 65 20 72 65 70 6f 72 74 20 73 75 63 68 20 61 74 e report such at
2db0: 20 74 68 65 20 5f 47 69 74 68 75 62 20 74 72 61 the _Github tra
2dc0: 63 6b 65 72 5f 0a 3c 55 52 4c 3a 68 74 74 70 73 cker_.<URL:https
2dd0: 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6a 64 ://github.com/jd
2de0: 63 38 2f 6d 73 67 70 61 63 6b 2f 69 73 73 75 65 c8/msgpack/issue
2df0: 73 3e 2e 20 50 6c 65 61 73 65 20 61 6c 73 6f 20 s>. Please also
2e00: 72 65 70 6f 72 74 20 61 6e 79 20 69 64 65 61 73 report any ideas
2e10: 20 66 6f 72 0a 65 6e 68 61 6e 63 65 6d 65 6e 74 for.enhancement
2e20: 73 20 79 6f 75 20 6d 61 79 20 68 61 76 65 20 66 s you may have f
2e30: 6f 72 20 65 69 74 68 65 72 20 70 61 63 6b 61 67 or either packag
2e40: 65 20 61 6e 64 2f 6f 72 20 64 6f 63 75 6d 65 6e e and/or documen
2e50: 74 61 74 69 6f 6e 2e 0a 0a 4c 69 63 65 6e 73 65 tation...License
2e60: 0a 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 65 20 63 6f .=======..The co
2e70: 64 65 20 69 73 20 72 65 6c 65 61 73 65 64 20 75 de is released u
2e80: 6e 64 65 72 20 74 68 65 20 42 53 44 20 6c 69 63 nder the BSD lic
2e90: 65 6e 73 65 20 28 73 70 65 63 69 66 69 63 61 6c ense (specifical
2ea0: 6c 79 20 4d 6f 64 69 66 69 65 64 20 42 53 44 20 ly Modified BSD
2eb0: 61 6b 61 20 4e 65 77 0a 42 53 44 20 61 6b 61 20 aka New.BSD aka
2ec0: 33 2d 63 6c 61 75 73 65 20 42 53 44 29 2e 20 43 3-clause BSD). C
2ed0: 68 65 63 6b 20 43 4f 50 59 49 4e 47 2e 42 53 44 heck COPYING.BSD
2ee0: 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 20 61 for more info a
2ef0: 62 6f 75 74 20 74 68 65 20 6c 69 63 65 6e 73 65 bout the license
2f00: 2e 0a 0a 4b 45 59 57 4f 52 44 53 0a 3d 3d 3d 3d ...KEYWORDS.====
2f10: 3d 3d 3d 3d 0a 0a 4d 65 73 73 61 67 65 50 61 63 ====..MessagePac
2f20: 6b 2c 20 6d 73 67 70 61 63 6b 2c 20 73 65 72 69 k, msgpack, seri
2f30: 61 6c 69 7a 61 74 69 6f 6e 0a 0a 43 41 54 45 47 alization..CATEG
2f40: 4f 52 59 0a 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 65 ORY.========..Se
2f50: 72 69 61 6c 69 7a 61 74 69 6f 6e 0a 0a 43 4f 50 rialization..COP
2f60: 59 52 49 47 48 54 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d YRIGHT.=========
2f70: 0a 0a 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 ..Copyright (c)
2f80: 32 30 31 33 20 4a 6f 73 20 44 65 63 6f 73 74 65 2013 Jos Decoste
2f90: 72 20 3c 6a 6f 73 2e 64 65 63 6f 73 74 65 72 40 r <jos.decoster@
2fa0: 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 43 6f 70 79 72 gmail.com>.Copyr
2fb0: 69 67 68 74 20 28 63 29 20 32 30 32 30 20 44 2e ight (c) 2020 D.
2fc0: 20 42 6f 68 64 61 6e 20 3c 68 74 74 70 73 3a 2f Bohdan <https:/
2fd0: 2f 64 62 6f 68 64 61 6e 2e 63 6f 6d 2f 3e 0a 0a /dbohdan.com/>..