diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-10-20 09:20:11 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-10-20 09:20:11 +0000 |
commit | 53e376d836133a660223198c7bb8308fb912375e (patch) | |
tree | 92d5e5381b9bfafd2a79d3efdec71f14edb798d9 /src/libnix/db.hh | |
parent | 0eab306466fdb186c692521dd1f2b949e56c54da (diff) | |
download | guix-53e376d836133a660223198c7bb8308fb912375e.tar.gz |
* Refactored the source tree.
Diffstat (limited to 'src/libnix/db.hh')
-rw-r--r-- | src/libnix/db.hh | 89 |
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 */ |