From 463dc58bead7bfe8cf8d5b95ccbebcf8a097f42f Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 24 Sep 2023 14:38:38 +0100 Subject: Single thrower of IncorrectElementName --- slicer/slicer/modelPartsTypes.cpp | 6 ++++++ slicer/slicer/modelPartsTypes.h | 3 +++ slicer/slicer/modelPartsTypes.impl.h | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/slicer/slicer/modelPartsTypes.cpp b/slicer/slicer/modelPartsTypes.cpp index ffaec04..04fc859 100644 --- a/slicer/slicer/modelPartsTypes.cpp +++ b/slicer/slicer/modelPartsTypes.cpp @@ -357,6 +357,12 @@ namespace Slicer { const ModelPartType ModelPartForDictionaryBase::type = ModelPartType::Dictionary; + void + ModelPartForDictionaryBase::throwIncorrectElementName(const std::string_view name) + { + throw IncorrectElementName(std::string {name}); + } + // Streams ModelPartType ModelPartForStreamBase::GetType() const diff --git a/slicer/slicer/modelPartsTypes.h b/slicer/slicer/modelPartsTypes.h index f581c49..c81e014 100644 --- a/slicer/slicer/modelPartsTypes.h +++ b/slicer/slicer/modelPartsTypes.h @@ -297,6 +297,9 @@ namespace Slicer { [[nodiscard]] bool HasValue() const override; [[nodiscard]] ModelPartType GetType() const override; static const ModelPartType type; + + protected: + [[noreturn]] static void throwIncorrectElementName(const std::string_view); }; template class ModelPartForDictionary : public ModelPartForDictionaryBase, protected ModelPartModel { diff --git a/slicer/slicer/modelPartsTypes.impl.h b/slicer/slicer/modelPartsTypes.impl.h index 60f221d..692437e 100644 --- a/slicer/slicer/modelPartsTypes.impl.h +++ b/slicer/slicer/modelPartsTypes.impl.h @@ -681,8 +681,8 @@ namespace Slicer { const SubPartHandler & ch, std::string_view name, const HookFilter &, MatchCase matchCase) { BOOST_ASSERT(this->Model); - if (!optionalCaseEq(name, pairName, matchCase == MatchCase::Yes)) { - throw IncorrectElementName(std::string {name}); + if (!optionalCaseEq(name, pairName, matchCase == MatchCase::Yes)) [[unlikely]] { + ModelPartForDictionaryBase::throwIncorrectElementName(name); } ch(ModelPartForDictionaryElementInserter(this->Model), emptyMetadata); return true; -- cgit v1.2.3