mirror of https://github.com/siddontang/go.git
add arena package
This commit is contained in:
parent
41fb29162e
commit
f9bb9e3d84
|
@ -0,0 +1,28 @@
|
|||
package arena
|
||||
|
||||
type Arena struct {
|
||||
buf []byte
|
||||
|
||||
size int
|
||||
}
|
||||
|
||||
func NewArena(size int) *Arena {
|
||||
a := new(Arena)
|
||||
|
||||
a.size = size
|
||||
a.buf = make([]byte, size, size)
|
||||
|
||||
return a
|
||||
}
|
||||
|
||||
func (a *Arena) Make(size int) []byte {
|
||||
if a.size < size {
|
||||
return make([]byte, size)
|
||||
} else if len(a.buf) < size {
|
||||
a.buf = make([]byte, a.size)
|
||||
}
|
||||
|
||||
b := a.buf[0:size]
|
||||
a.buf = a.buf[size:]
|
||||
return b
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package arena
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestArena(t *testing.T) {
|
||||
a := NewArena(100)
|
||||
|
||||
for i := 0; i < 50; i++ {
|
||||
a.buf[i] = 1
|
||||
}
|
||||
|
||||
for i := 50; i < 100; i++ {
|
||||
a.buf[i] = 2
|
||||
}
|
||||
|
||||
b1 := a.Make(50)
|
||||
|
||||
b2 := a.Make(30)
|
||||
|
||||
b3 := a.Make(40)
|
||||
|
||||
fmt.Printf("%p %d\n", b1, b1[49])
|
||||
fmt.Printf("%p %d\n", b2, b2[29])
|
||||
fmt.Printf("%p %d\n", b3, b3[39])
|
||||
}
|
Loading…
Reference in New Issue