2 #ifndef CAFFE_UTIL_DB_LMDB_HPP 3 #define CAFFE_UTIL_DB_LMDB_HPP 10 #include "caffe/util/db.hpp" 12 namespace caffe {
namespace db {
14 inline void MDB_CHECK(
int mdb_status) {
15 CHECK_EQ(mdb_status, MDB_SUCCESS) << mdb_strerror(mdb_status);
18 class LMDBCursor :
public Cursor {
20 explicit LMDBCursor(MDB_txn* mdb_txn, MDB_cursor* mdb_cursor)
21 : mdb_txn_(mdb_txn), mdb_cursor_(mdb_cursor), valid_(false) {
24 virtual ~LMDBCursor() {
25 mdb_cursor_close(mdb_cursor_);
26 mdb_txn_abort(mdb_txn_);
28 virtual void SeekToFirst() { Seek(MDB_FIRST); }
29 virtual void Next() { Seek(MDB_NEXT); }
30 virtual string key() {
31 return string(static_cast<const char*>(mdb_key_.mv_data), mdb_key_.mv_size);
33 virtual string value() {
34 return string(static_cast<const char*>(mdb_value_.mv_data),
37 virtual bool valid() {
return valid_; }
40 void Seek(MDB_cursor_op op) {
41 int mdb_status = mdb_cursor_get(mdb_cursor_, &mdb_key_, &mdb_value_, op);
42 if (mdb_status == MDB_NOTFOUND) {
45 MDB_CHECK(mdb_status);
51 MDB_cursor* mdb_cursor_;
52 MDB_val mdb_key_, mdb_value_;
56 class LMDBTransaction :
public Transaction {
58 explicit LMDBTransaction(MDB_env* mdb_env)
59 : mdb_env_(mdb_env) { }
60 virtual void Put(
const string& key,
const string& value);
61 virtual void Commit();
65 vector<string> keys, values;
69 DISABLE_COPY_AND_ASSIGN(LMDBTransaction);
72 class LMDB :
public DB {
74 LMDB() : mdb_env_(NULL) { }
75 virtual ~LMDB() { Close(); }
76 virtual void Open(
const string& source, Mode mode);
77 virtual void Close() {
78 if (mdb_env_ != NULL) {
79 mdb_dbi_close(mdb_env_, mdb_dbi_);
80 mdb_env_close(mdb_env_);
84 virtual LMDBCursor* NewCursor();
85 virtual LMDBTransaction* NewTransaction();
95 #endif // CAFFE_UTIL_DB_LMDB_HPP A layer factory that allows one to register layers. During runtime, registered layers can be called b...
Definition: blob.hpp:14