types/views: add Slice methods on Slice views
Updates #cleanup for change elsewhere. Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
0f5090c526
commit
a2153afeeb
|
@ -75,6 +75,15 @@ func (v SliceView[T, V]) Len() int { return len(v.ж) }
|
|||
// At returns a View of the element at index `i` of the slice.
|
||||
func (v SliceView[T, V]) At(i int) V { return v.ж[i].View() }
|
||||
|
||||
// SliceFrom returns v[i:].
|
||||
func (v SliceView[T, V]) SliceFrom(i int) SliceView[T, V] { return SliceView[T, V]{v.ж[i:]} }
|
||||
|
||||
// SliceTo returns v[:i]
|
||||
func (v SliceView[T, V]) SliceTo(i int) SliceView[T, V] { return SliceView[T, V]{v.ж[:i]} }
|
||||
|
||||
// Slice returns v[i:j]
|
||||
func (v SliceView[T, V]) Slice(i, j int) SliceView[T, V] { return SliceView[T, V]{v.ж[i:j]} }
|
||||
|
||||
// AppendTo appends the underlying slice values to dst.
|
||||
func (v SliceView[T, V]) AppendTo(dst []V) []V {
|
||||
for _, x := range v.ж {
|
||||
|
@ -122,6 +131,15 @@ func (v Slice[T]) Len() int { return len(v.ж) }
|
|||
// At returns the element at index `i` of the slice.
|
||||
func (v Slice[T]) At(i int) T { return v.ж[i] }
|
||||
|
||||
// SliceFrom returns v[i:].
|
||||
func (v Slice[T]) SliceFrom(i int) Slice[T] { return Slice[T]{v.ж[i:]} }
|
||||
|
||||
// SliceTo returns v[:i]
|
||||
func (v Slice[T]) SliceTo(i int) Slice[T] { return Slice[T]{v.ж[:i]} }
|
||||
|
||||
// Slice returns v[i:j]
|
||||
func (v Slice[T]) Slice(i, j int) Slice[T] { return Slice[T]{v.ж[i:j]} }
|
||||
|
||||
// AppendTo appends the underlying slice values to dst.
|
||||
func (v Slice[T]) AppendTo(dst []T) []T {
|
||||
return append(dst, v.ж...)
|
||||
|
|
|
@ -128,4 +128,13 @@ func TestViewUtils(t *testing.T) {
|
|||
c.Check(SliceEqualAnyOrder(v, SliceOf([]string{"bar", "foo"})), qt.Equals, true)
|
||||
c.Check(SliceEqualAnyOrder(v, SliceOf([]string{"foo"})), qt.Equals, false)
|
||||
c.Check(SliceEqualAnyOrder(SliceOf([]string{"a", "a", "b"}), SliceOf([]string{"a", "b", "b"})), qt.Equals, false)
|
||||
|
||||
c.Check(SliceEqualAnyOrder(
|
||||
SliceOf([]string{"a", "b", "c"}).SliceFrom(1),
|
||||
SliceOf([]string{"b", "c"})),
|
||||
qt.Equals, true)
|
||||
c.Check(SliceEqualAnyOrder(
|
||||
SliceOf([]string{"a", "b", "c"}).Slice(1, 2),
|
||||
SliceOf([]string{"b", "c"}).SliceTo(1)),
|
||||
qt.Equals, true)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue