protected def sumValues[K, V: Monoid]()

in storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/query/QueryStrategy.scala [78:98]


  protected def sumValues[K, V: Monoid](ks: Set[K], m: Map[K, V]): V =
    Monoid.sum(ks.flatMap(m.get))

  /**
   * Given a QueryStrategry and a ReadableStore which has been indexed correctly,
   * give a ReadableStore on Queries
   */
  def query[Q, L, X, V : Semigroup](
    qs: QueryStrategy[Q, L, X],
    rs: ReadableStore[X, V]
  ): ReadableStore[Q, V] =
    new AbstractReadableStore[Q, V] {
      override def get(q: Q): Future[Option[V]] = {
        val m = rs.multiGet(qs.query(q))
        // Drop the keys and sum it all up
        Monoid.sum(m.values)
      }

      override def multiGet[Q1 <: Q](qset: Set[Q1]): Map[Q1, Future[Option[V]]] =
        multiSum(qset, qs.query, rs.multiGet[X])
    }