1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_DATABASE_H_
6 #define CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_DATABASE_H_
10 #include "base/files/file_path.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/strings/string16.h"
13 #include "base/strings/string_piece.h"
14 #include "content/common/content_export.h"
15 #include "third_party/leveldatabase/src/include/leveldb/comparator.h"
16 #include "third_party/leveldatabase/src/include/leveldb/status.h"
27 class LevelDBComparator
;
28 class LevelDBDatabase
;
29 class LevelDBIterator
;
30 class LevelDBWriteBatch
;
32 class LevelDBSnapshot
{
34 friend class LevelDBDatabase
;
35 friend class LevelDBTransaction
;
37 explicit LevelDBSnapshot(LevelDBDatabase
* db
);
41 const leveldb::Snapshot
* snapshot_
;
44 class CONTENT_EXPORT LevelDBLock
{
46 virtual ~LevelDBLock() {}
49 class CONTENT_EXPORT LevelDBDatabase
{
51 class ComparatorAdapter
: public leveldb::Comparator
{
53 explicit ComparatorAdapter(const LevelDBComparator
* comparator
);
55 virtual int Compare(const leveldb::Slice
& a
,
56 const leveldb::Slice
& b
) const OVERRIDE
;
58 virtual const char* Name() const OVERRIDE
;
60 virtual void FindShortestSeparator(std::string
* start
,
61 const leveldb::Slice
& limit
) const
63 virtual void FindShortSuccessor(std::string
* key
) const OVERRIDE
;
66 const LevelDBComparator
* comparator_
;
69 static leveldb::Status
Open(const base::FilePath
& file_name
,
70 const LevelDBComparator
* comparator
,
71 scoped_ptr
<LevelDBDatabase
>* db
,
72 bool* is_disk_full
= 0);
73 static scoped_ptr
<LevelDBDatabase
> OpenInMemory(
74 const LevelDBComparator
* comparator
);
75 static leveldb::Status
Destroy(const base::FilePath
& file_name
);
76 static scoped_ptr
<LevelDBLock
> LockForTesting(
77 const base::FilePath
& file_name
);
78 virtual ~LevelDBDatabase();
80 leveldb::Status
Put(const base::StringPiece
& key
, std::string
* value
);
81 leveldb::Status
Remove(const base::StringPiece
& key
);
82 virtual leveldb::Status
Get(const base::StringPiece
& key
,
85 const LevelDBSnapshot
* = 0);
86 leveldb::Status
Write(const LevelDBWriteBatch
& write_batch
);
87 scoped_ptr
<LevelDBIterator
> CreateIterator(const LevelDBSnapshot
* = 0);
88 const LevelDBComparator
* Comparator() const;
89 void Compact(const base::StringPiece
& start
, const base::StringPiece
& stop
);
95 friend class LevelDBSnapshot
;
97 scoped_ptr
<leveldb::Env
> env_
;
98 scoped_ptr
<leveldb::Comparator
> comparator_adapter_
;
99 scoped_ptr
<leveldb::DB
> db_
;
100 const LevelDBComparator
* comparator_
;
103 } // namespace content
105 #endif // CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_DATABASE_H_