/*****************************************************************/ /** DBENV *******************************************************/ /*****************************************************************/ struct camldbenv { DB_ENV *dbenv; int closed; }; /*****************************************************************/ /*** DB ********************************************************/ /*****************************************************************/ struct camldb { DB *db; int closed; }; /*****************************************************************/ /*** DB_TXN ****************************************************/ /*****************************************************************/ struct camltxn { DB_TXN *txn; int closed; }; /*****************************************************************/ /*** DB_CURSOR *************************************************/ /*****************************************************************/ struct camlcursor { DBC *cursor; int closed; }; /*****************************************************************/ /** DB and DBENV macros ****************************************/ /*****************************************************************/ // datatype syzes #define Camldbenv_wosize \ ((sizeof(struct camldbenv) + sizeof(value) - 1) / sizeof(value)) #define Camldb_wosize \ ((sizeof(struct camldb) + sizeof(value) - 1) / sizeof(value)) // Unwrapping functions #define UW_dbenv(v) (((struct camldbenv *)(Bp_val(v)))->dbenv) #define UW_dbenv_closed(v) (((struct camldbenv *)(Bp_val(v)))->closed) #define UW_db(v) (((struct camldb *)(Bp_val(v)))->db) #define UW_db_closed(v) (((struct camldb *)(Bp_val(v)))->closed) #define UW_txn(v) (((struct camltxn *)(Bp_val(v)))->txn) #define UW_txn_closed(v) (((struct camltxn *)(Bp_val(v)))->closed) #define UW_cursor(v) (((struct camlcursor *)(Bp_val(v)))->cursor) #define UW_cursor_closed(v) (((struct camlcursor *)(Bp_val(v)))->closed) #define Is_string(v) (Is_block(v) && (Tag_val(v) == String_tag)) #define Is_None(v) (Is_long(v)) #define Is_Some(v) (~Is_long(v)) #define Some_val(v) (Field(v,0)) #define Flag_val(vflag,flags) (flags[Long_val(vflag)])