Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

wvgdbmhash.cc

Go to the documentation of this file.
00001 /*
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2003 Net Integration Technologies, Inc.
00004  *
00005  * A hash table container backed by a gdbm database.  See wvgdbmhash.h.
00006  */
00007 #include "wvautoconf.h"
00008 
00009 #if HAVE_LIBGDBM
00010 
00011 #include "wvgdbmhash.h"
00012 
00013 
00014 WvGdbmHashBase::WvGdbmHashBase(WvStringParm dbfile)
00015 {
00016     dbf = gdbm_open((char *)dbfile.cstr(), 0, GDBM_WRCREAT|GDBM_FAST, 0600, 0);
00017     if (!dbf)
00018         fprintf (stderr, "Could not open database '%s': %s\n",
00019                 dbfile.cstr(), gdbm_strerror(gdbm_errno));
00020 }
00021 
00022 
00023 WvGdbmHashBase::~WvGdbmHashBase()
00024 {
00025     gdbm_close(dbf);
00026 }
00027 
00028 
00029 int WvGdbmHashBase::add(const datum &key, const datum &data, bool replace)
00030 {
00031     return gdbm_store(dbf, key, data,
00032             replace ? GDBM_REPLACE : GDBM_INSERT);
00033 }
00034 
00035 
00036 int WvGdbmHashBase::remove(const datum &key)
00037 {
00038     return gdbm_delete(dbf, key);
00039 }
00040 
00041 
00042 datum WvGdbmHashBase::find(const datum &key)
00043 {   
00044     return gdbm_fetch(dbf, key);
00045 }
00046 
00047 
00048 bool WvGdbmHashBase::exists(const datum &key)
00049 {
00050     return gdbm_exists(dbf, key);
00051 }
00052 
00053 
00054 void WvGdbmHashBase::zap()
00055 {
00056     datum key;
00057     while ((key = gdbm_firstkey(dbf)).dptr != NULL)
00058         gdbm_delete(dbf, key);
00059 }
00060 
00061 
00062 WvGdbmHashBase::IterBase::IterBase(WvGdbmHashBase &_gdbmhash)
00063     : gdbmhash(_gdbmhash)
00064 {
00065     curkey.dptr = nextkey.dptr = curdata.dptr = NULL;
00066 }
00067 
00068 
00069 WvGdbmHashBase::IterBase::~IterBase()
00070 {
00071     free(curkey.dptr);
00072     free(nextkey.dptr);
00073     free(curdata.dptr);
00074 }
00075 
00076 
00077 void WvGdbmHashBase::IterBase::rewind()
00078 {
00079     free(curkey.dptr);
00080     free(nextkey.dptr);
00081     curkey.dptr = NULL;
00082     nextkey = gdbm_firstkey(gdbmhash.dbf);
00083 }
00084 
00085 
00086 void WvGdbmHashBase::IterBase::next()
00087 {
00088     free(curkey.dptr);
00089     free(curdata.dptr);
00090     curkey = nextkey;
00091     nextkey = gdbm_nextkey(gdbmhash.dbf, curkey);
00092     curdata = gdbm_fetch(gdbmhash.dbf, curkey);
00093 }
00094 
00095 #endif

Generated on Wed Dec 15 15:08:11 2004 for WvStreams by  doxygen 1.3.9.1