module Ocsipersist: sig
.. end
Persistent data on hard disk.
There are currently two implementations of this module,
one using a DBM database, and the other using SQLITE.
Link the one your want with your program.
Persistent references
When launching the program, if the value exists on hard disk,
it is loaded, otherwise it is initialised to the default value
type 'a
t
Type of persistent data
type
store
Data are divided into stores.
Create one store for your project, where you will save all your data.
val open_store : string -> store
Open a store (and create it if it does not exist)
val make_persistent : store:store ->
name:string -> default:'a -> 'a t Lwt.t
make_persistent store name default
find a persistent value
named name
in store store
from database, or create it with the default value default
if it
does not exist.
val make_persistent_lazy : store:store ->
name:string -> default:(unit -> 'a) -> 'a t Lwt.t
Same as make_persistent but the default value is evaluated only
if needed
val get : 'a t -> 'a Lwt.t
get pv
gives the value of pv
val set : 'a t -> 'a -> unit Lwt.t
set pv value
sets a persistent value pv
to value
Persistent tables
type 'a
table
Type of persistent table
val table_name : 'a table -> string Lwt.t
returns the name of the table
val open_table : string -> 'a table
Open a table (and create it if it does not exist)
val find : 'a table -> string -> 'a Lwt.t
find table key
gives the value associated to key
.
Raises Not_found
if not found.
val add : 'a table -> string -> 'a -> unit Lwt.t
add table key value
associates value
to key
.
If the database already contains data associated with key
,
that data is discarded and silently replaced by the new data.
val replace_if_exists : 'a table -> string -> 'a -> unit Lwt.t
replace_if_exists table key value
associates value
to key
only if key
is already bound.
If the database does not contain any data associated with key
,
raises Not_found
.
val remove : 'a table -> string -> unit Lwt.t
remove table key
removes the entry in the table if it exists
val length : 'a table -> int Lwt.t
Size of a table.
val iter_step : (string -> 'a -> unit Lwt.t) -> 'a table -> unit Lwt.t
Important warning: this iterator may not iter on all data of the table
if another thread is modifying it in the same time. Nonetheless, it should
not miss more than a very few data from time to time, except if the table
is very old (at least 9 223 372 036 854 775 807 insertions).
val iter_table : (string -> 'a -> unit Lwt.t) -> 'a table -> unit Lwt.t
Legacy interface for iter_step
val fold_step : (string -> 'a -> 'b -> 'b Lwt.t) -> 'a table -> 'b -> 'b Lwt.t
Important warning: this iterator may not iter on all data of the table
if another thread is modifying it in the same time. Nonetheless, it should
not miss more than a very few data from time to time, except if the table
is very old (at least 9 223 372 036 854 775 807 insertions).
val fold_table : (string -> 'a -> 'b -> 'b Lwt.t) -> 'a table -> 'b -> 'b Lwt.t
Legacy interface for iter_step