diff options
Diffstat (limited to 'lib/external/lmdb.ml')
| -rw-r--r-- | lib/external/lmdb.ml | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/external/lmdb.ml b/lib/external/lmdb.ml index 7b0812d..9c1d646 100644 --- a/lib/external/lmdb.ml +++ b/lib/external/lmdb.ml @@ -16,9 +16,28 @@ let mdb_mode_t = mode_t let mdb_result = view ~read:mdb_result_of_int ~write:int_of_mdb_result int +type mdb_env = unit ptr let mdb_env = ptr Void -let mdb_env_create = foreign "mdb_env_create" (ptr mdb_env @-> returning mdb_result) +type mdb_dbi = Unsigned.uint +let mdb_dbi = uint + +type mdb_txn = unit ptr +let mdb_txn = ptr Void + +let mdb_env_create = foreign "mdb_env_create" (ptr ptr mdb_env @-> returning mdb_result) +let mdb_env_create' () = + let open Utilities.Result in + let env_ptr = allocate mdb_env null in + let* () = mdb_env_create env_ptr in + Ok (!@ env_ptr) let mdb_env_open = foreign "mdb_env_open" (ptr mdb_env @-> string @-> uint @-> mdb_mode_t @-> returning mdb_result) let mdb_env_close = foreign "mdb_env_close" (ptr mdb_env @-> returning Void) + +let mdb_dbi_open = foreign "mdb_dbi_open" (ptr mdb_txn @-> string @-> uint @-> ptr mdb_dbi @-> returning mdb_result) +let mdb_dbi_open' txn name flags = + let open Utilities.Result in + let dbi_ptr = allocate mdb_dbi (Unsigned.UInt.of_int 0) in + let* () = mdb_dbi_open txn name flags dbi_ptr in + Ok (!@ dbi_ptr) |
