65 lines
3.5 KiB
OCaml
65 lines
3.5 KiB
OCaml
(***********************************************************************)
|
|
(* *)
|
|
(* Objective Caml *)
|
|
(* *)
|
|
(* Francois Rouaix, projet Cristal, INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed *)
|
|
(* under the terms of the GNU Library General Public License. *)
|
|
(* *)
|
|
(***********************************************************************)
|
|
|
|
(* $Id$ *)
|
|
|
|
(* Module [Dbm]: interface to the NDBM databases *)
|
|
|
|
type t
|
|
(* The type of file descriptors opened on NDBM databases. *)
|
|
|
|
type open_flag =
|
|
Dbm_rdonly | Dbm_wronly | Dbm_rdwr | Dbm_create
|
|
(* Flags for opening a database (see [opendbm]). *)
|
|
|
|
exception Dbm_error of string
|
|
(* Raised by the following functions when an error is encountered. *)
|
|
|
|
val opendbm : string -> mode:open_flag list -> perm:int -> t
|
|
(* Open a descriptor on an NDBM database. The first argument is
|
|
the name of the database (without the [.dir] and [.pag] suffixes).
|
|
The second argument is a list of flags: [Dbm_rdonly] opens
|
|
the database for reading only, [Dbm_wronly] for writing only,
|
|
[Dbm_rdwr] for reading and writing; [Dbm_create] causes the
|
|
database to be created if it does not already exist.
|
|
The third argument is the permissions to give to the database
|
|
files, if the database is created. *)
|
|
external close : t -> unit = "caml_dbm_close"
|
|
(* Close the given descriptor. *)
|
|
external find : t -> key:string -> string = "caml_dbm_fetch"
|
|
(* [find db key] returns the data associated with the given
|
|
[key] in the database opened for the descriptor [db].
|
|
Raise [Not_found] if the [key] has no associated data. *)
|
|
external add : t -> key:string -> data:string -> unit = "caml_dbm_insert"
|
|
(* [add db key data] inserts the pair ([key], [data]) in
|
|
the database [db]. If the database already contains data
|
|
associated with [key], raise [Dbm_error "Entry already exists"]. *)
|
|
external replace : t -> key:string -> data:string -> unit = "caml_dbm_replace"
|
|
(* [replace db key data] inserts the pair ([key], [data]) in
|
|
the database [db]. If the database already contains data
|
|
associated with [key], that data is discarded and silently
|
|
replaced by the new [data]. *)
|
|
external remove : t -> key:string -> unit = "caml_dbm_delete"
|
|
(* [remove db key data] removes the data associated with [key]
|
|
in [db]. If [key] has no associated data, raise
|
|
[Dbm_error "dbm_delete"]. *)
|
|
external firstkey : t -> string = "caml_dbm_firstkey"
|
|
external nextkey : t -> string = "caml_dbm_nextkey"
|
|
(* Enumerate all keys in the given database, in an unspecified order.
|
|
[firstkey db] returns the first key, and repeated calls
|
|
to [nextkey db] return the remaining keys. [Not_found] is raised
|
|
when all keys have been enumerated. *)
|
|
val iter : fun:(key:string -> data:string -> 'a) -> t -> unit
|
|
(* [iter f db] applies [f] to each ([key], [data]) pair in
|
|
the database [db]. [f] receives [key] as first argument
|
|
and [data] as second argument. *)
|