|
- // This package is the support library for the msgp code generator (http://github.com/tinylib/msgp).
- //
- // This package defines the utilites used by the msgp code generator for encoding and decoding MessagePack
- // from []byte and io.Reader/io.Writer types. Much of this package is devoted to helping the msgp code
- // generator implement the Marshaler/Unmarshaler and Encodable/Decodable interfaces.
- //
- // This package defines four "families" of functions:
- // - AppendXxxx() appends an object to a []byte in MessagePack encoding.
- // - ReadXxxxBytes() reads an object from a []byte and returns the remaining bytes.
- // - (*Writer).WriteXxxx() writes an object to the buffered *Writer type.
- // - (*Reader).ReadXxxx() reads an object from a buffered *Reader type.
- //
- // Once a type has satisfied the `Encodable` and `Decodable` interfaces,
- // it can be written and read from arbitrary `io.Writer`s and `io.Reader`s using
- // msgp.Encode(io.Writer, msgp.Encodable)
- // and
- // msgp.Decode(io.Reader, msgp.Decodable)
- //
- // There are also methods for converting MessagePack to JSON without
- // an explicit de-serialization step.
- //
- // For additional tips, tricks, and gotchas, please visit
- // the wiki at http://github.com/tinylib/msgp
- package msgp
-
- const last4 = 0x0f
- const first4 = 0xf0
- const last5 = 0x1f
- const first3 = 0xe0
- const last7 = 0x7f
-
- func isfixint(b byte) bool {
- return b>>7 == 0
- }
-
- func isnfixint(b byte) bool {
- return b&first3 == mnfixint
- }
-
- func isfixmap(b byte) bool {
- return b&first4 == mfixmap
- }
-
- func isfixarray(b byte) bool {
- return b&first4 == mfixarray
- }
-
- func isfixstr(b byte) bool {
- return b&first3 == mfixstr
- }
-
- func wfixint(u uint8) byte {
- return u & last7
- }
-
- func rfixint(b byte) uint8 {
- return b
- }
-
- func wnfixint(i int8) byte {
- return byte(i) | mnfixint
- }
-
- func rnfixint(b byte) int8 {
- return int8(b)
- }
-
- func rfixmap(b byte) uint8 {
- return b & last4
- }
-
- func wfixmap(u uint8) byte {
- return mfixmap | (u & last4)
- }
-
- func rfixstr(b byte) uint8 {
- return b & last5
- }
-
- func wfixstr(u uint8) byte {
- return (u & last5) | mfixstr
- }
-
- func rfixarray(b byte) uint8 {
- return (b & last4)
- }
-
- func wfixarray(u uint8) byte {
- return (u & last4) | mfixarray
- }
-
- // These are all the byte
- // prefixes defined by the
- // msgpack standard
- const (
- // 0XXXXXXX
- mfixint uint8 = 0x00
-
- // 111XXXXX
- mnfixint uint8 = 0xe0
-
- // 1000XXXX
- mfixmap uint8 = 0x80
-
- // 1001XXXX
- mfixarray uint8 = 0x90
-
- // 101XXXXX
- mfixstr uint8 = 0xa0
-
- mnil uint8 = 0xc0
- mfalse uint8 = 0xc2
- mtrue uint8 = 0xc3
- mbin8 uint8 = 0xc4
- mbin16 uint8 = 0xc5
- mbin32 uint8 = 0xc6
- mext8 uint8 = 0xc7
- mext16 uint8 = 0xc8
- mext32 uint8 = 0xc9
- mfloat32 uint8 = 0xca
- mfloat64 uint8 = 0xcb
- muint8 uint8 = 0xcc
- muint16 uint8 = 0xcd
- muint32 uint8 = 0xce
- muint64 uint8 = 0xcf
- mint8 uint8 = 0xd0
- mint16 uint8 = 0xd1
- mint32 uint8 = 0xd2
- mint64 uint8 = 0xd3
- mfixext1 uint8 = 0xd4
- mfixext2 uint8 = 0xd5
- mfixext4 uint8 = 0xd6
- mfixext8 uint8 = 0xd7
- mfixext16 uint8 = 0xd8
- mstr8 uint8 = 0xd9
- mstr16 uint8 = 0xda
- mstr32 uint8 = 0xdb
- marray16 uint8 = 0xdc
- marray32 uint8 = 0xdd
- mmap16 uint8 = 0xde
- mmap32 uint8 = 0xdf
- )
|