/usr/include/caffe/util/db_lmdb.hpp is in libcaffe-cpu-dev 1.0.0~rc4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #ifdef USE_LMDB
#ifndef CAFFE_UTIL_DB_LMDB_HPP
#define CAFFE_UTIL_DB_LMDB_HPP
#include <string>
#include <vector>
#include "lmdb.h"
#include "caffe/util/db.hpp"
namespace caffe { namespace db {
inline void MDB_CHECK(int mdb_status) {
CHECK_EQ(mdb_status, MDB_SUCCESS) << mdb_strerror(mdb_status);
}
class LMDBCursor : public Cursor {
public:
explicit LMDBCursor(MDB_txn* mdb_txn, MDB_cursor* mdb_cursor)
: mdb_txn_(mdb_txn), mdb_cursor_(mdb_cursor), valid_(false) {
SeekToFirst();
}
virtual ~LMDBCursor() {
mdb_cursor_close(mdb_cursor_);
mdb_txn_abort(mdb_txn_);
}
virtual void SeekToFirst() { Seek(MDB_FIRST); }
virtual void Next() { Seek(MDB_NEXT); }
virtual string key() {
return string(static_cast<const char*>(mdb_key_.mv_data), mdb_key_.mv_size);
}
virtual string value() {
return string(static_cast<const char*>(mdb_value_.mv_data),
mdb_value_.mv_size);
}
virtual bool valid() { return valid_; }
private:
void Seek(MDB_cursor_op op) {
int mdb_status = mdb_cursor_get(mdb_cursor_, &mdb_key_, &mdb_value_, op);
if (mdb_status == MDB_NOTFOUND) {
valid_ = false;
} else {
MDB_CHECK(mdb_status);
valid_ = true;
}
}
MDB_txn* mdb_txn_;
MDB_cursor* mdb_cursor_;
MDB_val mdb_key_, mdb_value_;
bool valid_;
};
class LMDBTransaction : public Transaction {
public:
explicit LMDBTransaction(MDB_env* mdb_env)
: mdb_env_(mdb_env) { }
virtual void Put(const string& key, const string& value);
virtual void Commit();
private:
MDB_env* mdb_env_;
vector<string> keys, values;
void DoubleMapSize();
DISABLE_COPY_AND_ASSIGN(LMDBTransaction);
};
class LMDB : public DB {
public:
LMDB() : mdb_env_(NULL) { }
virtual ~LMDB() { Close(); }
virtual void Open(const string& source, Mode mode);
virtual void Close() {
if (mdb_env_ != NULL) {
mdb_dbi_close(mdb_env_, mdb_dbi_);
mdb_env_close(mdb_env_);
mdb_env_ = NULL;
}
}
virtual LMDBCursor* NewCursor();
virtual LMDBTransaction* NewTransaction();
private:
MDB_env* mdb_env_;
MDB_dbi mdb_dbi_;
};
} // namespace db
} // namespace caffe
#endif // CAFFE_UTIL_DB_LMDB_HPP
#endif // USE_LMDB
|