From 0074d7a0be5757b1321f02dd35fe45aa39935b52 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Wed, 18 Oct 2023 16:05:26 +0200 Subject: [PATCH] MaskStack: rm caching (premature optimization) --- Device/Mask/MaskStack.cpp | 36 ++++++++++-------------------------- Device/Mask/MaskStack.h | 5 ----- 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/Device/Mask/MaskStack.cpp b/Device/Mask/MaskStack.cpp index 8fe30f58d02..e8358f72ddf 100644 --- a/Device/Mask/MaskStack.cpp +++ b/Device/Mask/MaskStack.cpp @@ -31,10 +31,10 @@ MaskPattern* MaskPattern::clone() const return new MaskPattern(shape->clone(), doMask); } + MaskStack::MaskStack(const Scale& xAxis, const Scale& yAxis) : m_xAxis(xAxis.clone()) , m_yAxis(yAxis.clone()) - , m_masked(xAxis.size() * yAxis.size(), false) { } @@ -44,19 +44,25 @@ MaskStack::MaskStack(const MaskStack& other) : m_xAxis(other.m_xAxis->clone()) , m_yAxis(other.m_yAxis->clone()) , m_stack(other.m_stack) - , m_masked(other.m_masked) { } void MaskStack::addMask(const IShape2D& shape, bool mask_value) { m_stack.emplace_back(new MaskPattern(shape.clone(), mask_value)); - process_masks(); } bool MaskStack::isMasked(size_t i_flat) const { - return m_masked[i_flat]; + Bin1D binx = m_xAxis->bin(i_flat % m_xAxis->size()); + Bin1D biny = m_yAxis->bin(i_flat / m_xAxis->size()); + + for (int k = m_stack.size() - 1; k >= 0; --k) { + const MaskPattern* const pat = m_stack[k]; + if (pat->shape->contains(binx, biny)) + return pat->doMask; + } + return false; } bool MaskStack::hasMasks() const @@ -73,25 +79,3 @@ const MaskPattern* MaskStack::patternAt(size_t iMask) const { return m_stack.at(iMask); } - -void MaskStack::process_masks() -{ - m_masked.clear(); - m_masked.resize(m_xAxis->size() * m_yAxis->size(), false); - - if (m_stack.empty()) - return; - - for (size_t i_flat = 0; i_flat < m_masked.size(); ++i_flat) { - Bin1D binx = m_xAxis->bin(i_flat % m_xAxis->size()); - Bin1D biny = m_yAxis->bin(i_flat / m_xAxis->size()); - // setting mask to the data starting from last shape added - for (int k = m_stack.size() - 1; k >= 0; --k) { - const MaskPattern* const pat = m_stack[k]; - if (pat->shape->contains(binx, biny)) { - m_masked[i_flat] = pat->doMask; - break; // i_flat is covered by the shape, stop looking further - } - } - } -} diff --git a/Device/Mask/MaskStack.h b/Device/Mask/MaskStack.h index ada95acc5d4..276b5ce4316 100644 --- a/Device/Mask/MaskStack.h +++ b/Device/Mask/MaskStack.h @@ -56,15 +56,10 @@ public: const MaskPattern* patternAt(size_t iMask) const; private: - void process_masks(); - //... primary data: const Scale* m_xAxis; const Scale* m_yAxis; CloneableVector<MaskPattern> m_stack; - - //... cached secondary data: - std::vector<bool> m_masked; }; #endif // BORNAGAIN_DEVICE_MASK_MASKSTACK_H -- GitLab