From 8325b0bcc602cdaeb71de95c6e7553f7a8620df1 Mon Sep 17 00:00:00 2001 From: Garet Halliday <me@garet.holiday> Date: Fri, 6 Oct 2023 14:06:26 -0500 Subject: [PATCH] a --- lib/gat/poolers/session/pooler.go | 1 + lib/util/slices/delete.go | 16 ++++++++++++++++ lib/util/slices/remove.go | 20 +------------------- 3 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 lib/util/slices/delete.go diff --git a/lib/gat/poolers/session/pooler.go b/lib/gat/poolers/session/pooler.go index 8f0dd004..ab067e6b 100644 --- a/lib/gat/poolers/session/pooler.go +++ b/lib/gat/poolers/session/pooler.go @@ -6,6 +6,7 @@ import ( "github.com/google/uuid" "gfx.cafe/gfx/pggat/lib/gat/pool" + "gfx.cafe/gfx/pggat/lib/util/slices" ) diff --git a/lib/util/slices/delete.go b/lib/util/slices/delete.go new file mode 100644 index 00000000..e0ab94da --- /dev/null +++ b/lib/util/slices/delete.go @@ -0,0 +1,16 @@ +package slices + +// Delete is similar to Remove but doesn't retain order. +func Delete[T comparable](slice []T, item T) []T { + i := Index(slice, item) + if i == -1 { + return slice + } + return DeleteIndex(slice, i) +} + +func DeleteIndex[T any](slice []T, idx int) []T { + slice[idx] = slice[len(slice)-1] + slice[len(slice)-1] = *new(T) + return slice[:len(slice)-1] +} diff --git a/lib/util/slices/remove.go b/lib/util/slices/remove.go index 04ca24c1..baebe539 100644 --- a/lib/util/slices/remove.go +++ b/lib/util/slices/remove.go @@ -1,8 +1,6 @@ package slices -// Remove will check for item in the target slice. If it finds it, it will move it to the end of the slice and return a slice -// with length-1. The original slice will contain all items (though in a different order), and the new slice will contain all -// but item. +// Remove will remove the item from the slice, retaining the original order func Remove[T comparable](slice []T, item T) []T { i := Index(slice, item) if i == -1 { @@ -12,22 +10,6 @@ func Remove[T comparable](slice []T, item T) []T { } func RemoveIndex[T any](slice []T, idx int) []T { - item := slice[idx] - copy(slice[idx:], slice[idx+1:]) - slice[len(slice)-1] = item - return slice[:len(slice)-1] -} - -// Delete is similar to Remove but leaves a *new(T) in the old slice, allowing the value to be GC'd -func Delete[T comparable](slice []T, item T) []T { - i := Index(slice, item) - if i == -1 { - return slice - } - return DeleteIndex(slice, i) -} - -func DeleteIndex[T any](slice []T, idx int) []T { copy(slice[idx:], slice[idx+1:]) slice[len(slice)-1] = *new(T) return slice[:len(slice)-1] -- GitLab