Skip to content

Latest commit

 

History

History
423 lines (297 loc) · 8.2 KB

DOC.md

File metadata and controls

423 lines (297 loc) · 8.2 KB

generic

import "github.com/zyedidia/generic"

Index

func Clamp

func Clamp[T constraints.Ordered](x, lo, hi T) T

Clamp returns x constrained within [lo:hi] range. If x compares less than lo, returns lo; otherwise if hi compares less than x, returns hi; otherwise returns v.

Example

package main

import (
	"fmt"
	"time"

	"github.com/zyedidia/generic"
)

func main() {
	fmt.Println(generic.Clamp(500, 400, 600))
	fmt.Println(generic.Clamp(200, 400, 600))
	fmt.Println(generic.Clamp(800, 400, 600))

	fmt.Println(generic.Clamp(5*time.Second, 4*time.Second, 6*time.Second).Milliseconds())
	fmt.Println(generic.Clamp(2*time.Second, 4*time.Second, 6*time.Second).Milliseconds())
	fmt.Println(generic.Clamp(8*time.Second, 4*time.Second, 6*time.Second).Milliseconds())

	fmt.Println(generic.Clamp(1.5, 1.4, 1.8))
	fmt.Println(generic.Clamp(1.5, 1.8, 1.8))
	fmt.Println(generic.Clamp(1.5, 2.1, 1.9))

}

Output

500
400
600
5000
4000
6000
1.5
1.8
2.1

func ClampFunc[T any](x, lo, hi T, less LessFn[T]) T

ClampFunc returns x constrained within [lo:hi] range using the less func. If x compares less than lo, returns lo; otherwise if hi compares less than x, returns hi; otherwise returns v.

Example

package main

import (
	"fmt"
	"math"

	"github.com/zyedidia/generic"
)

func lessMagnitude(a, b float64) bool {
	return math.Abs(a) < math.Abs(b)
}

func main() {
	fmt.Println(generic.ClampFunc(1.5, 1.4, 1.8, lessMagnitude))
	fmt.Println(generic.ClampFunc(1.5, 1.8, 1.8, lessMagnitude))
	fmt.Println(generic.ClampFunc(1.5, 2.1, 1.9, lessMagnitude))
	fmt.Println(generic.ClampFunc(-1.5, -1.4, -1.8, lessMagnitude))
	fmt.Println(generic.ClampFunc(-1.5, -1.8, -1.8, lessMagnitude))
	fmt.Println(generic.ClampFunc(-1.5, -2.1, -1.9, lessMagnitude))
	fmt.Println(generic.ClampFunc(1.5, -1.5, -1.5, lessMagnitude))

}

Output

1.5
1.8
2.1
-1.5
-1.8
-2.1
1.5

func Compare

func Compare[T any](a, b T, less LessFn[T]) int

Compare uses a less function to determine the ordering of 'a' and 'b'. It returns:

* -1 if a < b

* 1 if a > b

* 0 if a == b

func Equals

func Equals[T comparable](a, b T) bool

Equals wraps the '==' operator for comparable types.

func HashBytes(b []byte) uint64

func HashInt

func HashInt(i int) uint64
func HashInt16(i int16) uint64
func HashInt32(i int32) uint64
func HashInt64(i int64) uint64
func HashInt8(i int8) uint64
func HashString(s string) uint64
func HashUint(i uint) uint64
func HashUint16(u uint16) uint64
func HashUint32(u uint32) uint64
func HashUint64(u uint64) uint64
func HashUint8(u uint8) uint64

func Less

func Less[T constraints.Ordered](a, b T) bool

Less wraps the '<' operator for ordered types.

func Max

func Max[T constraints.Ordered](a, b T) T

Max returns the max of a and b.

Example

package main

import (
	"fmt"
	"time"

	"github.com/zyedidia/generic"
)

func main() {
	fmt.Println(generic.Max(7, 3))
	fmt.Println(generic.Max(2*time.Second, 3*time.Second).Milliseconds())
}

Output

7
3000

func MaxFunc

func MaxFunc[T any](a, b T, less LessFn[T]) T

MaxFunc returns the max of a and b using the less func.

Example

package main

import (
	"fmt"
	"math"

	"github.com/zyedidia/generic"
)

func lessMagnitude(a, b float64) bool {
	return math.Abs(a) < math.Abs(b)
}

func main() {
	fmt.Println(generic.MaxFunc(2.5, -3.1, lessMagnitude))
}

Output

-3.1

func Min

func Min[T constraints.Ordered](a, b T) T

Min returns the min of a and b.

Example

package main

import (
	"fmt"
	"time"

	"github.com/zyedidia/generic"
)

func main() {
	fmt.Println(generic.Min(7, 3))
	fmt.Println(generic.Min(2*time.Second, 3*time.Second).Milliseconds())
}

Output

3
2000

func MinFunc

func MinFunc[T any](a, b T, less LessFn[T]) T

MinFunc returns the min of a and b using the less func.

Example

package main

import (
	"fmt"
	"math"

	"github.com/zyedidia/generic"
)

func lessMagnitude(a, b float64) bool {
	return math.Abs(a) < math.Abs(b)
}

func main() {
	fmt.Println(generic.MinFunc(2.5, -3.1, lessMagnitude))
}

Output

2.5

EqualsFn is a function that returns whether 'a' and 'b' are equal.

type EqualsFn[T any] func(a, b T) bool

type HashFn

HashFn is a function that returns the hash of 't'.

type HashFn[T any] func(t T) uint64

type LessFn

LessFn is a function that returns whether 'a' is less than 'b'.

type LessFn[T any] func(a, b T) bool

Generated by gomarkdoc