aboutsummaryrefslogtreecommitdiff
path: root/zenstore/CAS.cpp
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/CAS.cpp
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/CAS.cpp')
-rw-r--r--zenstore/CAS.cpp39
1 files changed, 36 insertions, 3 deletions
diff --git a/zenstore/CAS.cpp b/zenstore/CAS.cpp
index a3837d159..eaf72cb41 100644
--- a/zenstore/CAS.cpp
+++ b/zenstore/CAS.cpp
@@ -26,6 +26,39 @@
namespace zen {
void
+CasChunkSet::AddChunkToSet(const IoHash& HashToAdd)
+{
+ m_ChunkSet.insert(HashToAdd);
+}
+
+void
+CasChunkSet::RemoveChunksIf(std::function<bool(const IoHash& CandidateHash)>&& Predicate)
+{
+ for (auto It = begin(m_ChunkSet), ItEnd = end(m_ChunkSet); It != ItEnd;)
+ {
+ if (Predicate(*It))
+ {
+ It = m_ChunkSet.erase(It);
+ }
+ else
+ {
+ ++It;
+ }
+ }
+}
+
+void
+CasChunkSet::IterateChunks(std::function<void(const IoHash& ChunkHash)>&& Callback)
+{
+ for (auto It = begin(m_ChunkSet), ItEnd = end(m_ChunkSet); It != ItEnd;)
+ {
+ Callback(*It);
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+void
ScrubContext::ReportBadChunks(std::span<IoHash> BadChunks)
{
ZEN_UNUSED(BadChunks);
@@ -226,11 +259,11 @@ TEST_CASE("CasStore")
CHECK(Result2.New);
CasChunkSet ChunkSet;
- ChunkSet.AddChunk(Hash1);
- ChunkSet.AddChunk(Hash2);
+ ChunkSet.AddChunkToSet(Hash1);
+ ChunkSet.AddChunkToSet(Hash2);
Store->FilterChunks(ChunkSet);
- CHECK(ChunkSet.GetChunkSet().size() == 0);
+ CHECK(ChunkSet.IsEmpty());
IoBuffer Lookup1 = Store->FindChunk(Hash1);
CHECK(Lookup1);