X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Futils%2FMemoize.kt;fp=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Futils%2FMemoize.kt;h=bd67ae24d12ed40b12990a45a40049311fc6d41a;hp=0000000000000000000000000000000000000000;hb=e162d6ab265676e27b784b825a3c97d271635947;hpb=a9c9094ae93da0d112df6bb1a1d601cde4abe4ff diff --git a/src/main/kotlin/net/pterodactylus/sone/utils/Memoize.kt b/src/main/kotlin/net/pterodactylus/sone/utils/Memoize.kt new file mode 100644 index 0000000..bd67ae2 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/utils/Memoize.kt @@ -0,0 +1,12 @@ +package net.pterodactylus.sone.utils + +class Memoize(private val calc: (T) -> R) : (T) -> R { + + private val values = mutableMapOf() + + override fun invoke(value: T) = + values.getOrPut(value, { calc(value) }) + +} + +fun ((T) -> R).memoize(): (T) -> R = Memoize(this)