From 80dd5d83f81420da4cbdd22f5193c87ade77ea49 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 18 Jun 2025 15:25:09 -0400 Subject: [PATCH] feat(composition): added contains method --- src/composition/private/composition.cpp | 13 +++++++++++++ src/composition/public/composition.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/composition/private/composition.cpp b/src/composition/private/composition.cpp index e7b42b5..bdf956c 100644 --- a/src/composition/private/composition.cpp +++ b/src/composition/private/composition.cpp @@ -639,6 +639,19 @@ namespace serif::composition { return m_compositions.count(symbol) > 0; } + bool Composition::contains(const serif::atomic::Species &isotope) const { + // Check if the isotope's symbol is in the composition + if (!m_finalized) { + LOG_ERROR(m_logger, "Composition has not been finalized."); + throw std::runtime_error("Composition has not been finalized (Consider running .finalize())."); + } + const auto symbol = static_cast(isotope.name()); + if (m_compositions.contains(symbol)) { + return true; + } + return false; + } + /// OVERLOADS Composition Composition::operator+(const Composition& other) const { diff --git a/src/composition/public/composition.h b/src/composition/public/composition.h index 8e26c96..27c9911 100644 --- a/src/composition/public/composition.h +++ b/src/composition/public/composition.h @@ -473,6 +473,8 @@ namespace serif::composition { */ bool hasSymbol(const std::string& symbol) const; + bool contains(const serif::atomic::Species& isotope) const; + /** * @brief Sets the composition mode. * @param massFracMode True if mass fraction mode, false if number fraction mode.