/* This file is part of TON Blockchain Library. TON Blockchain Library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. TON Blockchain Library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with TON Blockchain Library. If not, see . Copyright 2017-2019 Telegram Systems LLP */ #pragma once #if !TDDB_USE_ROCKSDB #error "RocksDb is not supported" #endif #include "td/db/KeyValue.h" #include "td/utils/Status.h" namespace rocksdb { class OptimisticTransactionDB; class Transaction; class WriteBatch; class Snapshot; class Statistics; } // namespace rocksdb namespace td { class RocksDb : public KeyValue { public: static Status destroy(Slice path); RocksDb clone() const; static Result open(std::string path); Result get(Slice key, std::string &value) override; Status set(Slice key, Slice value) override; Status erase(Slice key) override; Result count(Slice prefix) override; Status begin_transaction() override; Status commit_transaction() override; Status abort_transaction() override; Status flush() override; Status begin_snapshot(); Status end_snapshot(); std::unique_ptr snapshot() override; std::string stats() const override; RocksDb(RocksDb &&); RocksDb &operator=(RocksDb &&); ~RocksDb(); private: std::shared_ptr db_; std::shared_ptr statistics_; std::unique_ptr transaction_; std::unique_ptr write_batch_; class UnreachableDeleter { public: template void operator()(T *) { UNREACHABLE(); } }; std::unique_ptr snapshot_; explicit RocksDb(std::shared_ptr db, std::shared_ptr statistics); }; } // namespace td