diff options
author | 2024-01-26 12:14:10 +0000 | |
---|---|---|
committer | 2024-01-26 12:14:10 +0000 | |
commit | 07207e71e932b0d4a38253e069be6090872c4e3f (patch) | |
tree | bee71828fe2e6d3086bcd36e175301388fc95972 /vendor/codeberg.org/gruf/go-structr/util.go | |
parent | [docs] Fix log-timestamp-format (#2572) (diff) | |
download | gotosocial-07207e71e932b0d4a38253e069be6090872c4e3f.tar.xz |
[performance] cache library performance enhancements (updates go-structr => v0.2.0) (#2575)
* update go-structr => v0.2.0
* update readme
* whoops, fix the link
Diffstat (limited to 'vendor/codeberg.org/gruf/go-structr/util.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-structr/util.go | 50 |
1 files changed, 15 insertions, 35 deletions
diff --git a/vendor/codeberg.org/gruf/go-structr/util.go b/vendor/codeberg.org/gruf/go-structr/util.go index d8f227baf..01ac06cf1 100644 --- a/vendor/codeberg.org/gruf/go-structr/util.go +++ b/vendor/codeberg.org/gruf/go-structr/util.go @@ -7,8 +7,7 @@ import ( "unicode" "unicode/utf8" - "codeberg.org/gruf/go-byteutil" - "codeberg.org/gruf/go-mangler" + "github.com/zeebo/xxh3" ) // findField will search for a struct field with given set of names, where names is a len > 0 slice of names account for nesting. @@ -68,22 +67,8 @@ func findField(t reflect.Type, names []string, allowZero bool) (sfield structfie t = field.Type } - // Get final type mangler func. - sfield.mangler = mangler.Get(t) - - if allowZero { - var buf []byte - - // Allocate field instance. - v := reflect.New(field.Type) - v = v.Elem() - - // Serialize this zero value into buf. - buf = sfield.mangler(buf, v.Interface()) - - // Set zero value str. - sfield.zero = string(buf) - } + // Get final type hash func. + sfield.hasher = hasher(t) return } @@ -93,26 +78,21 @@ func panicf(format string, args ...any) { panic(fmt.Sprintf(format, args...)) } -// bufpool provides a memory pool of byte -// buffers used when encoding key types. -var bufPool sync.Pool +// hashPool provides a memory pool of xxh3 +// hasher objects used indexing field vals. +var hashPool sync.Pool -// getBuf fetches buffer from memory pool. -func getBuf() *byteutil.Buffer { - v := bufPool.Get() +// gethashbuf fetches hasher from memory pool. +func getHasher() *xxh3.Hasher { + v := hashPool.Get() if v == nil { - buf := new(byteutil.Buffer) - buf.B = make([]byte, 0, 512) - v = buf + v = new(xxh3.Hasher) } - return v.(*byteutil.Buffer) + return v.(*xxh3.Hasher) } -// putBuf replaces buffer in memory pool. -func putBuf(buf *byteutil.Buffer) { - if buf.Cap() > int(^uint16(0)) { - return // drop large bufs - } - buf.Reset() - bufPool.Put(buf) +// putHasher replaces hasher in memory pool. +func putHasher(h *xxh3.Hasher) { + h.Reset() + hashPool.Put(h) } |