git / moonbite-core / src/mweb/mweb_db.h · raw

#pragma once#include <dbwrapper.h>#include <mw/interfaces/db_interface.h>namespace MWEB {class DBBatch : public mw::DBBatch{public:    DBBatch(CDBWrapper* pDB, const std::shared_ptr<CDBBatch>& pBatch)        : m_pDB(pDB), m_pBatch(pBatch) {}    void Write(const std::string& key, const std::vector<uint8_t>& value) final    {        m_pBatch->Write(key, value);    }    void Erase(const std::string& key) final    {        m_pBatch->Erase(key);    }    void Commit() final    {        m_pDB->WriteBatch(*m_pBatch);    }private:    CDBWrapper* m_pDB;    std::shared_ptr<CDBBatch> m_pBatch;};class DBIterator : public mw::DBIterator{public:    explicit DBIterator(CDBIterator* pIterator)        : m_pIterator(std::unique_ptr<CDBIterator>(pIterator)) {}    void Seek(const std::string& key) final    {        m_pIterator->Seek(key);    }    void Next() final    {        m_pIterator->Next();    }    bool GetKey(std::string& key) const final    {        return m_pIterator->GetKey(key);    }    bool Valid() const final    {        return m_pIterator->Valid();    }private:    std::unique_ptr<CDBIterator> m_pIterator;};class DBWrapper : public mw::DBWrapper{public:    explicit DBWrapper(CDBWrapper* pDB) : m_pDB(pDB) {}    bool Read(const std::string& key, std::vector<uint8_t>& value) const final    {        return m_pDB->Read(key, value);    }    std::unique_ptr<mw::DBIterator> NewIterator() final    {        return std::unique_ptr<mw::DBIterator>(new MWEB::DBIterator(m_pDB->NewIterator()));    }    std::unique_ptr<mw::DBBatch> CreateBatch() final    {        return std::unique_ptr<mw::DBBatch>(new MWEB::DBBatch(m_pDB, std::make_shared<CDBBatch>(*m_pDB)));    }private:    CDBWrapper* m_pDB;};} // namespace MWEB