diff --git a/Doxyfile b/Doxyfile index 46139e2..a0e3b28 100644 --- a/Doxyfile +++ b/Doxyfile @@ -48,7 +48,7 @@ PROJECT_NAME = fourdst::libcomposition # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = v2.0.3 +PROJECT_NUMBER = v2.0.4 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewers a diff --git a/meson.build b/meson.build index 998a410..9fa309e 100644 --- a/meson.build +++ b/meson.build @@ -18,7 +18,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # *********************************************************************** # -project('libcomposition', 'cpp', version: 'v2.0.3', default_options: ['cpp_std=c++23'], meson_version: '>=1.5.0') +project('libcomposition', 'cpp', version: 'v2.0.4', default_options: ['cpp_std=c++23'], meson_version: '>=1.5.0') # Add default visibility for all C++ targets add_project_arguments('-fvisibility=default', language: 'cpp') diff --git a/src/composition/include/fourdst/composition/composition.h b/src/composition/include/fourdst/composition/composition.h index be834a7..9cbf27d 100644 --- a/src/composition/include/fourdst/composition/composition.h +++ b/src/composition/include/fourdst/composition/composition.h @@ -94,7 +94,7 @@ namespace fourdst::composition { * */ // ReSharper disable once CppClassCanBeFinal - class Composition : public CompositionAbstract { + class Composition final : public CompositionAbstract { private: /** * @struct CompositionCache @@ -725,6 +725,8 @@ namespace fourdst::composition { */ [[nodiscard]] atomic::Species getSpeciesAtIndex(size_t index) const override; + [[nodiscard]] std::unique_ptr clone() const override; + /** * @brief Overloaded output stream operator for Composition. * @param os The output stream. @@ -750,7 +752,7 @@ namespace fourdst::composition { * for species are defined based on their atomic mass. When iterating over the molar abundance map, species will be * seen in order from lightest to heaviest. */ - auto begin() { + [[nodiscard]] std::map::iterator begin() override { return m_molarAbundances.begin(); } @@ -771,7 +773,7 @@ namespace fourdst::composition { * for species are defined based on their atomic mass. When iterating over the molar abundance map, species will be * seen in order from lightest to heaviest. */ - [[nodiscard]] auto begin() const { + [[nodiscard]] std::map::const_iterator begin() const override { return m_molarAbundances.cbegin(); } @@ -792,7 +794,7 @@ namespace fourdst::composition { * for species are defined based on their atomic mass. When iterating over the molar abundance map, species will be * seen in order from lightest to heaviest. */ - auto end() { + [[nodiscard]] std::map::iterator end() override { return m_molarAbundances.end(); } @@ -813,7 +815,7 @@ namespace fourdst::composition { * for species are defined based on their atomic mass. When iterating over the molar abundance map, species will be * seen in order from lightest to heaviest. */ - [[nodiscard]] auto end() const { + [[nodiscard]] std::map::const_iterator end() const override { return m_molarAbundances.cend(); } diff --git a/src/composition/include/fourdst/composition/composition_abstract.h b/src/composition/include/fourdst/composition/composition_abstract.h index 38caa73..173fd01 100644 --- a/src/composition/include/fourdst/composition/composition_abstract.h +++ b/src/composition/include/fourdst/composition/composition_abstract.h @@ -169,7 +169,14 @@ namespace fourdst::composition { * @param index The index of the species. * @return The atomic species at the specified index. */ - [[nodiscard]] virtual fourdst::atomic::Species getSpeciesAtIndex(size_t index) const = 0; + [[nodiscard]] virtual atomic::Species getSpeciesAtIndex(size_t index) const = 0; + + [[nodiscard]] virtual std::unique_ptr clone() const = 0; + + [[nodiscard]] virtual std::map::iterator begin() = 0; + [[nodiscard]] virtual std::map::iterator end() = 0; + [[nodiscard]] virtual std::map::const_iterator begin() const = 0; + [[nodiscard]] virtual std::map::const_iterator end() const = 0; }; // ReSharper disable once CppClassCanBeFinal @@ -197,6 +204,21 @@ namespace fourdst::composition { [[nodiscard]] size_t getSpeciesIndex(const std::string& symbol) const override { return m_base_composition->getSpeciesIndex(symbol); }; [[nodiscard]] size_t getSpeciesIndex(const atomic::Species& species) const override { return m_base_composition->getSpeciesIndex(species); }; [[nodiscard]] atomic::Species getSpeciesAtIndex(const size_t index) const override { return m_base_composition->getSpeciesAtIndex(index); }; + [[nodiscard]] std::unique_ptr clone() const override { + return std::make_unique(m_base_composition->clone()); + } + [[nodiscard]] std::map::iterator begin() override { + return m_base_composition->begin(); + } + [[nodiscard]] std::map::iterator end() override { + return m_base_composition->end(); + } + [[nodiscard]] std::map::const_iterator begin() const override { + return std::as_const(*m_base_composition).begin(); + } + [[nodiscard]] std::map::const_iterator end() const override { + return std::as_const(*m_base_composition).end(); + } private: std::unique_ptr m_base_composition; }; diff --git a/src/composition/lib/composition.cpp b/src/composition/lib/composition.cpp index b1e17fe..3f48c82 100644 --- a/src/composition/lib/composition.cpp +++ b/src/composition/lib/composition.cpp @@ -506,6 +506,10 @@ namespace fourdst::composition { return sortedSymbols.at(index); } + std::unique_ptr Composition::clone() const { + return std::make_unique(*this); + } + bool Composition::contains( const atomic::Species &species ) const noexcept {