aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/puddle/v2/resource_list.go
blob: b2430959bfb843ad40ff69dada04339fe3bb2ad5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package puddle

type resList[T any] []*Resource[T]

func (l *resList[T]) append(val *Resource[T]) { *l = append(*l, val) }

func (l *resList[T]) popBack() *Resource[T] {
	idx := len(*l) - 1
	val := (*l)[idx]
	(*l)[idx] = nil // Avoid memory leak
	*l = (*l)[:idx]

	return val
}

func (l *resList[T]) remove(val *Resource[T]) {
	for i, elem := range *l {
		if elem == val {
			lastIdx := len(*l) - 1
			(*l)[i] = (*l)[lastIdx]
			(*l)[lastIdx] = nil // Avoid memory leak
			(*l) = (*l)[:lastIdx]
			return
		}
	}

	panic("BUG: removeResource could not find res in slice")
}