From 19b3424a3c351ccab40c56988d8521d0e855a7e7 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Tue, 15 Aug 2023 17:48:50 +0200 Subject: [PATCH] Add constrained_block_size to granularity policy --- src/dwarfs/segmenter.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/dwarfs/segmenter.cpp b/src/dwarfs/segmenter.cpp index 53a2add6..75ba427a 100644 --- a/src/dwarfs/segmenter.cpp +++ b/src/dwarfs/segmenter.cpp @@ -283,6 +283,13 @@ class ConstantGranularityPolicy : private GranularityPolicyBase { chunkable_size_fail_message(size, kGranularity)); } } + + static size_t constrained_block_size(size_t size) { + if constexpr (kGranularity > 1) { + size -= size % kGranularity; + } + return size; + } }; class VariableGranularityPolicy : private GranularityPolicyBase { @@ -309,6 +316,13 @@ class VariableGranularityPolicy : private GranularityPolicyBase { } } + size_t constrained_block_size(size_t size) const { + if (granularity_ > 1) { + size -= size % granularity_; + } + return size; + } + private: uint_fast32_t const granularity_; }; @@ -395,7 +409,7 @@ class segmenter_ final : public segmenter::impl, private GranularityPolicy { , block_ready_{std::move(block_ready)} , window_size_{window_size(cfg)} , window_step_{window_step(cfg)} - , block_size_{block_size(cfg)} + , block_size_{this->constrained_block_size(block_size(cfg))} , filter_{bloom_filter_size(cfg)} , match_counts_{1, 0, 128} { if (segmentation_enabled()) {