59 lines
1.0 KiB
Go
59 lines
1.0 KiB
Go
|
package structr
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"codeberg.org/gruf/go-byteutil"
|
||
|
)
|
||
|
|
||
|
// Key represents one key to
|
||
|
// lookup (potentially) stored
|
||
|
// entries in an Index.
|
||
|
type Key struct {
|
||
|
raw []any
|
||
|
key string
|
||
|
}
|
||
|
|
||
|
// Key returns the underlying cache key string.
|
||
|
// NOTE: this will not be log output friendly.
|
||
|
func (k Key) Key() string {
|
||
|
return k.key
|
||
|
}
|
||
|
|
||
|
// Equal returns whether keys are equal.
|
||
|
func (k Key) Equal(o Key) bool {
|
||
|
return k.key == o.key
|
||
|
}
|
||
|
|
||
|
// Value returns the raw slice of
|
||
|
// values that comprise this Key.
|
||
|
func (k Key) Values() []any {
|
||
|
return k.raw
|
||
|
}
|
||
|
|
||
|
// Zero indicates a zero value key.
|
||
|
func (k Key) Zero() bool {
|
||
|
return k.raw == nil
|
||
|
}
|
||
|
|
||
|
var buf_pool sync.Pool
|
||
|
|
||
|
// new_buffer returns a new initialized byte buffer.
|
||
|
func new_buffer() *byteutil.Buffer {
|
||
|
v := buf_pool.Get()
|
||
|
if v == nil {
|
||
|
buf := new(byteutil.Buffer)
|
||
|
buf.B = make([]byte, 0, 512)
|
||
|
v = buf
|
||
|
}
|
||
|
return v.(*byteutil.Buffer)
|
||
|
}
|
||
|
|
||
|
// free_buffer releases the byte buffer.
|
||
|
func free_buffer(buf *byteutil.Buffer) {
|
||
|
if cap(buf.B) > int(^uint16(0)) {
|
||
|
return // drop large bufs
|
||
|
}
|
||
|
buf_pool.Put(buf)
|
||
|
}
|