summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-structr/list.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/codeberg.org/gruf/go-structr/list.go')
-rw-r--r--vendor/codeberg.org/gruf/go-structr/list.go54
1 files changed, 25 insertions, 29 deletions
diff --git a/vendor/codeberg.org/gruf/go-structr/list.go b/vendor/codeberg.org/gruf/go-structr/list.go
index 764036d47..bf380aa26 100644
--- a/vendor/codeberg.org/gruf/go-structr/list.go
+++ b/vendor/codeberg.org/gruf/go-structr/list.go
@@ -40,9 +40,12 @@ func new_list() *list {
// free_list releases the list.
func free_list(list *list) {
- list.head = nil
- list.tail = nil
- list.len = 0
+ if list.head != nil ||
+ list.tail != nil ||
+ list.len != 0 {
+ should_not_reach()
+ return
+ }
list_pool.Put(list)
}
@@ -115,21 +118,28 @@ func (l *list) remove(elem *list_elem) {
elem.prev = nil
switch {
- // elem is ONLY one in list.
- case next == nil && prev == nil:
- l.head = nil
- l.tail = nil
-
- // elem is front in list.
- case next != nil && prev == nil:
+ case next == nil:
+ if prev == nil {
+ // next == nil && prev == nil
+ //
+ // elem is ONLY one in list.
+ l.head = nil
+ l.tail = nil
+ } else {
+ // next == nil && prev != nil
+ //
+ // elem is last in list.
+ l.tail = prev
+ prev.next = nil
+ }
+
+ case prev == nil:
+ // next != nil && prev == nil
+ //
+ // elem is front in list.
l.head = next
next.prev = nil
- // elem is last in list.
- case prev != nil && next == nil:
- l.tail = prev
- prev.next = nil
-
// elem in middle of list.
default:
next.prev = prev
@@ -139,17 +149,3 @@ func (l *list) remove(elem *list_elem) {
// Decr count
l.len--
}
-
-// rangefn will range all elems in list, passing each to fn.
-func (l *list) rangefn(fn func(*list_elem)) {
- if fn == nil {
- panic("nil fn")
- }
- for e := l.head; //
- e != nil; //
- {
- n := e.next
- fn(e)
- e = n
- }
-}