def inject[U]()

in storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/MutableCacheAlgebra.scala [42:65]


  def inject[U](injection: Injection[(K, U), (K, V)]): MutableCache[K, U] =
    new MutableCache[K, U] {
      override def get(k: K) = for {
        v <- cache.get(k)
        (_, u) <- injection.invert((k, v)).toOption
      } yield u

      override def +=(ku: (K, U)) = { cache += injection(ku); this }

      override def hit(k: K) =
        cache.hit(k)
          .flatMap(v => injection.invert((k, v)).toOption).map(_._2)

      override def evict(k: K) = for {
        evictedV <- cache.evict(k)
        (_, evictedU) <- injection.invert((k, evictedV)).toOption
      } yield evictedU

      override def empty = new AlgebraicMutableCache(cache.empty).inject(injection)

      override def clear = { cache.clear; this }
      override def iterator =
        cache.iterator.flatMap(injection.invert(_).toOption)
    }