package masque

import "sync"

type NetBuffer struct {
	capacity uint32
	buf      sync.Pool
}

func (n *NetBuffer) Get() []byte {
	return *(n.buf.Get().(*[]byte))
}

func (n *NetBuffer) Put(buf []byte) {
	if cap(buf) != int(n.capacity) {
		return
	}
	n.buf.Put(&buf)
}

func NewNetBuffer(capacity uint32) *NetBuffer {
	if capacity == 0 {
		panic("capacity must be greater than 0")
	}
	return &NetBuffer{
		capacity: capacity,
		buf: sync.Pool{
			New: func() interface{} {
				b := make([]byte, capacity)
				return &b
			},
		},
	}
}
