From 89fe063b02a85dfbc7a45025fabc2ad3f332672d Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 17 Mar 2022 23:32:22 +0100 Subject: [PATCH] patterns: Fixed struct members that overlap with [[no_unique_address]] members not being highlighted --- .../pattern_language/patterns/pattern_struct.hpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/libimhex/include/hex/pattern_language/patterns/pattern_struct.hpp b/lib/libimhex/include/hex/pattern_language/patterns/pattern_struct.hpp index 53cbb03a6..85cb47001 100644 --- a/lib/libimhex/include/hex/pattern_language/patterns/pattern_struct.hpp +++ b/lib/libimhex/include/hex/pattern_language/patterns/pattern_struct.hpp @@ -131,14 +131,15 @@ namespace hex::pl { [[nodiscard]] const Pattern *getPattern(u64 offset) const override { if (this->isHidden()) return nullptr; - auto iter = std::find_if(this->m_members.begin(), this->m_members.end(), [offset](const std::shared_ptr &pattern) { - return offset >= pattern->getOffset() && offset < (pattern->getOffset() + pattern->getSize()); - }); + for (auto member : this->m_members) { + if (offset >= member->getOffset() && offset < (member->getOffset() + member->getSize())) { + auto candidate = member->getPattern(offset); + if (candidate != nullptr) + return candidate; + } + } - if (iter == this->m_members.end()) - return nullptr; - else - return (*iter)->getPattern(offset); + return nullptr; } void setEndian(std::endian endian) override {