github.com/chrislusf/greenpack@v3.7.1-0.20170911073826-ad5bd10b7c47+incompatible/msgp/defs.go (about) 1 // This package is the support library for the greenpack code generator (http://github.com/glycerine/greenpack). 2 // 3 // This package defines the utilites used by the greenpack code generator for encoding and decoding MessagePack 4 // from []byte and io.Reader/io.Writer types. Much of this package is devoted to helping the greenpack code 5 // generator implement the Marshaler/Unmarshaler and Encodable/Decodable interfaces. 6 // 7 // This package defines four "families" of functions: 8 // - AppendXxxx() appends an object to a []byte in MessagePack encoding. 9 // - ReadXxxxBytes() reads an object from a []byte and returns the remaining bytes. 10 // - (*Writer).WriteXxxx() writes an object to the buffered *Writer type. 11 // - (*Reader).ReadXxxx() reads an object from a buffered *Reader type. 12 // 13 // Once a type has satisfied the `Encodable` and `Decodable` interfaces, 14 // it can be written and read from arbitrary `io.Writer`s and `io.Reader`s using 15 // msgp.Encode(io.Writer, msgp.Encodable) 16 // and 17 // msgp.Decode(io.Reader, msgp.Decodable) 18 // 19 // There are also methods for converting MessagePack to JSON without 20 // an explicit de-serialization step. 21 // 22 // For additional tips, tricks, and gotchas, please visit 23 // the wiki at http://github.com/glycerine/greenpack 24 package msgp 25 26 const last4 = 0x0f 27 const first4 = 0xf0 28 const last5 = 0x1f 29 const first3 = 0xe0 30 const last7 = 0x7f 31 32 func isfixint(b byte) bool { 33 return b>>7 == 0 34 } 35 36 func isnfixint(b byte) bool { 37 return b&first3 == mnfixint 38 } 39 40 func isfixmap(b byte) bool { 41 return b&first4 == mfixmap 42 } 43 44 func isfixarray(b byte) bool { 45 return b&first4 == mfixarray 46 } 47 48 func isfixstr(b byte) bool { 49 return b&first3 == mfixstr 50 } 51 52 func wfixint(u uint8) byte { 53 return u & last7 54 } 55 56 func rfixint(b byte) uint8 { 57 return b 58 } 59 60 func wnfixint(i int8) byte { 61 return byte(i) | mnfixint 62 } 63 64 func rnfixint(b byte) int8 { 65 return int8(b) 66 } 67 68 func rfixmap(b byte) uint8 { 69 return b & last4 70 } 71 72 func wfixmap(u uint8) byte { 73 return mfixmap | (u & last4) 74 } 75 76 func rfixstr(b byte) uint8 { 77 return b & last5 78 } 79 80 func wfixstr(u uint8) byte { 81 return (u & last5) | mfixstr 82 } 83 84 func rfixarray(b byte) uint8 { 85 return (b & last4) 86 } 87 88 func wfixarray(u uint8) byte { 89 return (u & last4) | mfixarray 90 } 91 92 // These are all the byte 93 // prefixes defined by the 94 // msgpack standard 95 const ( 96 // 0XXXXXXX 97 mfixint uint8 = 0x00 98 99 // 111XXXXX 100 mnfixint uint8 = 0xe0 101 102 // 1000XXXX 103 mfixmap uint8 = 0x80 104 105 // 1001XXXX 106 mfixarray uint8 = 0x90 107 108 // 101XXXXX 109 mfixstr uint8 = 0xa0 110 111 mnil uint8 = 0xc0 112 mfalse uint8 = 0xc2 113 mtrue uint8 = 0xc3 114 mbin8 uint8 = 0xc4 115 mbin16 uint8 = 0xc5 116 mbin32 uint8 = 0xc6 117 mext8 uint8 = 0xc7 118 mext16 uint8 = 0xc8 119 mext32 uint8 = 0xc9 120 mfloat32 uint8 = 0xca 121 mfloat64 uint8 = 0xcb 122 muint8 uint8 = 0xcc 123 muint16 uint8 = 0xcd 124 muint32 uint8 = 0xce 125 muint64 uint8 = 0xcf 126 mint8 uint8 = 0xd0 127 mint16 uint8 = 0xd1 128 mint32 uint8 = 0xd2 129 mint64 uint8 = 0xd3 130 mfixext1 uint8 = 0xd4 131 mfixext2 uint8 = 0xd5 132 mfixext4 uint8 = 0xd6 133 mfixext8 uint8 = 0xd7 134 mfixext16 uint8 = 0xd8 135 mstr8 uint8 = 0xd9 136 mstr16 uint8 = 0xda 137 mstr32 uint8 = 0xdb 138 marray16 uint8 = 0xdc 139 marray32 uint8 = 0xdd 140 mmap16 uint8 = 0xde 141 mmap32 uint8 = 0xdf 142 )