All Downloads are FREE. Search and download functionalities are using the official Maven repository.

izumi.fundamentals.platform.cache.SyncCache.scala Maven / Gradle / Ivy

package izumi.fundamentals.platform.cache

import izumi.fundamentals.platform.language.Quirks._

import scala.collection.mutable

class SyncCache[K, V] {
  private val cache = new mutable.HashMap[K, V]()

  def enumerate(): Seq[(K, V)] = synchronize {
    cache.toSeq
  }

  def getOrCompute(k: K, default: => V): V = synchronize {
    cache.getOrElseUpdate(k, default)
  }

  def put(k: K, v: V): Unit = synchronize {
    cache.put(k, v).discard()
  }

  def get(k: K): Option[V] = synchronize {
    cache.get(k)
  }

  def clear(): Unit = synchronize {
    cache.clear()
  }

  def hasKey(k: K): Boolean = synchronize {
    cache.contains(k)
  }

  def putIfNotExist(k: K, v: => V): Unit = synchronize {
    if (!cache.contains(k)) {
      cache.put(k, v).discard()
    }
  }

  def size: Int = synchronize {
    cache.size
  }

  private def synchronize[T](f: => T): T = {
    cache.synchronized {
      f
    }
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy