aboutsummaryrefslogtreecommitdiff
path: root/zenstore/include
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-09-21 15:42:42 +0200
committerStefan Boberg <[email protected]>2021-09-21 15:42:42 +0200
commitbd540d333e920f3c93ebaaf2bd175194b3877c1b (patch)
tree9c97ad87207e636ce452b420b80ae6ca653420f0 /zenstore/include
parentMerge branch 'main' of https://github.com/EpicGames/zen (diff)
downloadzen-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.h14
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;