`Irmin.ATOMIC_WRITE_STORE_MAKER`

`ATOMIC_WRITE_STORE_MAKER`

is the signature exposed by atomic-write store backends. `K`

is the implementation of keys and `V`

is the implementation of values.

`include ATOMIC_WRITE_STORE with type key = K.t and type value = V.t`

`find t k`

is `Some v`

if `k`

is associated to `v`

in `t`

and `None`

is `k`

is not present in `t`

.

`set t k v`

replaces the contents of `k`

by `v`

in `t`

. If `k`

is not already defined in `t`

, create a fresh binding. Raise `Invalid_argument`

if `k`

is the empty path.

`test_and_set t key ~test ~set`

sets `key`

to `set`

only if the current value of `key`

is `test`

and in that case returns `true`

. If the current value of `key`

is different, it returns `false`

. `None`

means that the value does not have to exist or is removed.

**Note:** The operation is guaranteed to be atomic.

`watch_key t k ?init f`

adds `f`

to the list of `t`

's watch handlers for the key `k`

and returns the watch handler to be used with `unwatch`

. `init`

is the optional initial value of the key.

`val clear : t -> unit Lwt.t`

Clear the store. This operation is expected to be slow.

`val v : Private.Sigs.config -> t Lwt.t`

`v config`

is a function returning fresh store handles, with the configuration `config`

, which is provided by the backend.