summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-structr/index.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-10-02 10:58:20 +0000
committerLibravatar GitHub <noreply@github.com>2024-10-02 10:58:20 +0000
commitc17abea92162f0ac1ccfff4223e26eac431c1198 (patch)
treeac9809f327136590a5c239c8f9594c1fea1ad989 /vendor/codeberg.org/gruf/go-structr/index.go
parent[chore]: Bump go.uber.org/automaxprocs from 1.5.3 to 1.6.0 (#3376) (diff)
downloadgotosocial-c17abea92162f0ac1ccfff4223e26eac431c1198.tar.xz
update go-structr to v0.8.11 (#3380)
Diffstat (limited to 'vendor/codeberg.org/gruf/go-structr/index.go')
-rw-r--r--vendor/codeberg.org/gruf/go-structr/index.go42
1 files changed, 31 insertions, 11 deletions
diff --git a/vendor/codeberg.org/gruf/go-structr/index.go b/vendor/codeberg.org/gruf/go-structr/index.go
index 127bddb1f..558832da9 100644
--- a/vendor/codeberg.org/gruf/go-structr/index.go
+++ b/vendor/codeberg.org/gruf/go-structr/index.go
@@ -197,8 +197,13 @@ func (i *Index) get(key string, hook func(*indexed_item)) {
return
}
- // Iterate all entries in list.
- l.rangefn(func(elem *list_elem) {
+ // Iterate the list.
+ for elem := l.head; //
+ elem != nil; //
+ {
+ // Get next before
+ // any modification.
+ next := elem.next
// Extract element entry + item.
entry := (*index_entry)(elem.data)
@@ -206,18 +211,21 @@ func (i *Index) get(key string, hook func(*indexed_item)) {
// Pass to hook.
hook(item)
- })
+
+ // Set next.
+ elem = next
+ }
}
// key uses hasher to generate Key{} from given raw parts.
func (i *Index) key(buf *byteutil.Buffer, parts []unsafe.Pointer) string {
+ buf.B = buf.B[:0]
if len(parts) != len(i.fields) {
panicf("incorrect number key parts: want=%d received=%d",
len(i.fields),
len(parts),
)
}
- buf.B = buf.B[:0]
if !allow_zero(i.flags) {
for x, field := range i.fields {
before := len(buf.B)
@@ -301,8 +309,13 @@ func (i *Index) delete(key string, hook func(*indexed_item)) {
// Delete at hash.
i.data.Delete(key)
- // Iterate entries in list.
- l.rangefn(func(elem *list_elem) {
+ // Iterate the list.
+ for elem := l.head; //
+ elem != nil; //
+ {
+ // Get next before
+ // any modification.
+ next := elem.next
// Remove elem.
l.remove(elem)
@@ -319,7 +332,10 @@ func (i *Index) delete(key string, hook func(*indexed_item)) {
// Pass to hook.
hook(item)
- })
+
+ // Set next.
+ elem = next
+ }
// Release list.
free_list(l)
@@ -375,17 +391,21 @@ var index_entry_pool sync.Pool
func new_index_entry() *index_entry {
v := index_entry_pool.Get()
if v == nil {
- v = new(index_entry)
+ e := new(index_entry)
+ e.elem.data = unsafe.Pointer(e)
+ v = e
}
entry := v.(*index_entry)
- ptr := unsafe.Pointer(entry)
- entry.elem.data = ptr
return entry
}
// free_index_entry releases the index_entry.
func free_index_entry(entry *index_entry) {
- entry.elem.data = nil
+ if entry.elem.next != nil ||
+ entry.elem.prev != nil {
+ should_not_reach()
+ return
+ }
entry.key = ""
entry.index = nil
entry.item = nil