TYPEMAP

LMDB::Env	T_PTROBJ
LMDB::Txn	T_PTROBJ
TxnOrNull	T_PTROBJ_N
LMDB::Cursor	T_PTROBJ
LMDB		T_OPAQUE
DBD		T_datum
DBK		T_keydatum
DBDC		T_datumC
DBKC		T_keydatumC
MDB_cursor_op	T_IV
mdb_filehandle_t  T_FD 
HV *		T_HVREF_REFCOUNT_FIXED
# Type to avoid warnings when a flag is undefined
flags_t		T_UV_N

INPUT
T_datum
	if (isdbdint(txn, dbi)) {
	    IV val = SvIV($arg); 
	    $var.mv_data = &val; 
	    $var.mv_size = sizeof(val);
	}
	else $var.mv_data = MySvPV($arg, $var.mv_size);
T_keydatum
	if (isdbkint(txn, dbi)) {
	    IV val = SvIV($arg); 
	    $var.mv_data = &val; 
	    $var.mv_size = sizeof(val);
	}
	else $var.mv_data = SvPV($arg, $var.mv_size);
T_datumC
	if (iscudint(cursor)) {
	    IV val = SvIV($arg); 
	    $var.mv_data = &val; 
	    $var.mv_size = sizeof(val);
	}
	else $var.mv_data = MySvPV($arg, $var.mv_size);
T_keydatumC
	if (iscukint(cursor)) {
	    IV val = SvIV($arg); 
	    $var.mv_data = &val; 
	    $var.mv_size = sizeof(IV);
	}
	else if(SvOK($arg)) $var.mv_data = SvPV($arg, $var.mv_size);
T_FD
	$var = PerlIO_fileno(IoOFP(sv_2io($arg)));
T_PTROBJ_N
        if(!SvTRUE($arg)) {
            $var = ($type) NULL;
        } else if (SvROK($arg) && sv_derived_from($arg, \"LMDB::Txn\")) {
            IV tmp = SvIV((SV*)SvRV($arg));
            $var = INT2PTR($type,tmp);
        }
        else
            Perl_croak(aTHX_ \"%s: %s is not of type %s\",
                        ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
                        \"$var\", \"LMDB::Txn\");

T_UV_N
	$var =	SvOK($arg) ? ($type)SvUV($arg) : 0;
####################################################################################
OUTPUT
T_datum
	if(isdbdint(txn, dbi)) {
	    sv_setiv_mg($arg, *(IV *)$var.mv_data);
	} else {
	    sv_setpvn_mg($arg, $var.mv_data, $var.mv_size);
	    SvUTF8_off($arg);
	}
T_datumC
	if(iscudint(cursor)) {
	    sv_setiv_mg($arg, *(IV *)$var.mv_data);
	} else {
	    sv_setpvn_mg($arg, $var.mv_data, $var.mv_size);
	    SvUTF8_off($arg);
	}
T_keydatum
	if(isdbkint(txn, dbi)) {
	    sv_setiv_mg($arg, *(IV *)$var.mv_data);
	} else {
	    sv_setpvn_mg($arg, $var.mv_data, $var.mv_size);
	    SvUTF8_off($arg);
	}
T_keydatumC
	if(op != MDB_SET) {
	    if(iscukint(cursor)) {
		sv_setiv_mg($arg, *(IV *)$var.mv_data);
	    } else {
		sv_setpvn_mg($arg, $var.mv_data, $var.mv_size);
		SvUTF8_off($arg);
	    }
	}
T_HVREF_REFCOUNT_FIXED
        $arg = newRV_noinc((SV*)$var);

