		/*
		 * This file was generated automatically by ExtUtils::ParseXS version 2.10 from the
		 * contents of SDBM_File.xs. Do not edit this file, edit SDBM_File.xs instead.
		 *
		 *	ANY CHANGES MADE HERE WILL BE LOST! 
		 *
		 */
		
		#line 1 "SDBM_File.xs"
		#define PERL_NO_GET_CONTEXT
		#include "EXTERN.h"
		#include "perl.h"
		#include "XSUB.h"
		#include "sdbm/sdbm.h"
		
		typedef struct {
			DBM * 	dbp ;
			SV *    filter_fetch_key ;
			SV *    filter_store_key ;
			SV *    filter_fetch_value ;
			SV *    filter_store_value ;
			int     filtering ;
			} SDBM_File_type;
		
		typedef SDBM_File_type * SDBM_File ;
		typedef datum datum_key ;
		typedef datum datum_value ;
		
		#define sdbm_TIEHASH(dbtype,filename,flags,mode) sdbm_open(filename,flags,mode)
		#define sdbm_FETCH(db,key)			sdbm_fetch(db->dbp,key)
		#define sdbm_STORE(db,key,value,flags)		sdbm_store(db->dbp,key,value,flags)
		#define sdbm_DELETE(db,key)			sdbm_delete(db->dbp,key)
		#define sdbm_EXISTS(db,key)			sdbm_exists(db->dbp,key)
		#define sdbm_FIRSTKEY(db)			sdbm_firstkey(db->dbp)
		#define sdbm_NEXTKEY(db,key)			sdbm_nextkey(db->dbp)
		
		
		#ifndef PERL_UNUSED_VAR
		#  define PERL_UNUSED_VAR(var) if (0) var = var
		#endif
		
		#line 43 "SDBM_File.c"
		
		XS(XS_SDBM_File_TIEHASH); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_TIEHASH)
          54    {
          54        dXSARGS;
          54        if (items != 4)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::TIEHASH(dbtype, filename, flags, mode)");
          54        PERL_UNUSED_VAR(cv); /* -W */
		    {
          54    	char *	dbtype = (char *)SvPV_nolen(ST(0));
          54    	char *	filename = (char *)SvPV_nolen(ST(1));
          54    	int	flags = (int)SvIV(ST(2));
          54    	int	mode = (int)SvIV(ST(3));
          54    	SDBM_File	RETVAL;
		#line 38 "SDBM_File.xs"
			{
			    DBM * 	dbp ;
		
			    RETVAL = NULL ;
			    if ((dbp = sdbm_open(filename,flags,mode))) {
			        RETVAL = (SDBM_File)safemalloc(sizeof(SDBM_File_type)) ;
		    	        Zero(RETVAL, 1, SDBM_File_type) ;
				RETVAL->dbp = dbp ;
			    }
		
			}
		#line 70 "SDBM_File.c"
          54    	ST(0) = sv_newmortal();
          54            sv_setref_pv(ST(0), dbtype, (void*)RETVAL);
		    }
          54        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_DESTROY); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_DESTROY)
          54    {
          54        dXSARGS;
          54        if (items != 1)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::DESTROY(db)");
          54        PERL_UNUSED_VAR(cv); /* -W */
		    {
          54    	SDBM_File	db;
		
          54    	if (SvROK(ST(0))) {
          54    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
          54    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not a reference");
		#line 56 "SDBM_File.xs"
			  sdbm_close(db->dbp);
			  if (db->filter_fetch_key)
			    SvREFCNT_dec(db->filter_fetch_key) ;
			  if (db->filter_store_key)
			    SvREFCNT_dec(db->filter_store_key) ;
			  if (db->filter_fetch_value)
			    SvREFCNT_dec(db->filter_fetch_value) ;
			  if (db->filter_store_value)
			    SvREFCNT_dec(db->filter_store_value) ;
			  safefree(db) ;
		#line 105 "SDBM_File.c"
		    }
          54        XSRETURN_EMPTY;
		}
		
		
		XS(XS_SDBM_File_FETCH); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_FETCH)
        1155    {
        1155        dXSARGS;
        1155        if (items != 2)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::FETCH(db, key)");
        1155        PERL_UNUSED_VAR(cv); /* -W */
		    {
        1155    	SDBM_File	db;
        1155    	datum_key	key;
        1155    	datum_value	RETVAL;
		
        1155    	if (sv_derived_from(ST(0), "SDBM_File")) {
        1155    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
        1155    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		
        1155    	DBM_ckFilter(ST(1), filter_store_key, "filter_store_key");
        1154    	key.dptr = SvPVbyte(ST(1), PL_na);
        1154    	key.dsize = (int)PL_na;
		
        1154    	RETVAL = sdbm_FETCH(db, key);
        1154    	ST(0) = sv_newmortal();
        1154    	sv_setpvn(ST(0), RETVAL.dptr, RETVAL.dsize);
        1154    	DBM_ckFilter(ST(0), filter_fetch_value,"filter_fetch_value");
		    }
        1154        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_STORE); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_STORE)
         992    {
         992        dXSARGS;
         992        if (items < 3 || items > 4)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::STORE(db, key, value, flags = DBM_REPLACE)");
         992        PERL_UNUSED_VAR(cv); /* -W */
		    {
         992    	SDBM_File	db;
         992    	datum_key	key;
         992    	datum_value	value;
         992    	int	flags;
         992    	int	RETVAL;
         992    	dXSTARG;
		
         992    	if (sv_derived_from(ST(0), "SDBM_File")) {
         992    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
         992    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		
         992    	DBM_ckFilter(ST(1), filter_store_key, "filter_store_key");
         991    	key.dptr = SvPVbyte(ST(1), PL_na);
         991    	key.dsize = (int)PL_na;
		
         991            DBM_ckFilter(ST(2), filter_store_value, "filter_store_value");
         991    	if (SvOK(ST(2))) {
         986    	    value.dptr = SvPVbyte(ST(2), PL_na);
         986    	    value.dsize = (int)PL_na;
			}
			else {
           5    	    value.dptr = "";
           5    	    value.dsize = 0;
			};
		
         991    	if (items < 4)
         991    	    flags = DBM_REPLACE;
			else {
      ######    	    flags = (int)SvIV(ST(3));
			}
		
         991    	RETVAL = sdbm_STORE(db, key, value, flags);
         991    	XSprePUSH; PUSHi((IV)RETVAL);
		#line 79 "SDBM_File.xs"
			if (RETVAL) {
			    if (RETVAL < 0 && errno == EPERM)
				croak("No write permission to sdbm file");
			    croak("sdbm store returned %d, errno %d, key \"%s\"",
					RETVAL,errno,key.dptr);
			    sdbm_clearerr(db->dbp);
			}
		#line 195 "SDBM_File.c"
		    }
         991        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_DELETE); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_DELETE)
           6    {
           6        dXSARGS;
           6        if (items != 2)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::DELETE(db, key)");
           6        PERL_UNUSED_VAR(cv); /* -W */
		    {
           6    	SDBM_File	db;
           6    	datum_key	key;
           6    	int	RETVAL;
           6    	dXSTARG;
		
           6    	if (sv_derived_from(ST(0), "SDBM_File")) {
           6    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
           6    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		
           6    	DBM_ckFilter(ST(1), filter_store_key, "filter_store_key");
           6    	key.dptr = SvPVbyte(ST(1), PL_na);
           6    	key.dsize = (int)PL_na;
		
           6    	RETVAL = sdbm_DELETE(db, key);
           6    	XSprePUSH; PUSHi((IV)RETVAL);
		    }
           6        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_EXISTS); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_EXISTS)
           2    {
           2        dXSARGS;
           2        if (items != 2)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::EXISTS(db, key)");
           2        PERL_UNUSED_VAR(cv); /* -W */
		    {
           2    	SDBM_File	db;
           2    	datum_key	key;
           2    	int	RETVAL;
           2    	dXSTARG;
		
           2    	if (sv_derived_from(ST(0), "SDBM_File")) {
           2    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
           2    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		
           2    	DBM_ckFilter(ST(1), filter_store_key, "filter_store_key");
           2    	key.dptr = SvPVbyte(ST(1), PL_na);
           2    	key.dsize = (int)PL_na;
		
           2    	RETVAL = sdbm_EXISTS(db, key);
           2    	XSprePUSH; PUSHi((IV)RETVAL);
		    }
           2        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_FIRSTKEY); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_FIRSTKEY)
          47    {
          47        dXSARGS;
          47        if (items != 1)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::FIRSTKEY(db)");
          47        PERL_UNUSED_VAR(cv); /* -W */
		    {
          47    	SDBM_File	db;
          47    	datum_key	RETVAL;
		
          47    	if (sv_derived_from(ST(0), "SDBM_File")) {
          47    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
          47    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		
          47    	RETVAL = sdbm_FIRSTKEY(db);
          47    	ST(0) = sv_newmortal();
          47    	sv_setpvn(ST(0), RETVAL.dptr, RETVAL.dsize);
          47    	DBM_ckFilter(ST(0), filter_fetch_key,"filter_fetch_key");
		    }
          47        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_NEXTKEY); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_NEXTKEY)
         378    {
         378        dXSARGS;
         378        if (items != 2)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::NEXTKEY(db, key)");
         378        PERL_UNUSED_VAR(cv); /* -W */
		    {
         378    	SDBM_File	db;
         378    	datum_key	key;
         378    	datum_key	RETVAL;
		
         378    	if (sv_derived_from(ST(0), "SDBM_File")) {
         378    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
         378    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		
         378    	DBM_ckFilter(ST(1), filter_store_key, "filter_store_key");
         378    	key.dptr = SvPVbyte(ST(1), PL_na);
         378    	key.dsize = (int)PL_na;
		
         378    	RETVAL = sdbm_NEXTKEY(db, key);
         378    	ST(0) = sv_newmortal();
         378    	sv_setpvn(ST(0), RETVAL.dptr, RETVAL.dsize);
         378    	DBM_ckFilter(ST(0), filter_fetch_key,"filter_fetch_key");
		    }
         378        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_error); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_error)
      ######    {
      ######        dXSARGS;
      ######        if (items != 1)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::error(db)");
      ######        PERL_UNUSED_VAR(cv); /* -W */
		    {
      ######    	SDBM_File	db;
      ######    	int	RETVAL;
      ######    	dXSTARG;
		
      ######    	if (sv_derived_from(ST(0), "SDBM_File")) {
      ######    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
      ######    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		#line 110 "SDBM_File.xs"
			RETVAL = sdbm_error(db->dbp) ;
		#line 342 "SDBM_File.c"
      ######    	XSprePUSH; PUSHi((IV)RETVAL);
		    }
      ######        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_clearerr); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_clearerr)
      ######    {
      ######        dXSARGS;
      ######        if (items != 1)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::clearerr(db)");
      ######        PERL_UNUSED_VAR(cv); /* -W */
		    {
      ######    	SDBM_File	db;
      ######    	int	RETVAL;
      ######    	dXSTARG;
		
      ######    	if (sv_derived_from(ST(0), "SDBM_File")) {
      ######    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
      ######    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		#line 118 "SDBM_File.xs"
			RETVAL = sdbm_clearerr(db->dbp) ;
		#line 369 "SDBM_File.c"
      ######    	XSprePUSH; PUSHi((IV)RETVAL);
		    }
      ######        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_filter_fetch_key); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_filter_fetch_key)
          48    {
          48        dXSARGS;
          48        if (items != 2)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::filter_fetch_key(db, code)");
          48        PERL_UNUSED_VAR(cv); /* -W */
		    {
          48    	SDBM_File	db;
          48    	SV *	code = ST(1);
          48    	SV *	RETVAL = &PL_sv_undef ;
		
          48    	if (sv_derived_from(ST(0), "SDBM_File")) {
          48    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
          48    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		#line 129 "SDBM_File.xs"
			    DBM_setFilter(db->filter_fetch_key, code) ;
		#line 396 "SDBM_File.c"
		    }
          48        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_filter_store_key); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_filter_store_key)
          49    {
          49        dXSARGS;
          49        if (items != 2)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::filter_store_key(db, code)");
          49        PERL_UNUSED_VAR(cv); /* -W */
		    {
          49    	SDBM_File	db;
          49    	SV *	code = ST(1);
          49    	SV *	RETVAL =  &PL_sv_undef ;
		
          49    	if (sv_derived_from(ST(0), "SDBM_File")) {
          49    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
          49    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		#line 137 "SDBM_File.xs"
			    DBM_setFilter(db->filter_store_key, code) ;
		#line 422 "SDBM_File.c"
		    }
          49        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_filter_fetch_value); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_filter_fetch_value)
          47    {
          47        dXSARGS;
          47        if (items != 2)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::filter_fetch_value(db, code)");
          47        PERL_UNUSED_VAR(cv); /* -W */
		    {
          47    	SDBM_File	db;
          47    	SV *	code = ST(1);
          47    	SV *	RETVAL =  &PL_sv_undef ;
		
          47    	if (sv_derived_from(ST(0), "SDBM_File")) {
          47    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
          47    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		#line 145 "SDBM_File.xs"
			    DBM_setFilter(db->filter_fetch_value, code) ;
		#line 448 "SDBM_File.c"
		    }
          47        XSRETURN(1);
		}
		
		
		XS(XS_SDBM_File_filter_store_value); /* prototype to pass -Wmissing-prototypes */
		XS(XS_SDBM_File_filter_store_value)
          47    {
          47        dXSARGS;
          47        if (items != 2)
      ######    	Perl_croak(aTHX_ "Usage: SDBM_File::filter_store_value(db, code)");
          47        PERL_UNUSED_VAR(cv); /* -W */
		    {
          47    	SDBM_File	db;
          47    	SV *	code = ST(1);
          47    	SV *	RETVAL =  &PL_sv_undef ;
		
          47    	if (sv_derived_from(ST(0), "SDBM_File")) {
          47    	    IV tmp = SvIV((SV*)SvRV(ST(0)));
          47    	    db = INT2PTR(SDBM_File,tmp);
			}
			else
      ######    	    Perl_croak(aTHX_ "db is not of type SDBM_File");
		#line 153 "SDBM_File.xs"
			    DBM_setFilter(db->filter_store_value, code) ;
		#line 474 "SDBM_File.c"
		    }
          47        XSRETURN(1);
		}
		
		#ifdef __cplusplus
		extern "C"
		#endif
		XS(boot_SDBM_File); /* prototype to pass -Wmissing-prototypes */
		XS(boot_SDBM_File)
          14    {
          14        dXSARGS;
          14        char* file = __FILE__;
		
          14        PERL_UNUSED_VAR(cv); /* -W */
          14        PERL_UNUSED_VAR(items); /* -W */
          14        XS_VERSION_BOOTCHECK ;
		
          14            newXS("SDBM_File::TIEHASH", XS_SDBM_File_TIEHASH, file);
          14            newXS("SDBM_File::DESTROY", XS_SDBM_File_DESTROY, file);
          14            newXS("SDBM_File::FETCH", XS_SDBM_File_FETCH, file);
          14            newXS("SDBM_File::STORE", XS_SDBM_File_STORE, file);
          14            newXS("SDBM_File::DELETE", XS_SDBM_File_DELETE, file);
          14            newXS("SDBM_File::EXISTS", XS_SDBM_File_EXISTS, file);
          14            newXS("SDBM_File::FIRSTKEY", XS_SDBM_File_FIRSTKEY, file);
          14            newXS("SDBM_File::NEXTKEY", XS_SDBM_File_NEXTKEY, file);
          14            newXS("SDBM_File::error", XS_SDBM_File_error, file);
          14            newXS("SDBM_File::clearerr", XS_SDBM_File_clearerr, file);
          14            newXS("SDBM_File::filter_fetch_key", XS_SDBM_File_filter_fetch_key, file);
          14            newXS("SDBM_File::filter_store_key", XS_SDBM_File_filter_store_key, file);
          14            newXS("SDBM_File::filter_fetch_value", XS_SDBM_File_filter_fetch_value, file);
          14            newXS("SDBM_File::filter_store_value", XS_SDBM_File_filter_store_value, file);
          14        XSRETURN_YES;
		}
		
