Hex Artifact Content
Not logged in

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/>..