summary refs log tree commit diff
path: root/src/libnix/db.hh
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-10-20 09:20:11 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-10-20 09:20:11 +0000
commit53e376d836133a660223198c7bb8308fb912375e (patch)
tree92d5e5381b9bfafd2a79d3efdec71f14edb798d9 /src/libnix/db.hh
parent0eab306466fdb186c692521dd1f2b949e56c54da (diff)
downloadguix-53e376d836133a660223198c7bb8308fb912375e.tar.gz
* Refactored the source tree.
Diffstat (limited to 'src/libnix/db.hh')
-rw-r--r--src/libnix/db.hh89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/libnix/db.hh b/src/libnix/db.hh
new file mode 100644
index 0000000000..1c681b9b54
--- /dev/null
+++ b/src/libnix/db.hh
@@ -0,0 +1,89 @@
+#ifndef __DB_H
+#define __DB_H
+
+#include <string>
+#include <list>
+#include <map>
+
+#include <db_cxx.h>
+
+#include "util.hh"
+
+using namespace std;
+
+
+class Database;
+
+
+class Transaction
+{
+    friend class Database;
+
+private:
+    DbTxn * txn;
+    
+public:
+    Transaction();
+    Transaction(Database & _db);
+    ~Transaction();
+
+    void abort();
+    void commit();
+
+    void moveTo(Transaction & t);
+};
+
+
+#define noTxn Transaction()
+
+
+typedef unsigned int TableId; /* table handles */
+
+
+class Database
+{
+    friend class Transaction;
+
+private:
+    DbEnv * env;
+
+    int fdLock;
+    int fdAccessors;
+
+    TableId nextId;
+    map<TableId, Db *> tables;
+
+    void requireEnv();
+
+    Db * getDb(TableId table);
+
+public:
+    Database();
+    ~Database();
+    
+    void open(const string & path);
+    void close();
+
+    TableId openTable(const string & table);
+
+    bool queryString(const Transaction & txn, TableId table, 
+        const string & key, string & data);
+
+    bool queryStrings(const Transaction & txn, TableId table, 
+        const string & key, Strings & data);
+
+    void setString(const Transaction & txn, TableId table,
+        const string & key, const string & data);
+
+    void setStrings(const Transaction & txn, TableId table,
+        const string & key, const Strings & data);
+
+    void delPair(const Transaction & txn, TableId table,
+        const string & key);
+
+    void enumTable(const Transaction & txn, TableId table,
+        Strings & keys);
+};
+
+
+#endif /* !__DB_H */