trie/bintrie: inline get/InsertValuesAtStem wrappers

Gballet's three empty 'suggestion' blocks (comments 3101685618,
3101734697, 3101736436) mark the unexported wrapper declarations on
getValuesAtStem and insertValuesAtStem plus one temporary-var line.
Apply:

- Inline the unexported getValuesAtStem body into GetValuesAtStem (start
  the walk at s.root directly instead of via a two-arg helper). The
  function is not self-recursive, so the wrapper was pure indirection.
- Tighten InsertValuesAtStem to two lines using the 's.root, err = ...'
  idiom — the recursive helper stays (it IS self-recursive), only the
  public entry point gets the cleanup.

Adds docstrings on both public entry points.
This commit is contained in:
CPerezz 2026-04-18 18:59:27 +02:00
parent aa21cd1b80
commit b86e2d3e20
No known key found for this signature in database
GPG key ID: 62045F34B97177DD

View file

@ -38,12 +38,11 @@ func (s *NodeStore) GetValue(stem []byte, suffix byte, resolver NodeResolverFn)
return values[suffix], nil return values[suffix], nil
} }
// GetValuesAtStem returns the 256 value slots at stem, or nil if the stem
// is not in the trie. The returned slice is a view over the in-place
// StemNode values array (no allocation) and must be treated read-only.
func (s *NodeStore) GetValuesAtStem(stem []byte, resolver NodeResolverFn) ([][]byte, error) { func (s *NodeStore) GetValuesAtStem(stem []byte, resolver NodeResolverFn) ([][]byte, error) {
return s.getValuesAtStem(s.root, stem, resolver) cur := s.root
}
func (s *NodeStore) getValuesAtStem(ref nodeRef, stem []byte, resolver NodeResolverFn) ([][]byte, error) {
cur := ref
var parentIdx uint32 var parentIdx uint32
var parentIsLeft bool var parentIsLeft bool
@ -125,13 +124,14 @@ func (s *NodeStore) InsertSingle(stem []byte, suffix byte, value []byte, resolve
return s.InsertValuesAtStem(stem, values[:], resolver) return s.InsertValuesAtStem(stem, values[:], resolver)
} }
// InsertValuesAtStem writes the supplied value slots at stem. values may be
// sparse (nil entries are ignored). The recursive implementation dispatches
// through the same body, so a single code path handles internal descent,
// HashedNode resolution, stem merge, and stem split.
func (s *NodeStore) InsertValuesAtStem(stem []byte, values [][]byte, resolver NodeResolverFn) error { func (s *NodeStore) InsertValuesAtStem(stem []byte, values [][]byte, resolver NodeResolverFn) error {
newRoot, err := s.insertValuesAtStem(s.root, stem, values, resolver, 0) var err error
if err != nil { s.root, err = s.insertValuesAtStem(s.root, stem, values, resolver, 0)
return err return err
}
s.root = newRoot
return nil
} }
func (s *NodeStore) insertValuesAtStem(ref nodeRef, stem []byte, values [][]byte, resolver NodeResolverFn, depth int) (nodeRef, error) { func (s *NodeStore) insertValuesAtStem(ref nodeRef, stem []byte, values [][]byte, resolver NodeResolverFn, depth int) (nodeRef, error) {