* http://cs.unibo.it/helm/.
*)
+let debug = true;;
+let debug_print s = if debug then prerr_endline s;;
+
exception Key_already_in of string;;
exception Key_not_found of string;;
class map dbname =
let perm = 420 in (* permission 644 in decimal notation *)
- let db = Dbm.opendbm dbname [ Dbm.Dbm_rdwr; Dbm.Dbm_create ] perm in
+ let open_dbm () = Dbm.opendbm dbname [ Dbm.Dbm_rdwr; Dbm.Dbm_create ] perm in
+
object (self)
inherit ThreadSafe.threadSafe
+ val mutable db = open_dbm ()
+
initializer Gc.finalise Dbm.close db (* close db on GC *)
method add key value =
method clear =
self#doWriter (lazy (
- Dbm.iter (fun k _ -> Dbm.remove db k) db
+ Dbm.close db;
+ Sys.remove (dbname ^ ".dir");
+ Sys.remove (dbname ^ ".pag");
+ db <- open_dbm ()
))
end