diff options
| author | Stefan Boberg <[email protected]> | 2021-09-21 15:42:42 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-09-21 15:42:42 +0200 |
| commit | bd540d333e920f3c93ebaaf2bd175194b3877c1b (patch) | |
| tree | 9c97ad87207e636ce452b420b80ae6ca653420f0 /zenstore/include | |
| parent | Merge branch 'main' of https://github.com/EpicGames/zen (diff) | |
| download | zen-bd540d333e920f3c93ebaaf2bd175194b3877c1b.tar.xz zen-bd540d333e920f3c93ebaaf2bd175194b3877c1b.zip | |
Encapsulated containers in CasChunkSet to allow for more efficient udpates/queries
Diffstat (limited to 'zenstore/include')
| -rw-r--r-- | zenstore/include/zenstore/CAS.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/zenstore/include/zenstore/CAS.h b/zenstore/include/zenstore/CAS.h index ed235bb4b..93454ca6f 100644 --- a/zenstore/include/zenstore/CAS.h +++ b/zenstore/include/zenstore/CAS.h @@ -9,8 +9,10 @@ #include <zencore/iohash.h> #include <zencore/refcount.h> #include <zencore/timer.h> + #include <atomic> #include <filesystem> +#include <functional> #include <memory> #include <string> #include <unordered_set> @@ -39,7 +41,7 @@ private: }; /** Context object for data scrubbing - * + * * Data scrubbing is when we traverse stored data to validate it and * optionally correct/recover */ @@ -59,10 +61,12 @@ private: class CasChunkSet { public: - void AddChunk(const IoHash& HashToAdd) { m_ChunkSet.insert(HashToAdd); } - bool RemoveIfPresent(const IoHash& HashToRemove) { return 0 != m_ChunkSet.erase(HashToRemove); } - const std::unordered_set<IoHash>& GetChunkSet() const { return m_ChunkSet; } - bool IsEmpty() const { return m_ChunkSet.empty(); } + void AddChunkToSet(const IoHash& HashToAdd); + void RemoveChunksIf(std::function<bool(const IoHash& CandidateHash)>&& Predicate); + void IterateChunks(std::function<void(const IoHash& ChunkHash)>&& Callback); + inline [[nodiscard]] bool ContainsChunk(const IoHash& Hash) const { return m_ChunkSet.find(Hash) != m_ChunkSet.end(); } + inline [[nodiscard]] bool IsEmpty() const { return m_ChunkSet.empty(); } + inline [[nodiscard]] size_t GetSize() const { return m_ChunkSet.size(); } private: std::unordered_set<IoHash> m_ChunkSet; |