views

package
v0.0.0-...-9d29f1b Latest Latest
Warning

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

Go to latest
Published: Sep 4, 2023 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 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]) 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]) 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 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]) 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