Remove use of ClassKey
by pjfanning · Pull Request #622 · FasterXML/jackson-module-scala (original) (raw)
trait LookupCacheFactory {
def createLookupCache[K, V](initialEntries: Int, maxEntries: Int): LookupCache[K, V]
}
class ConcurrentLookupCache[K, V]() extends LookupCache[K, V] {
final private val cache = TrieMap.empty[K, V]
override def put(key: K, value: V): V =
cache.put(key, value).getOrElse(None.orNull).asInstanceOf[V]
override def putIfAbsent(key: K, value: V): V =
cache.putIfAbsent(key, value).getOrElse(None.orNull).asInstanceOf[V]
override def get(key: Any): V = {
cache.get(key.asInstanceOf[K]).getOrElse(None.orNull).asInstanceOf[V]
}
override def clear(): Unit = {
cache.clear()
}
override def size: Int = cache.size
}
object ConcurrentLookupCacheFactory extends LookupCacheFactory {
override def createLookupCache[K, V](initialEntries: Int, maxEntries: Int): LookupCache[K, V] =
new ConcurrentLookupCache[K, V]
}