Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.1 KiB
142 lines
3.1 KiB
// 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 |
|
)
|
|
|