memoize

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2022 License: MIT Imports: 2 Imported by: 0

README

go-memoize

Impements a function memoization in Golang (1.18+)

Installation

go get github.com/AlexandreChamard/go-memoize

Examples

import (
    "math/rand"

    "github.com/AlexandreChamard/go-memoize"
)

var mfib func(int64) int64
fib := func(i int64) int64 {
    if i <= 0 {
        return 0
    }
    if i < 3 {
        return 1
    }
    return mfib(i-1) + mfib(i-2)
}
mfib = memoize.Memoize1(fib)

mfib(30) // expected 832040 in relatively low time
import (
    "math/rand"

    "github.com/AlexandreChamard/go-memoize"
)

var mfib func(int64) int64
fib := func(i int64) int64 {
    if i <= 0 {
        return 0
    }
    if i < 3 {
        return 1
    }
    return mfib(i-1) + mfib(i-2)
}

// It will cache a maximum of 100k items (least resut used will be delete in case it reach full)
mfib = memoize.Memoize1(fib, NewMemoizeOption().MaxMemoize(1<<20))

mfib(30) // expected 832040 in relatively low time

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Memoize1

func Memoize1[Ret any, T1 comparable](f func(T1) Ret, options ...*memoizationOption) func(T1) Ret

Returns: the memoized function and its cancel function when the function is no longer used (cleanup)

func Memoize2

func Memoize2[Ret any, T1, T2 comparable](f func(T1, T2) Ret, options ...*memoizationOption) func(T1, T2) Ret

func Memoize3

func Memoize3[Ret any, T1, T2, T3 comparable](f func(T1, T2, T3) Ret, options ...*memoizationOption) func(T1, T2, T3) Ret

func Memoize4

func Memoize4[Ret any, T1, T2, T3, T4 comparable](f func(T1, T2, T3, T4) Ret, options ...*memoizationOption) func(T1, T2, T3, T4) Ret

func Memoize5

func Memoize5[Ret any, T1, T2, T3, T4, T5 comparable](f func(T1, T2, T3, T4, T5) Ret, options ...*memoizationOption) func(T1, T2, T3, T4, T5) Ret

func NewMemoizeOption

func NewMemoizeOption() *memoizationOption

Types

This section is empty.

Jump to

Keyboard shortcuts

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