Skip to content

src/storage/trie/impl/trie_storage_impl.hpp

Namespaces

Name
sgns
sgns::api
sgns::storage
sgns::storage::trie

Classes

Name
class sgns::storage::trie::TrieStorageImpl

Source code

#ifndef SUPERGENIUS_STORAGE_TRIE_IMPL_TRIE_STORAGE_IMPL
#define SUPERGENIUS_STORAGE_TRIE_IMPL_TRIE_STORAGE_IMPL

#include "storage/trie/trie_storage.hpp"

#include "base/logger.hpp"
#include "storage/changes_trie/changes_tracker.hpp"
#include "storage/trie/codec.hpp"
#include "storage/trie/supergenius_trie/supergenius_trie_factory.hpp"
#include "storage/trie/serialization/trie_serializer.hpp"

namespace sgns::api {
  class Session;
}
namespace sgns::storage::trie {

  class TrieStorageImpl : public TrieStorage {
   public:
    static outcome::result<std::unique_ptr<TrieStorageImpl>> createEmpty(
        const std::shared_ptr<SuperGeniusTrieFactory> &trie_factory,
        std::shared_ptr<Codec> codec,
        std::shared_ptr<TrieSerializer> serializer,
        boost::optional<std::shared_ptr<changes_trie::ChangesTracker>> changes);

    static outcome::result<std::unique_ptr<TrieStorageImpl>> createFromStorage(
        const base::Buffer &root_hash,
        std::shared_ptr<Codec> codec,
        std::shared_ptr<TrieSerializer> serializer,
        boost::optional<std::shared_ptr<changes_trie::ChangesTracker>> changes);

    TrieStorageImpl(TrieStorageImpl const &) = delete;
    void operator=(const TrieStorageImpl &) = delete;

    TrieStorageImpl(TrieStorageImpl &&) = default;
    TrieStorageImpl& operator=(TrieStorageImpl &&) = default;
    ~TrieStorageImpl() override = default;

    outcome::result<std::unique_ptr<PersistentTrieBatch>> getPersistentBatch()
        override;
    outcome::result<std::unique_ptr<EphemeralTrieBatch>> getEphemeralBatch()
        const override;

    outcome::result<std::unique_ptr<PersistentTrieBatch>> getPersistentBatchAt(
        const base::Hash256 &root) override;
    outcome::result<std::unique_ptr<EphemeralTrieBatch>> getEphemeralBatchAt(
        const base::Hash256 &root) const override;

    base::Buffer getRootHash() const override;

    std::string GetName() override
    {
        return "TrieStorageImpl";
    }

   protected:
    TrieStorageImpl(
        base::Buffer root_hash,
        std::shared_ptr<Codec> codec,
        std::shared_ptr<TrieSerializer> serializer,
        boost::optional<std::shared_ptr<changes_trie::ChangesTracker>> changes);

   private:
    base::Buffer root_hash_;
    std::shared_ptr<Codec> codec_;
    std::shared_ptr<TrieSerializer> serializer_;
    boost::optional<std::shared_ptr<changes_trie::ChangesTracker>> changes_;
    base::Logger logger_;
  };

}  // namespace sgns::storage::trie

#endif  // SUPERGENIUS_STORAGE_TRIE_IMPL_TRIE_STORAGE_IMPL

Updated on 2026-03-04 at 13:10:45 -0800