From 87eb55a19e45bec5ad203c70fec92d17e77228a1 Mon Sep 17 00:00:00 2001 From: qydysky Date: Sun, 28 Jan 2024 16:13:19 +0800 Subject: [PATCH] 1 --- slice/Slice.go | 19 +++++++++++++++++++ slice/Slice_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/slice/Slice.go b/slice/Slice.go index 5d98d42..88ccbcc 100644 --- a/slice/Slice.go +++ b/slice/Slice.go @@ -159,3 +159,22 @@ func (t *Buf[T]) GetCopyBuf() (buf []T) { copy(buf, t.buf[:t.bufsize]) return } + +func DelFront[S ~[]*T, T any](s S, beforeIndex int) S { + return s[:copy(s, s[beforeIndex+1:])] +} + +func AddFront[S ~[]*T, T any](s S, t *T) S { + s = append(s, nil) + s = s[:1+copy(s[1:], s)] + s[0] = t + return s +} + +func DelBack[S ~[]*T, T any](s S, fromIndex int) S { + return s[:fromIndex] +} + +func AddBack[S ~[]*T, T any](s S, t *T) S { + return append(s, t) +} diff --git a/slice/Slice_test.go b/slice/Slice_test.go index a093095..e33d55c 100644 --- a/slice/Slice_test.go +++ b/slice/Slice_test.go @@ -3,6 +3,7 @@ package part import ( "bytes" "testing" + "unsafe" ) func TestXxx(t *testing.T) { @@ -79,3 +80,29 @@ func TestXxx2(t *testing.T) { t.Fatal() } } + +func Test3(t *testing.T) { + i := 1 + var s []*int + var p = unsafe.Pointer(&s) + s = append(s, &i, &i, &i) + if unsafe.Pointer(&s) != p || cap(s) != 3 || len(s) != 3 { + t.Fatal() + } + s = DelFront(s, 2) + if unsafe.Pointer(&s) != p || cap(s) != 3 || len(s) != 0 { + t.Fatal() + } + s = AddFront(s, &i) + if unsafe.Pointer(&s) != p || cap(s) != 3 || len(s) != 1 { + t.Fatal() + } + s = AddBack(s, &i) + if unsafe.Pointer(&s) != p || cap(s) != 3 || len(s) != 2 { + t.Fatal() + } + s = DelBack(s, 1) + if unsafe.Pointer(&s) != p || cap(s) != 3 || len(s) != 1 { + t.Fatal() + } +} -- 2.39.2