internal

package
v0.14.4 Latest Latest
Warning

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

Go to latest
Published: Jul 12, 2024 License: AGPL-3.0 Imports: 4 Imported by: 0

Documentation

Overview

Package internal has bits and bobs for the internal implementation details of wirelink, esp. test utilities, mocks, and abstractions.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Memoize added in v0.14.0

func Memoize[K comparable, V any](size, ratio int, f func(K) V) func(K) V

Memoize uses an LRUMap to memoize the given function.

Types

type LRUMap added in v0.14.0

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

LRUMap wraps a Map with a crude LRU system. It works by tracking a top level counter (`n`) that is incremented for every Get and Set, and the new counter value stored with each item as well. After a Set, `trim` may be invoked. The `trim` operation constrains the map size by computing a threshold value for the counter `n` and deleting any entry whose last access is below that threshold. The threshold is determined as a `ratio` times the number of map items, providing a crude heuristic of removing items not accessed in the last `ratio` passes through the full map. As such, the LRUMap does _not_ defend against degenerate use cases where new items are often Set but rarely or never Get, but it will systematically prune items that are rarely accessed, with `ratio` determining what "rare" means.

func NewLRUMap added in v0.14.0

func NewLRUMap[K comparable, V any](size, ratio int) *LRUMap[K, V]

NewLRUMap creates a new LRUMap with the given initial map allocation size and trim ratio

func (*LRUMap[K, V]) Get added in v0.14.0

func (m *LRUMap[K, V]) Get(k K) (v V, ok bool)

Get attempts to retrieve an item from the map, returning the item (or the zero value for V) and an ok indicator whether it was found in the map or not. If an item was found, its last used counter will be incremented.

func (*LRUMap[K, V]) Set added in v0.14.0

func (m *LRUMap[K, V]) Set(k K, v V)

Set adds or overwrites the value associated with a key in the map, and updates its last used counter.

type WgClient

type WgClient interface {
	io.Closer
	Devices() ([]*wgtypes.Device, error)
	Device(name string) (*wgtypes.Device, error)
	ConfigureDevice(name string, cfg wgtypes.Config) error
}

WgClient is a copy-pasta of wginternal.Client because we can't import that

Directories

Path Synopsis
Package channels contains various generic helpers for working with channels
Package channels contains various generic helpers for working with channels
Package mocks has just test files for use by other packages' tests
Package mocks has just test files for use by other packages' tests
Package networking provides abstraction layers for accessing networking resources both across platform specific details, and for virtual / mock configurations for testing
Package networking provides abstraction layers for accessing networking resources both across platform specific details, and for virtual / mock configurations for testing
Package testutils provides utility code needed by multiple packages' test suites, but which should not be referenced in any non-test code.
Package testutils provides utility code needed by multiple packages' test suites, but which should not be referenced in any non-test code.

Jump to

Keyboard shortcuts

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