#pragma once #include #include #include #include #include class PruneList { public: using Ptr = std::shared_ptr; using CPtr = std::shared_ptr; static PruneList::Ptr Open(const FilePath& parent_dir, const uint32_t file_index); static FilePath GetPath(const FilePath& dir, const uint32_t file_index); uint64_t GetShift(const mmr::Index& index) const noexcept; uint64_t GetShift(const mmr::LeafIndex& index) const noexcept; uint64_t GetTotalShift() const noexcept { return m_totalShift; } void Commit(const uint32_t file_index, const BitSet& compacted); private: PruneList(const FilePath& dir, BitSet&& compacted, uint64_t total_shift) : m_dir(dir), m_compacted(std::move(compacted)), m_totalShift(total_shift) { } FilePath m_dir; BitSet m_compacted; uint64_t m_totalShift; };