Caffe
db_leveldb.hpp
1 #ifdef USE_LEVELDB
2 #ifndef CAFFE_UTIL_DB_LEVELDB_HPP
3 #define CAFFE_UTIL_DB_LEVELDB_HPP
4 
5 #include <string>
6 
7 #include "leveldb/db.h"
8 #include "leveldb/write_batch.h"
9 
10 #include "caffe/util/db.hpp"
11 
12 namespace caffe { namespace db {
13 
14 class LevelDBCursor : public Cursor {
15  public:
16  explicit LevelDBCursor(leveldb::Iterator* iter)
17  : iter_(iter) {
18  SeekToFirst();
19  CHECK(iter_->status().ok()) << iter_->status().ToString();
20  }
21  ~LevelDBCursor() { delete iter_; }
22  virtual void SeekToFirst() { iter_->SeekToFirst(); }
23  virtual void Next() { iter_->Next(); }
24  virtual string key() { return iter_->key().ToString(); }
25  virtual string value() { return iter_->value().ToString(); }
26  virtual bool valid() { return iter_->Valid(); }
27 
28  private:
29  leveldb::Iterator* iter_;
30 };
31 
32 class LevelDBTransaction : public Transaction {
33  public:
34  explicit LevelDBTransaction(leveldb::DB* db) : db_(db) { CHECK_NOTNULL(db_); }
35  virtual void Put(const string& key, const string& value) {
36  batch_.Put(key, value);
37  }
38  virtual void Commit() {
39  leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch_);
40  CHECK(status.ok()) << "Failed to write batch to leveldb "
41  << std::endl << status.ToString();
42  }
43 
44  private:
45  leveldb::DB* db_;
46  leveldb::WriteBatch batch_;
47 
48  DISABLE_COPY_AND_ASSIGN(LevelDBTransaction);
49 };
50 
51 class LevelDB : public DB {
52  public:
53  LevelDB() : db_(NULL) { }
54  virtual ~LevelDB() { Close(); }
55  virtual void Open(const string& source, Mode mode);
56  virtual void Close() {
57  if (db_ != NULL) {
58  delete db_;
59  db_ = NULL;
60  }
61  }
62  virtual LevelDBCursor* NewCursor() {
63  return new LevelDBCursor(db_->NewIterator(leveldb::ReadOptions()));
64  }
65  virtual LevelDBTransaction* NewTransaction() {
66  return new LevelDBTransaction(db_);
67  }
68 
69  private:
70  leveldb::DB* db_;
71 };
72 
73 
74 } // namespace db
75 } // namespace caffe
76 
77 #endif // CAFFE_UTIL_DB_LEVELDB_HPP
78 #endif // USE_LEVELDB
A layer factory that allows one to register layers. During runtime, registered layers can be called b...
Definition: blob.hpp:14