Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | 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 Tue Oct 5 01:09:20 2004 for WvStreams by doxygen 1.3.7