aghalg

package
v0.107.45 Latest Latest
Warning

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

Go to latest
Published: Mar 6, 2024 License: GPL-3.0 Imports: 6 Imported by: 0

Documentation

Overview

Package aghalg contains common generic algorithms and data structures.

TODO(a.garipov): Move parts of this into golibs.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Coalesce added in v0.107.10

func Coalesce[T comparable](values ...T) (res T)

Coalesce returns the first non-zero value. It is named after function COALESCE in SQL. If values or all its elements are empty, it returns a zero value.

T is comparable, because Go currently doesn't have a comparableWithZeroValue constraint.

TODO(a.garipov): Think of ways to merge with CoalesceSlice.

func CoalesceSlice added in v0.107.12

func CoalesceSlice[E any, S []E](values ...S) (res S)

CoalesceSlice returns the first non-zero value. It is named after function COALESCE in SQL. If values or all its elements are empty, it returns nil.

TODO(a.garipov): Think of ways to merge with Coalesce.

Types

type NullBool added in v0.107.8

type NullBool uint8

NullBool is a nullable boolean. Use these in JSON requests and responses instead of pointers to bool.

const (
	NBNull NullBool = iota
	NBTrue
	NBFalse
)

NullBool values

func BoolToNullBool added in v0.107.8

func BoolToNullBool(cond bool) (nb NullBool)

BoolToNullBool converts a bool into a NullBool.

func (NullBool) MarshalJSON added in v0.107.8

func (nb NullBool) MarshalJSON() (b []byte, err error)

MarshalJSON implements the json.Marshaler interface for NullBool.

func (NullBool) String added in v0.107.8

func (nb NullBool) String() (s string)

String implements the fmt.Stringer interface for NullBool.

func (*NullBool) UnmarshalJSON added in v0.107.8

func (nb *NullBool) UnmarshalJSON(b []byte) (err error)

UnmarshalJSON implements the json.Unmarshaler interface for *NullBool.

type RingBuffer added in v0.107.39

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

RingBuffer is the implementation of ring buffer data structure.

func NewRingBuffer added in v0.107.39

func NewRingBuffer[T any](size uint) (rb *RingBuffer[T])

NewRingBuffer initializes the new instance of ring buffer. size must be greater or equal to zero.

func (*RingBuffer[T]) Append added in v0.107.39

func (rb *RingBuffer[T]) Append(e T)

Append appends an element to the buffer.

func (*RingBuffer[T]) Clear added in v0.107.39

func (rb *RingBuffer[T]) Clear()

Clear clears the buffer.

func (*RingBuffer[T]) Len added in v0.107.39

func (rb *RingBuffer[T]) Len() (l uint)

Len returns a length of the buffer.

func (*RingBuffer[T]) Range added in v0.107.39

func (rb *RingBuffer[T]) Range(cb func(T) (cont bool))

Range calls cb for each element of the buffer. If cb returns false it stops.

func (*RingBuffer[T]) ReverseRange added in v0.107.39

func (rb *RingBuffer[T]) ReverseRange(cb func(T) (cont bool))

ReverseRange calls cb for each element of the buffer in reverse order. If cb returns false it stops.

type UniqChecker

type UniqChecker[T constraints.Ordered] map[T]int64

UniqChecker allows validating uniqueness of comparable items.

TODO(a.garipov): The Ordered constraint is only really necessary in Validate. Consider ways of making this constraint comparable instead.

func (UniqChecker[T]) Add

func (uc UniqChecker[T]) Add(elems ...T)

Add adds a value to the validator. v must not be nil.

func (UniqChecker[T]) Merge

func (uc UniqChecker[T]) Merge(other UniqChecker[T]) (merged UniqChecker[T])

Merge returns a checker containing data from both uc and other.

func (UniqChecker[T]) Validate

func (uc UniqChecker[T]) Validate() (err error)

Validate returns an error enumerating all elements that aren't unique.

Jump to

Keyboard shortcuts

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