/*
 * bsddb.h - BSD DB interface
 *
 *  Copyright(C) 2001-2002 by Shiro Kawai (shiro@acm.org)
 *
 *  Permission to use, copy, modify, distribute this software and
 *  accompanying documentation for any purpose is hereby granted,
 *  provided that existing copyright notices are retained in all
 *  copies and that this notice is included verbatim in all
 *  distributions.
 *  This software is provided as is, without express or implied
 *  warranty.  In no circumstances the author(s) shall be liable
 *  for any damages arising out of the use of this software.
 *
 *  $Id: bsddb.h,v 1.4 2002/12/31 09:36:51 shirok Exp $
 */

#ifndef GAUCHE_BSDDB_H
#define GAUCHE_BSDDB_H

#include <gauche.h>
#include <gauche/class.h>
#include "dbmconfig.h"
#include <db.h>

/* I try to expose as many features of BSD DB as possible, but
   had to drop a few features from Scheme interface. */

typedef struct ScmBsdDbRec {
    SCM_HEADER;
    ScmObj name;
    DB *db;
    void *info;
} ScmBsdDb;

extern ScmClass Scm_BsdDbClass;
#define SCM_CLASS_BSD_DB     (&Scm_BsdDbClass)
#define SCM_BSD_DB(obj)      ((ScmBsdDb*)obj)
#define SCM_BSD_DB_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_BSD_DB)

extern ScmClass Scm_BsdBtreeClass;
#define SCM_CLASS_BSD_BTREE     (&Scm_BsdBtreeClass)
#define SCM_BSD_BTREE(obj)      ((ScmBsdBtree*)obj)
#define SCM_BSD_BTREE_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_BSD_BTREE)

extern ScmClass Scm_BsdHashClass;
#define SCM_CLASS_BSD_HASH     (&Scm_BsdHashClass)
#define SCM_BSD_HASH(obj)      ((ScmBsdHash*)obj)
#define SCM_BSD_HASH_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_BSD_HASH)

extern ScmClass Scm_BsdRecnoClass;
#define SCM_CLASS_BSD_RECNO     (&Scm_BsdRecnoClass)
#define SCM_BSD_RECNO(obj)      ((ScmBsdRecno*)obj)
#define SCM_BSD_RECNO_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_BSD_RECNO)

extern void Scm_Init_bsddb(ScmModule *mod);

#endif /*GAUCHE_BSDDB_H*/


syntax highlighted by Code2HTML, v. 0.9.1