From b8dc4ad8a51655a51a1fa134274c3a1cc245b508 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 22 Oct 2025 10:35:49 -0400 Subject: [PATCH] perf(Composition): improved static correctness --- .../include/fourdst/composition/composition.h | 4 ++-- src/composition/lib/composition.cpp | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/composition/include/fourdst/composition/composition.h b/src/composition/include/fourdst/composition/composition.h index 23fc006..11905a6 100644 --- a/src/composition/include/fourdst/composition/composition.h +++ b/src/composition/include/fourdst/composition/composition.h @@ -312,14 +312,14 @@ namespace fourdst::composition { * @param fractions The fractions to check. * @return True if the fractions are valid, false otherwise. */ - [[nodiscard]] bool isValidComposition(const std::vector& fractions) const; + [[nodiscard]] static bool isValidComposition(const std::vector& fractions) ; /** * @brief Validates the given fractions, throwing an exception on failure. * @param fractions The fractions to validate. * @throws exceptions::InvalidCompositionError if the fractions are invalid. */ - void validateComposition(const std::vector& fractions) const; + static void validateComposition(const std::vector& fractions) ; /** * @brief Finalizes the composition in mass fraction mode. diff --git a/src/composition/lib/composition.cpp b/src/composition/lib/composition.cpp index fc92d3a..2a0a960 100644 --- a/src/composition/lib/composition.cpp +++ b/src/composition/lib/composition.cpp @@ -321,14 +321,14 @@ namespace fourdst::composition { return atomic::species.contains(symbol); } - void Composition::validateComposition(const std::vector& fractions) const { + void Composition::validateComposition(const std::vector& fractions) { if (!isValidComposition(fractions)) { LOG_ERROR(getLogger(), "Invalid composition."); throw exceptions::InvalidCompositionError("Invalid composition."); } } - bool Composition::isValidComposition(const std::vector& fractions) const { + bool Composition::isValidComposition(const std::vector& fractions) { const double sum = std::accumulate(fractions.begin(), fractions.end(), 0.0); if (sum < 0.999999 || sum > 1.000001) { LOG_ERROR(getLogger(), "The sum of fractions must be equal to 1 (expected 1, got {}).", sum); @@ -435,7 +435,7 @@ namespace fourdst::composition { ) { std::vector symbols; symbols.reserve(species.size()); - for(const auto& s : species) symbols.push_back(std::string(s.name())); + for(const auto& s : species) symbols.emplace_back(s.name()); return setNumberFraction(symbols, number_fractions); } @@ -1024,12 +1024,12 @@ namespace fourdst::composition { } bool Composition::hasSpecies(const fourdst::atomic::Species &species) const { - for (const auto &entry: m_compositions | std::views::values) { - if (entry.isotope() == species) { - return true; + return std::ranges::any_of( + m_compositions | std::views::values, + [&species](const CompositionEntry &entry) { + return entry.isotope() == species; } - } - return false; + ); } bool Composition::contains(