// Squawk messenger. // Copyright (C) 2019 Yury Gubich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #ifndef LMDBDATABASE_CACHE_H #define LMDBDATABASE_CACHE_H #include #include #include "storage.h" namespace LMDBDataBase { template class Cache : public Storage { friend class DataBase; enum class Mode { //it's a cache state when we: nothing, // - know nothing about records in database on disk size, // - know just an amount of records full // - shure that our cache is equal to the database on disk }; protected: Cache(const std::string& name, DataBase* parent); ~Cache() override; private: void handleMode() const; public: virtual void addRecord(const K& key, const V& value) override; virtual bool forceRecord(const K& key, const V& value) override; virtual void changeRecord(const K& key, const V& value) override; virtual void removeRecord(const K& key) override; virtual bool checkRecord(const K& key) const override; virtual V getRecord(const K& key) const override; virtual uint32_t count() const override; using Storage::drop; virtual int drop(MDB_txn * transaction) override; virtual std::map readAll() const override; virtual void replaceAll(const std::map& data) override; virtual uint32_t addRecords(const std::map& data, bool overwrite = false) override; protected: Mode* mode; std::map* cache; std::set* abscent; uint32_t* sizeDifference; }; } #include "cache.hpp" #endif // LMDBDATABASE_CACHE_H