🔀 Merge branch 'release/v82'
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / utils / Memoize.kt
1 package net.pterodactylus.sone.utils
2
3 class Memoize<in T, out R>(private val calc: (T) -> R) : (T) -> R {
4
5         private val values = mutableMapOf<T, R>()
6
7         override fun invoke(value: T) =
8                         values.getOrPut(value, { calc(value) })
9
10 }
11
12 fun <T, R> ((T) -> R).memoize(): (T) -> R = Memoize(this)