-
Notifications
You must be signed in to change notification settings - Fork 1
/
buffer.go
48 lines (39 loc) · 810 Bytes
/
buffer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package ipfix
import (
"io"
)
type scratchBuffer interface {
append(int) ([]byte, error)
bytesFree() int
finalize(io.Writer) (err error)
length() int
}
type basicBuffer []byte
func makeBasicBuffer(size int) scratchBuffer {
ret := basicBuffer(make([]byte, 0, size))
return &ret
}
func (b *basicBuffer) bytesFree() int {
return cap(*b) - len(*b)
}
func (b *basicBuffer) append(num int) ([]byte, error) {
blen := len(*b)
if blen+num > cap(*b) {
return nil, bufferFullError(blen + num - cap(*b))
}
*b = (*b)[:blen+num]
return (*b)[blen : blen+num], nil
}
func (b *basicBuffer) finalize(w io.Writer) (err error) {
_, err = w.Write(*b)
if err == nil {
*b = (*b)[:0]
}
return
}
func (b *basicBuffer) length() int {
return len(*b)
}
func (b *basicBuffer) reset(i int) {
*b = (*b)[:i]
}