package blockchain
import (
+ "bytes"
"encoding/binary"
"errors"
"io"
"math"
- "sync"
-
- "github.com/bytom/vapor/encoding/bufpool"
)
-var bufPool = sync.Pool{New: func() interface{} { return new([9]byte) }}
-
var ErrRange = errors.New("value out of range")
// Reader wraps a buffer and provides utilities for decoding
}
sr := NewReader(s)
- err = f(sr)
- if err != nil {
+ if err = f(sr); err != nil {
return nil, err
}
return sr.buf, nil
if val > math.MaxInt32 {
return 0, ErrRange
}
- buf := bufPool.Get().(*[9]byte)
+
+ buf := new([9]byte)
n := binary.PutUvarint(buf[:], val)
b, err := w.Write(buf[:n])
- bufPool.Put(buf)
return b, err
}
if val > math.MaxInt64 {
return 0, ErrRange
}
- buf := bufPool.Get().(*[9]byte)
+
+ buf := new([9]byte)
n := binary.PutUvarint(buf[:], val)
b, err := w.Write(buf[:n])
- bufPool.Put(buf)
return b, err
}
if err != nil {
return n, err
}
+
n2, err := w.Write(str)
return n + n2, err
}
if err != nil {
return n, err
}
+
for _, s := range l {
n2, err := WriteVarstr31(w, s)
n += n2
// WriteExtensibleString sends the output of the given function, plus
// the given suffix, to w, together with a varint31 length prefix.
func WriteExtensibleString(w io.Writer, suffix []byte, f func(io.Writer) error) (int, error) {
- buf := bufpool.Get()
- defer bufpool.Put(buf)
- err := f(buf)
- if err != nil {
+ buf := bytes.NewBuffer(nil)
+ if err := f(buf); err != nil {
return 0, err
}
+
if len(suffix) > 0 {
- _, err := buf.Write(suffix)
- if err != nil {
+ if _, err := buf.Write(suffix); err != nil {
return 0, err
}
}