package rowex

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module RowexSource

Sourceexception Duplicate
Sourceexception Too_many_retries

Persistent implementation of Adaptive Radix Tree.

This module implements the core of ROWEX/P-ART from the given way to atomically load and store values. This implementation wants to ensure 2 things:

  • insert and lookup can be executed in true parallelism
  • persistence is ensured by required syscalls (see S.persist)

A quick note about atomic operations.

The "normal" model for our atomic operations is always the acquire/release model for our variables. This corresponds to what a CPU can normally consider if it complies with the TSO memory model (which is the case for an x86 processor). In the case of a CPU such as ARM, it is necessary to make this model explicit. However, there is an optimization where certain writes can be relaxed. It is difficult to know the impact of such an optimization: and to announce our ordering property as weak.

Thus, to simplify, we can consider that all loads have the acquire property and all stores have the release property.

Sourcetype key = private string
Sourceval key : string -> key
Sourceval unsafe_key : string -> key
Sourcetype 'a rd = < rd : unit.. > as 'a
Sourcetype 'a wr = < wr : unit.. > as 'a
Sourcetype ro = < rd : unit >
Sourcetype wo = < wr : unit >
Sourcetype rdwr = < rd : unit ; wr : unit >
Sourcemodule Addr : sig ... end
Sourcetype ('c, 'a) value =
  1. | Int8 : (atomic, int) value
  2. | LEInt : (atomic, int) value
  3. | LEInt16 : (atomic, int) value
  4. | LEInt31 : (atomic, int) value
  5. | LEInt64 : (atomic, int64) value
  6. | LEInt128 : (atomic, string) value
  7. | Addr_rd : (atomic, ro Addr.t) value
  8. | Addr_rdwr : (atomic, rdwr Addr.t) value
  9. | OCaml_string : (non_atomic, string) value
  10. | OCaml_string_length : (non_atomic, int) value
Sourceand atomic =
  1. | Atomic
Sourceand non_atomic =
  1. | Non_atomic
Sourceval pp_value : Format.formatter -> ('c, 'a) value -> unit
Sourceval pp_of_value : ?prefer_hex:bool -> ('c, 'a) value -> Format.formatter -> 'a -> unit
Sourcemodule type S = sig ... end
Sourcemodule Make (S : S) : sig ... end

/

Sourceval _header_kind : int
Sourceval _bits_kind : int
Sourceval _header_prefix : int
Sourceval _prefix : int
Sourceval _header_compact_count : int
Sourceval _header_length : int
Sourceval _header_count : int
Sourceval _header_depth : int
Sourceval _header_owner : int
Sourceval _n4_align_length : int
Sourceval _sizeof_n4 : int
Sourceval _sizeof_n16 : int
Sourceval _sizeof_n48 : int
Sourceval _sizeof_n256 : int