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  )