views

package
v0.0.0-...-113f59a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 16, 2024 License: BSD-3-Clause Imports: 6 Imported by: 0

Documentation

Overview

Package views provides read-only accessors for commonly used value types.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SliceContains

func SliceContains[T comparable](v Slice[T], e T) bool

SliceContains reports whether v contains element e.

As it runs in O(n) time, use with care.

func SliceContainsFunc

func SliceContainsFunc[T any](v Slice[T], f func(T) bool) bool

SliceContainsFunc reports whether f reports true for any element in v.

func SliceEqual

func SliceEqual[T comparable](a, b Slice[T]) bool

SliceEqual is like the standard library's slices.Equal, but for two views.

func SliceEqualAnyOrder

func SliceEqualAnyOrder[T comparable](a, b Slice[T]) bool

SliceEqualAnyOrder reports whether a and b contain the same elements, regardless of order. The underlying slices for a and b can be nil.

Types

type ByteSlice

type ByteSlice[T ~[]byte] struct {
	// contains filtered or unexported fields
}

ByteSlice is a read-only accessor for types that are backed by a []byte.

func ByteSliceOf

func ByteSliceOf[T ~[]byte](x T) ByteSlice[T]

ByteSliceOf returns a ByteSlice for the provided slice.

func (ByteSlice[T]) AppendTo

func (v ByteSlice[T]) AppendTo(dst T) T

AppendTo appends the underlying slice values to dst.

func (ByteSlice[T]) AsSlice

func (v ByteSlice[T]) AsSlice() T

AsSlice returns a copy of the underlying slice.

func (ByteSlice[T]) At

func (v ByteSlice[T]) At(i int) byte

At returns the byte at index `i` of the slice.

func (ByteSlice[T]) Equal

func (v ByteSlice[T]) Equal(b T) bool

Equal reports whether the underlying slice is equal to b.

func (ByteSlice[T]) EqualView

func (v ByteSlice[T]) EqualView(b ByteSlice[T]) bool

EqualView reports whether the underlying slice is equal to b.

func (ByteSlice[T]) IsNil

func (v ByteSlice[T]) IsNil() bool

IsNil reports whether the underlying slice is nil.

func (ByteSlice[T]) Len

func (v ByteSlice[T]) Len() int

Len returns the length of the slice.

func (ByteSlice[T]) LenIter

func (v ByteSlice[T]) LenIter() []struct{}

LenIter returns a slice the same length as the v.Len(). The caller can then range over it to get the valid indexes. It does not allocate.

func (ByteSlice[T]) MapKey

func (v ByteSlice[T]) MapKey() SliceMapKey[byte]

MapKey returns a unique key for a slice, based on its address and length.

func (ByteSlice[T]) MarshalJSON

