11 func WriteBool(b bool, w io.Writer, n *int, err *error) {
18 WriteTo([]byte{bb}, w, n, err)
21 func ReadBool(r io.Reader, n *int, err *error) bool {
23 ReadFull(buf[:], r, n, err)
30 setFirstErr(err, errors.New("Invalid bool"))
35 func PutBool(buf []byte, b bool) {
43 func GetBool(buf []byte) (bool, error) {
50 return false, errors.New("Invalid bool")
56 func WriteByte(b byte, w io.Writer, n *int, err *error) {
57 WriteTo([]byte{b}, w, n, err)
60 func ReadByte(r io.Reader, n *int, err *error) byte {
62 ReadFull(buf[:], r, n, err)
68 func WriteInt8(i int8, w io.Writer, n *int, err *error) {
69 WriteByte(byte(i), w, n, err)
72 func ReadInt8(r io.Reader, n *int, err *error) int8 {
73 return int8(ReadByte(r, n, err))
78 func WriteUint8(i uint8, w io.Writer, n *int, err *error) {
79 WriteByte(byte(i), w, n, err)
82 func ReadUint8(r io.Reader, n *int, err *error) uint8 {
83 return uint8(ReadByte(r, n, err))
88 func WriteInt16(i int16, w io.Writer, n *int, err *error) {
90 binary.BigEndian.PutUint16(buf[:], uint16(i))
92 WriteTo(buf[:], w, n, err)
95 func ReadInt16(r io.Reader, n *int, err *error) int16 {
97 ReadFull(buf[:], r, n, err)
98 return int16(binary.BigEndian.Uint16(buf[:]))
101 func PutInt16(buf []byte, i int16) {
102 binary.BigEndian.PutUint16(buf, uint16(i))
105 func GetInt16(buf []byte) int16 {
106 return int16(binary.BigEndian.Uint16(buf))
111 func WriteUint16(i uint16, w io.Writer, n *int, err *error) {
113 binary.BigEndian.PutUint16(buf[:], uint16(i))
115 WriteTo(buf[:], w, n, err)
118 func ReadUint16(r io.Reader, n *int, err *error) uint16 {
120 ReadFull(buf[:], r, n, err)
121 return uint16(binary.BigEndian.Uint16(buf[:]))
124 func PutUint16(buf []byte, i uint16) {
125 binary.BigEndian.PutUint16(buf, i)
128 func GetUint16(buf []byte) uint16 {
129 return binary.BigEndian.Uint16(buf)
134 func WriteUint16s(iz []uint16, w io.Writer, n *int, err *error) {
135 WriteUint32(uint32(len(iz)), w, n, err)
136 for _, i := range iz {
137 WriteUint16(i, w, n, err)
144 func ReadUint16s(r io.Reader, n *int, err *error) []uint16 {
145 length := ReadUint32(r, n, err)
149 iz := make([]uint16, length)
150 for j := uint32(0); j < length; j++ {
151 ii := ReadUint16(r, n, err)
162 func WriteInt32(i int32, w io.Writer, n *int, err *error) {
164 binary.BigEndian.PutUint32(buf[:], uint32(i))
166 WriteTo(buf[:], w, n, err)
169 func ReadInt32(r io.Reader, n *int, err *error) int32 {
171 ReadFull(buf[:], r, n, err)
172 return int32(binary.BigEndian.Uint32(buf[:]))
175 func PutInt32(buf []byte, i int32) {
176 binary.BigEndian.PutUint32(buf, uint32(i))
179 func GetInt32(buf []byte) int32 {
180 return int32(binary.BigEndian.Uint32(buf))
185 func WriteUint32(i uint32, w io.Writer, n *int, err *error) {
187 binary.BigEndian.PutUint32(buf[:], uint32(i))
189 WriteTo(buf[:], w, n, err)
192 func ReadUint32(r io.Reader, n *int, err *error) uint32 {
194 ReadFull(buf[:], r, n, err)
195 return uint32(binary.BigEndian.Uint32(buf[:]))
198 func PutUint32(buf []byte, i uint32) {
199 binary.BigEndian.PutUint32(buf, i)
202 func GetUint32(buf []byte) uint32 {
203 return binary.BigEndian.Uint32(buf)
208 func WriteInt64(i int64, w io.Writer, n *int, err *error) {
210 binary.BigEndian.PutUint64(buf[:], uint64(i))
212 WriteTo(buf[:], w, n, err)
215 func ReadInt64(r io.Reader, n *int, err *error) int64 {
217 ReadFull(buf[:], r, n, err)
218 return int64(binary.BigEndian.Uint64(buf[:]))
221 func PutInt64(buf []byte, i int64) {
222 binary.BigEndian.PutUint64(buf, uint64(i))
225 func GetInt64(buf []byte) int64 {
226 return int64(binary.BigEndian.Uint64(buf))
231 func WriteUint64(i uint64, w io.Writer, n *int, err *error) {
233 binary.BigEndian.PutUint64(buf[:], uint64(i))
235 WriteTo(buf[:], w, n, err)
238 func ReadUint64(r io.Reader, n *int, err *error) uint64 {
240 ReadFull(buf[:], r, n, err)
241 return uint64(binary.BigEndian.Uint64(buf[:]))
244 func PutUint64(buf []byte, i uint64) {
245 binary.BigEndian.PutUint64(buf, i)
248 func GetUint64(buf []byte) uint64 {
249 return binary.BigEndian.Uint64(buf)
254 func UvarintSize(i uint64) int {
255 return uvarintSize(i) + 1 // The first byte encodes uvarintSize(i)
258 func uvarintSize(i uint64) int {
286 func WriteVarint(i int, w io.Writer, n *int, err *error) {
292 var size = uvarintSize(uint64(i))
294 // e.g. 0xF1 for a single negative byte
295 WriteUint8(uint8(size+0xF0), w, n, err)
297 WriteUint8(uint8(size), w, n, err)
301 binary.BigEndian.PutUint64(buf[:], uint64(i))
302 WriteTo(buf[(8-size):], w, n, err)
306 func ReadVarint(r io.Reader, n *int, err *error) int {
307 var size = ReadUint8(r, n, err)
309 if (size >> 4) == 0xF {
314 setFirstErr(err, errors.New("Varint overflow"))
319 setFirstErr(err, errors.New("Varint does not allow negative zero"))
324 ReadFull(buf[(8-size):], r, n, err)
325 var i = int(binary.BigEndian.Uint64(buf[:]))
333 func PutVarint(buf []byte, i int) (n int, err error) {
339 var size = uvarintSize(uint64(i))
340 if len(buf) < size+1 {
341 return 0, errors.New("Insufficient buffer length")
344 // e.g. 0xF1 for a single negative byte
345 buf[0] = byte(size + 0xF0)
351 binary.BigEndian.PutUint64(buf2[:], uint64(i))
352 copy(buf[1:], buf2[(8-size):])
357 func GetVarint(buf []byte) (i int, n int, err error) {
359 return 0, 0, errors.New("Insufficent buffer length")
361 var size = int(buf[0])
363 if (size >> 4) == 0xF {
368 return 0, 0, errors.New("Varint overflow")
372 return 0, 0, errors.New("Varint does not allow negative zero")
376 if len(buf) < 1+size {
377 return 0, 0, errors.New("Insufficient buffer length")
380 copy(buf2[(8-size):], buf[1:1+size])
381 i = int(binary.BigEndian.Uint64(buf2[:]))
383 return -i, size + 1, nil
385 return i, size + 1, nil
391 func WriteUvarint(i uint, w io.Writer, n *int, err *error) {
392 var size = uvarintSize(uint64(i))
393 WriteUint8(uint8(size), w, n, err)
396 binary.BigEndian.PutUint64(buf[:], uint64(i))
397 WriteTo(buf[(8-size):], w, n, err)
401 func ReadUvarint(r io.Reader, n *int, err *error) uint {
402 var size = ReadUint8(r, n, err)
404 setFirstErr(err, errors.New("Uvarint overflow"))
411 ReadFull(buf[(8-size):], r, n, err)
412 return uint(binary.BigEndian.Uint64(buf[:]))
415 func PutUvarint(buf []byte, i uint) (n int, err error) {
416 var size = uvarintSize(uint64(i))
417 if len(buf) < size+1 {
418 return 0, errors.New("Insufficient buffer length")
423 binary.BigEndian.PutUint64(buf2[:], uint64(i))
424 copy(buf[1:], buf2[(8-size):])
429 func GetUvarint(buf []byte) (i uint, n int, err error) {
431 return 0, 0, errors.New("Insufficent buffer length")
433 var size = int(buf[0])
435 return 0, 0, errors.New("Uvarint overflow")
440 if len(buf) < 1+size {
441 return 0, 0, errors.New("Insufficient buffer length")
444 copy(buf2[(8-size):], buf[1:1+size])
445 i = uint(binary.BigEndian.Uint64(buf2[:]))
446 return i, size + 1, nil
449 func setFirstErr(err *error, newErr error) {
450 if *err == nil && newErr != nil {