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

me.archdev.foundationdb.interpreters.inmemory.MutationInterpreter.scala Maven / Gradle / Ivy

The newest version!
package me.archdev.foundationdb.interpreters.inmemory

import com.apple.foundationdb.MutationType
import com.apple.foundationdb.tuple.Tuple
import me.archdev.foundationdb.algebra.MutationAlgebra
import me.archdev.foundationdb.namespaces.Subspace
import me.archdev.foundationdb.serializers._
import me.archdev.foundationdb.utils.SelectedKey
import me.archdev.foundationdb.{ serializers, InMemoryContext, TupleMap }

trait MutationInterpreter extends MutationAlgebra[InMemoryContext] {

  override def set[K: serializers.Tupler, V: serializers.Tupler](key: K, value: V)(
      implicit s: Subspace
  ): InMemoryContext[Unit] =
    modifyState(
      _ + (Tuple.fromBytes(s.pack(key)) -> value.toTuple),
      unit
    )

  override def mutate[K: Tupler, P: Tupler](mutationType: MutationType, key: K, param: P)(
      implicit s: Subspace
  ): InMemoryContext[Unit] = ???

  override def clear[K: serializers.Tupler](key: K)(implicit s: Subspace): InMemoryContext[Unit] =
    modifyState(
      _ - Tuple.fromBytes(s.pack(key)),
      unit
    )

  override def clearRange[K: Tupler](range: (K, K))(implicit s: Subspace): InMemoryContext[Unit] =
    modifyState(
      clearRange(_, range),
      unit
    )

  private def clearRange[K: Tupler](storage: TupleMap, range: (K, K))(implicit subspace: Subspace): TupleMap = {
    val keysToRemove = scanKeys(storage, SelectedKey.range[K](range))
      .map(SelectedKey.toSubspaceKey[K])
      .filter(_.isDefined)
      .map(_.get)
      .map(_.toTuple)
      .toSet

    storage.filterKeys(!keysToRemove.contains(_))
  }

}

object MutationInterpreter extends MutationInterpreter




© 2015 - 2025 Weber Informatics LLC | Privacy Policy