diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-structr/util.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-structr/util.go | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/vendor/codeberg.org/gruf/go-structr/util.go b/vendor/codeberg.org/gruf/go-structr/util.go deleted file mode 100644 index 01ac06cf1..000000000 --- a/vendor/codeberg.org/gruf/go-structr/util.go +++ /dev/null @@ -1,98 +0,0 @@ -package structr - -import ( - "fmt" - "reflect" - "sync" - "unicode" - "unicode/utf8" - - "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. -func findField(t reflect.Type, names []string, allowZero bool) (sfield structfield, ok bool) { - var ( - // isExported returns whether name is exported - // from a package; can be func or struct field. - isExported = func(name string) bool { - r, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(r) - } - - // popName pops the next name from - // the provided slice of field names. - popName = func() string { - // Pop next name. - name := names[0] - names = names[1:] - - // Ensure valid name. - if !isExported(name) { - panicf("field is not exported: %s", name) - } - - return name - } - - // field is the iteratively searched-for - // struct field value in below loop. - field reflect.StructField - ) - - for len(names) > 0 { - // Pop next name. - name := popName() - - // Follow any ptrs leading to field. - for t.Kind() == reflect.Pointer { - t = t.Elem() - } - - if t.Kind() != reflect.Struct { - // The end type after following ptrs must be struct. - panicf("field %s is not struct (ptr): %s", t, name) - } - - // Look for next field by name. - field, ok = t.FieldByName(name) - if !ok { - return - } - - // Append next set of indices required to reach field. - sfield.index = append(sfield.index, field.Index...) - - // Set the next type. - t = field.Type - } - - // Get final type hash func. - sfield.hasher = hasher(t) - - return -} - -// panicf provides a panic with string formatting. -func panicf(format string, args ...any) { - panic(fmt.Sprintf(format, args...)) -} - -// hashPool provides a memory pool of xxh3 -// hasher objects used indexing field vals. -var hashPool sync.Pool - -// gethashbuf fetches hasher from memory pool. -func getHasher() *xxh3.Hasher { - v := hashPool.Get() - if v == nil { - v = new(xxh3.Hasher) - } - return v.(*xxh3.Hasher) -} - -// putHasher replaces hasher in memory pool. -func putHasher(h *xxh3.Hasher) { - h.Reset() - hashPool.Put(h) -} |