f80e9a6c3f345928f3638f81fa4d61ece6b2c56a
[c11concurrency-benchmarks.git] / silo / benchmarks / bdb_wrapper.h
1 #ifndef _BDB_WRAPPER_H_
2 #define _BDB_WRAPPER_H_
3
4 #include <string>
5 #include <db_cxx.h>
6
7 #include "abstract_db.h"
8 #include "../macros.h"
9
10 class bdb_wrapper : public abstract_db {
11 public:
12   bdb_wrapper(const std::string &envdir,
13               const std::string &dbfile);
14   ~bdb_wrapper();
15
16   /**
17    * BDB has small txn sizes
18    */
19   virtual ssize_t txn_max_batch_size() const { return 1000; }
20
21   virtual void *new_txn(
22       uint64_t txn_flags,
23       str_arena &arena,
24       void *buf,
25       TxnProfileHint hint);
26   virtual bool commit_txn(void *txn);
27   virtual void abort_txn(void *txn);
28
29   virtual abstract_ordered_index *
30   open_index(const std::string &name,
31              size_t value_size_hint,
32              bool mostly_append);
33
34   virtual void
35   close_index(abstract_ordered_index *idx);
36
37 private:
38   DbEnv *env;
39 };
40
41 class bdb_ordered_index : public abstract_ordered_index {
42 public:
43
44   // takes ownership of db
45   bdb_ordered_index(Db *db) : db(db) {}
46   ~bdb_ordered_index();
47
48   virtual bool get(
49       void *txn,
50       const std::string &key,
51       std::string &value,
52       size_t max_bytes_read);
53
54   virtual const char * put(
55       void *txn,
56       const std::string &key,
57       const std::string &value);
58
59   virtual void scan(
60       void *txn,
61       const std::string &key,
62       const std::string *value,
63       scan_callback &callback,
64       str_arena *arena)
65   {
66     NDB_UNIMPLEMENTED("scan");
67   }
68
69   virtual void rscan(
70       void *txn,
71       const std::string &start_key,
72       const std::string *end_key,
73       scan_callback &callback,
74       str_arena *arena)
75   {
76     NDB_UNIMPLEMENTED("rscan");
77   }
78
79   virtual size_t
80   size() const
81   {
82     NDB_UNIMPLEMENTED("size");
83   }
84
85   virtual std::map<std::string, uint64_t>
86   clear()
87   {
88     NDB_UNIMPLEMENTED("clear");
89   }
90
91 private:
92   Db *db;
93 };
94
95 #endif /* _BDB_WRAPPER_H_ */