func (v ByteSlice[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (ByteSlice[T]) Mem

func (v ByteSlice[T]) Mem() mem.RO

Mem returns a read-only view of the underlying slice.

func (ByteSlice[T]) Slice

func (v ByteSlice[T]) Slice(i, j int) ByteSlice[T]

Slice returns v[i:j]

func (ByteSlice[T]) SliceFrom

func (v ByteSlice[T]) SliceFrom(i int) ByteSlice[T]

SliceFrom returns v[i:].

func (ByteSlice[T]) SliceTo

func (v ByteSlice[T]) SliceTo(i int) ByteSlice[T]

SliceTo returns v[:i]

func (*ByteSlice[T]) UnmarshalJSON

func (v *ByteSlice[T]) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler.

type Map

type Map[K comparable, V any] struct {
	// contains filtered or unexported fields
}

Map is a view over a map whose values are immutable.

func MapOf

func MapOf[K comparable, V comparable](m map[K]V) Map[K, V]

MapOf returns a view over m. It is the caller's responsibility to make sure K and V is immutable, if this is being used to provide a read-only view over m.

func (*Map[K, V]) AsMap

func (m *Map[K, V]) AsMap() map[K]V

AsMap returns a shallow-clone of the underlying map. If V is a pointer type, it is the caller's responsibility to make sure the values are immutable.

func (Map[K, V]) Get

func (m Map[K, V]) Get(k K) V

Get returns the element with key k.

func (Map[K, V]) GetOk

func (m Map[K, V]) GetOk(k K) (V, bool)

GetOk returns the element with key k and a bool representing whether the key is in map.

func (Map[K, V]) Has

func (m Map[K, V]) Has(k K) bool

Has reports whether k has an entry in the map.

func (Map[K, V]) IsNil

func (m Map[K, V]) IsNil() bool

IsNil reports whether the underlying map is nil.

func (Map[K, V]) Len

func (m Map[K, V]) Len() int

Len returns the number of elements in the map.

func (Map[K, V]) MarshalJSON

func (m Map[K, V]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (Map[K, V]) Range

func (m Map[K, V]) Range(f MapRangeFn[K, V])

Range calls f for every k,v pair in the underlying map. It stops iteration immediately if f returns false.

func (*Map[K, V]) UnmarshalJSON

func (m *Map[K, V]) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler. It should only be called on an uninitialized Map.

type MapFn

type MapFn[K comparable, T any, V any] struct {
	// contains filtered or unexported fields
}

MapFn is like Map but with a func to convert values from T to V. It is used to provide map of slices and views.

func MapFnOf

func MapFnOf[K comparable, T any, V any](m map[K]T, f func(T) V) MapFn[K, T, V]

MapFnOf returns a MapFn for m.

func (MapFn[K, T, V]) Get

func (m MapFn[K, T, V]) Get(k K) V

Get returns the element with key k.

func (MapFn[K, T, V]) GetOk

func (m MapFn[K, T, V]) GetOk(k K) (V, bool)

GetOk returns the element with key k and a bool representing whether the key is in map.

func (MapFn[K, T, V]) Has

func (m MapFn[K, T, V]) Has(k K) bool

Has reports whether k has an entry in the map.

func (MapFn[K, T, V]) IsNil

func (m MapFn[K, T, V]) IsNil() bool

IsNil reports whether the underlying map is nil.

func (MapFn[K, T, V]) Len

func (m MapFn[K, T, V]) Len() int

Len returns the number of elements in the map.

func (MapFn[K, T, V]) Range

func (m MapFn[K, T, V]) Range(f MapRangeFn[K, V])

Range calls f for every k,v pair in the underlying map. It stops iteration immediately if f returns false.

type MapRangeFn

type MapRangeFn[K comparable, V any] func(k K, v V) (cont bool)

MapRangeFn is the func called from a Map.Range call. Implementations should return false to stop range.

type Slice

type Slice[T any] struct {
	// contains filtered or unexported fields
}

Slice is a read-only accessor for a slice.

func SliceOf

func SliceOf[T any](x []T) Slice[T]

SliceOf returns a Slice for the provided slice for immutable values. It is the caller's responsibility to make sure V is immutable.

func (Slice[T]) AppendTo

func (v Slice[T]) AppendTo(dst []T) []T

AppendTo appends the underlying slice values to dst.

func (Slice[T]) AsSlice

func (v Slice[T]) AsSlice() []T

AsSlice returns a copy of underlying slice.

func (Slice[T]) At

func (v Slice[T]) At(i int) T

At returns the element at index `i` of the slice.

func (Slice[T]) ContainsFunc

func (v Slice[T]) ContainsFunc(f func(T) bool) bool

ContainsFunc reports whether any element in v satisfies f(e).

As it runs in O(n) time, use with care.

func (Slice[T]) IndexFunc

func (v Slice[T]) IndexFunc(f func(T) bool) int

IndexFunc returns the first index of an element in v satisfying f(e), or -1 if none do.

As it runs in O(n) time, use with care.

func (Slice[T]) IsNil

func (v Slice[T]) IsNil() bool

IsNil reports whether the underlying slice is nil.

func (Slice[T]) Len

func (v Slice[T]) Len() int

Len returns the length of the slice.

func (Slice[T]) LenIter

func (v Slice[T]) LenIter() []struct{}

LenIter returns a slice the same length as the v.Len(). The caller can then range over it to get the valid indexes. It does not allocate.

func (Slice[T]) MapKey

func (v Slice[T]) MapKey() SliceMapKey[T]

MapKey returns a unique key for a slice, based on its address and length.

func (Slice[T]) MarshalJSON

func (v Slice[T]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (Slice[T]) Slice

func (v Slice[T]) Slice(i, j int) Slice[T]

Slice returns v[i:j]

func (Slice[T]) SliceFrom

func (v Slice[T]) SliceFrom(i int) Slice[T]

SliceFrom returns v[i:].

func (Slice[T]) SliceTo

func (v Slice[T]) SliceTo(i int) Slice[T]

SliceTo returns v[:i]

func (*Slice[T]) UnmarshalJSON

func (v *Slice[T]) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler.

type SliceMapKey

type SliceMapKey[T any] struct {
	// contains filtered or unexported fields
}

SliceMapKey represents a comparable unique key for a slice, based on its address and length. It can be used to key maps by slices but should only be used when the underlying slice is immutable.

Empty and nil slices have different keys.

type SliceView

type SliceView[T ViewCloner[T, V], V StructView[T]] struct {
	// contains filtered or unexported fields
}

SliceView wraps []T to provide accessors which return an immutable view V of T. It is used to provide the equivalent of SliceOf([]V) without having to allocate []V from []T.

func SliceOfViews

func SliceOfViews[T ViewCloner[T, V], V StructView[T]](x []T) SliceView[T, V]

SliceOfViews returns a ViewSlice for x.

func (SliceView[T, V]) AppendTo

func (v SliceView[T, V]) AppendTo(dst []V) []V

AppendTo appends the underlying slice values to dst.

func (SliceView[T, V]) AsSlice

func (v SliceView[T, V]) AsSlice() []V

AsSlice returns a copy of underlying slice.

func (SliceView[T, V]) At

func (v SliceView[T, V]) At(i int) V

At returns a View of the element at index `i` of the slice.

func (SliceView[T, V]) IsNil

func (v SliceView[T, V]) IsNil() bool

IsNil reports whether the underlying slice is nil.

func (SliceView[T, V]) Len

func (v SliceView[T, V]) Len() int

Len returns the length of the slice.

func (SliceView[T, V]) LenIter

func (v SliceView[T, V]) LenIter() []struct{}

LenIter returns a slice the same length as the v.Len(). The caller can then range over it to get the valid indexes. It does not allocate.

func (SliceView[T, V]) MapKey

func (v SliceView[T, V]) MapKey() SliceMapKey[T]

MapKey returns a unique key for a slice, based on its address and length.

func (SliceView[T, V]) MarshalJSON

func (v SliceView[T, V]) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler.

func (SliceView[T, V]) Slice

func (v SliceView[T, V]) Slice(i, j int) SliceView[T, V]

Slice returns v[i:j]

func (SliceView[T, V]) SliceFrom

func (v SliceView[T, V]) SliceFrom(i int) SliceView[T, V]

SliceFrom returns v[i:].

func (SliceView[T, V]) SliceTo

func (v SliceView[T, V]) SliceTo(i int) SliceView[T, V]

SliceTo returns v[:i]

func (*SliceView[T, V]) UnmarshalJSON

func (v *SliceView[T, V]) UnmarshalJSON(b []byte) error

UnmarshalJSON implements json.Unmarshaler.

type StructView

type StructView[T any] interface {
	// Valid reports whether the underlying Viewable is nil.
	Valid() bool
	// AsStruct returns a deep-copy of the underlying value.
	// It returns nil, if Valid() is false.
	AsStruct() T
}

StructView represents the corresponding StructView of a Viewable. The concrete types are typically generated by tailscale.com/cmd/viewer.

type ViewCloner

type ViewCloner[T any, V StructView[T]] interface {
	// View returns a read-only view of Viewable.
	// If Viewable is nil, View().Valid() reports false.
	View() V
	// Clone returns a deep-clone of Viewable.
	// It returns nil, when Viewable is nil.
	Clone() T
}

ViewCloner is any type that has had View and Clone funcs generated using tailscale.com/cmd/viewer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL