summaryrefslogtreecommitdiffstats
path: root/gdbmobj/gdbmobj.h
diff options
context:
space:
mode:
authorSam Varshavchik2013-08-19 16:39:41 -0400
committerSam Varshavchik2013-08-25 14:43:51 -0400
commit9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch)
tree7a81a04cb51efb078ee350859a64be2ebc6b8813 /gdbmobj/gdbmobj.h
parenta9520698b770168d1f33d6301463bb70a19655ec (diff)
downloadcourier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2
Initial checkin
Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'gdbmobj/gdbmobj.h')
-rw-r--r--gdbmobj/gdbmobj.h170
1 files changed, 170 insertions, 0 deletions
diff --git a/gdbmobj/gdbmobj.h b/gdbmobj/gdbmobj.h
new file mode 100644
index 0000000..d9489fb
--- /dev/null
+++ b/gdbmobj/gdbmobj.h
@@ -0,0 +1,170 @@
+#ifndef gdbmobj_h
+#define gdbmobj_h
+
+/*
+** Copyright 1998 - 2007 Double Precision, Inc. See COPYING for
+** distribution information.
+*/
+
+
+#include "config.h"
+#include <gdbm.h>
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct gdbmobj {
+ GDBM_FILE dbf;
+ int has_dbf;
+ char *prev_key;
+ size_t prev_key_len;
+ } ;
+
+void gdbmobj_init(struct gdbmobj *);
+
+int gdbmobj_open(struct gdbmobj *, const char *, const char *);
+void gdbmobj_close(struct gdbmobj *);
+
+#define gdbmobj_isopen(p) (!!(p)->has_dbf)
+
+char *gdbmobj_fetch(struct gdbmobj *, const char *, size_t, size_t *, const char *);
+int gdbmobj_exists(struct gdbmobj *, const char *, size_t);
+int gdbmobj_delete(struct gdbmobj *, const char *, size_t);
+int gdbmobj_store(struct gdbmobj *, const char *, size_t, const char *,
+ size_t, const char *);
+
+char *gdbmobj_firstkey(struct gdbmobj *, size_t *, char **, size_t *);
+char *gdbmobj_nextkey(struct gdbmobj *, size_t *, char **, size_t *);
+
+#ifdef __cplusplus
+}
+
+#include <string>
+
+class GdbmObj {
+
+ struct gdbmobj obj;
+
+ GdbmObj(const GdbmObj &); /* Undefined */
+ GdbmObj &operator=(const GdbmObj &); /* Undefined */
+
+public:
+ GdbmObj() { gdbmobj_init(&obj); }
+ ~GdbmObj() { gdbmobj_close(&obj); }
+ int Open(std::string filename, const char *mode)
+ {
+ return ( gdbmobj_open(&obj, filename.c_str(), mode));
+ }
+
+ int IsOpen() { return (gdbmobj_isopen(&obj)); }
+ void Close() { gdbmobj_close(&obj); }
+
+ std::string Fetch(std::string key, std::string mode)
+ {
+ size_t l;
+ char *p=Fetch(key.c_str(), key.size(), l, mode.c_str());
+
+ if (!p) return "";
+
+ std::string v(p, p+l);
+
+ free(p);
+ return v;
+ }
+
+ bool Exists(std::string key)
+ {
+ return !!Exists(key.c_str(), key.size());
+ }
+
+ bool Delete(std::string key)
+ {
+ return !!Delete(key.c_str(), key.size());
+ }
+
+ int Store(std::string key, std::string val, std::string mode)
+ {
+ return Store(key.c_str(), key.size(),
+ val.c_str(), val.size(), mode.c_str());
+ }
+
+ std::string FetchFirstKeyVal(std::string &valRet)
+ {
+ char *key;
+ size_t keyLen;
+ char *val;
+ size_t valLen;
+
+ key=FetchFirstKeyVal(keyLen, val, valLen);
+
+ if (!key)
+ return "";
+
+ std::string r(key, key+keyLen);
+
+ valRet=std::string(val, val+valLen);
+ free(val);
+ return r;
+ }
+
+ std::string FetchNextKeyVal(std::string &valRet)
+ {
+ char *key;
+ size_t keyLen;
+ char *val;
+ size_t valLen;
+
+ key=FetchNextKeyVal(keyLen, val, valLen);
+
+ if (!key)
+ return "";
+
+ std::string r(key, key+keyLen);
+
+ valRet=std::string(val, val+valLen);
+ free(val);
+ return r;
+ }
+
+
+ char *Fetch(const char *key, size_t keylen,
+ size_t &valuelen, const char *mode)
+ {
+ return (gdbmobj_fetch(&obj, key, keylen,
+ &valuelen, mode));
+ }
+
+ int Exists(const char *key, size_t keylen)
+ {
+ return (gdbmobj_exists(&obj, key, keylen));
+ }
+
+ int Delete(const char *key, size_t keylen)
+ {
+ return (gdbmobj_delete(&obj, key, keylen));
+ }
+
+ int Store(const char *key, size_t keylen,
+ const char *value, size_t valuelen,
+ const char *mode)
+ {
+ return (gdbmobj_store(&obj, key, keylen, value,
+ valuelen, mode));
+ }
+
+ char *FetchFirstKeyVal(size_t &keylen, char *&val, size_t &vallen)
+ {
+ return (gdbmobj_firstkey(&obj, &keylen, &val, &vallen));
+ }
+ char *FetchNextKeyVal(size_t &keylen, char *&val, size_t &vallen)
+ {
+ return (gdbmobj_nextkey(&obj, &keylen, &val, &vallen));
+ }
+} ;
+
+#endif
+
+#endif