#ifndef LevelDBDatabase_h
#define LevelDBDatabase_h
#if USE(LEVELDB)
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace leveldb {
class Comparator;
class DB;
class Env;
class Snapshot;
}
namespace WebCore {
class LevelDBComparator;
class LevelDBDatabase;
class LevelDBIterator;
class LevelDBSlice;
class LevelDBWriteBatch;
class LevelDBSnapshot {
private:
friend class LevelDBDatabase;
friend class LevelDBTransaction;
explicit LevelDBSnapshot(LevelDBDatabase*);
~LevelDBSnapshot();
leveldb::DB* m_db;
const leveldb::Snapshot* m_snapshot;
};
class LevelDBDatabase {
public:
static PassOwnPtr<LevelDBDatabase> open(const String& fileName, const LevelDBComparator*);
static PassOwnPtr<LevelDBDatabase> openInMemory(const LevelDBComparator*);
static bool destroy(const String& fileName);
virtual ~LevelDBDatabase();
bool put(const LevelDBSlice& key, const Vector<char>& value);
bool remove(const LevelDBSlice& key);
virtual bool safeGet(const LevelDBSlice& key, Vector<char>& value, bool& found, const LevelDBSnapshot* = 0);
bool write(LevelDBWriteBatch&);
PassOwnPtr<LevelDBIterator> createIterator(const LevelDBSnapshot* = 0);
const LevelDBComparator* comparator() const;
protected:
LevelDBDatabase();
private:
friend class LevelDBSnapshot;
OwnPtr<leveldb::Env> m_env;
OwnPtr<leveldb::Comparator> m_comparatorAdapter;
OwnPtr<leveldb::DB> m_db;
const LevelDBComparator* m_comparator;
};
}
#endif
#endif