\doxysection{composition.\+h} \hypertarget{composition_8h_source}{}\label{composition_8h_source}\index{src/composition/include/fourdst/composition/composition.h@{src/composition/include/fourdst/composition/composition.h}} \mbox{\hyperlink{composition_8h}{Go to the documentation of this file.}} \begin{DoxyCode}{0} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00001}00001\ \textcolor{comment}{/*\ ***********************************************************************}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00002}00002\ \textcolor{comment}{//}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00003}00003\ \textcolor{comment}{//\ \ \ Copyright\ (C)\ 2025\ -\/-\/\ The\ 4D-\/STAR\ Collaboration}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00004}00004\ \textcolor{comment}{//\ \ \ File\ Author:\ Emily\ Boudreaux}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00005}00005\ \textcolor{comment}{//\ \ \ Last\ Modified:\ March\ 26,\ 2025}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00006}00006\ \textcolor{comment}{//}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00007}00007\ \textcolor{comment}{//\ \ \ 4DSSE\ is\ free\ software;\ you\ can\ use\ it\ and/or\ modify}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00008}00008\ \textcolor{comment}{//\ \ \ it\ under\ the\ terms\ and\ restrictions\ the\ GNU\ General\ Library\ Public}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00009}00009\ \textcolor{comment}{//\ \ \ License\ version\ 3\ (GPLv3)\ as\ published\ by\ the\ Free\ Software\ Foundation.}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00010}00010\ \textcolor{comment}{//}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00011}00011\ \textcolor{comment}{//\ \ \ 4DSSE\ is\ distributed\ in\ the\ hope\ that\ it\ will\ be\ useful,}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00012}00012\ \textcolor{comment}{//\ \ \ but\ WITHOUT\ ANY\ WARRANTY;\ without\ even\ the\ implied\ warranty\ of}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00013}00013\ \textcolor{comment}{//\ \ \ MERCHANTABILITY\ or\ FITNESS\ FOR\ A\ PARTICULAR\ PURPOSE.}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00014}00014\ \textcolor{comment}{//\ \ \ See\ the\ GNU\ Library\ General\ Public\ License\ for\ more\ details.}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00015}00015\ \textcolor{comment}{//}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00016}00016\ \textcolor{comment}{//\ \ \ You\ should\ have\ received\ a\ copy\ of\ the\ GNU\ Library\ General\ Public\ License}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00017}00017\ \textcolor{comment}{//\ \ \ along\ with\ this\ software;\ if\ not,\ write\ to\ the\ Free\ Software}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00018}00018\ \textcolor{comment}{//\ \ \ Foundation,\ Inc.,\ 59\ Temple\ Place,\ Suite\ 330,\ Boston,\ MA\ 02111-\/1307\ USA}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00019}00019\ \textcolor{comment}{//}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00020}00020\ \textcolor{comment}{//\ ***********************************************************************\ */}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00021}00021\ \textcolor{preprocessor}{\#pragma\ once}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00022}00022\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00023}00023\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00024}00024\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00025}00025\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00026}00026\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00027}00027\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00028}00028\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00029}00029\ \textcolor{preprocessor}{\#include\ }} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00030}00030\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00031}00031\ \textcolor{preprocessor}{\#include\ "{}fourdst/config/config.h"{}}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00032}00032\ \textcolor{preprocessor}{\#include\ "{}fourdst/logging/logging.h"{}}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00033}00033\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{composition__abstract_8h}{fourdst/composition/composition\_abstract.h}}"{}}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00034}00034\ \textcolor{preprocessor}{\#include\ "{}\mbox{\hyperlink{atomic_species_8h}{fourdst/atomic/atomicSpecies.h}}"{}}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00035}00035\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00036}00036\ \textcolor{keyword}{namespace\ }\mbox{\hyperlink{namespacefourdst_1_1composition}{fourdst::composition}}\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00046}\mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition}{00046}}\ \ \ \ \ \textcolor{keyword}{struct\ }\mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition}{CanonicalComposition}}\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00047}\mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition_abe5b01574242f8eaabd00c3d653291f7}{00047}}\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition_abe5b01574242f8eaabd00c3d653291f7}{X}}\ =\ 0.0;\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00048}\mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition_a93927bfccc5d2b3906565d092ed4f7f4}{00048}}\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition_a93927bfccc5d2b3906565d092ed4f7f4}{Y}}\ =\ 0.0;\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00049}\mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition_ae1981f5ddd36abd17a4a69fa1f43de18}{00049}}\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition_ae1981f5ddd36abd17a4a69fa1f43de18}{Z}}\ =\ 0.0;\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00050}00050\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00057}\mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition_a6e447cb601af6bcbd09e290aef759672}{00057}}\ \ \ \ \ \ \ \ \ \textcolor{keyword}{friend}\ std::ostream\&\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition_a6e447cb601af6bcbd09e290aef759672}{operator<<}}(std::ostream\&\ os,\ \textcolor{keyword}{const}\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition}{CanonicalComposition}}\&\ \mbox{\hyperlink{namespacefourdst_1_1composition}{composition}})\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00058}00058\ \ \ \ \ \ \ \ \ \ \ \ \ os\ <<\ \textcolor{stringliteral}{"{}"{}};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00062}00062\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ os;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00063}00063\ \ \ \ \ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00064}00064\ \ \ \ \ \};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00065}00065\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00098}00098\ \ \ \ \ \textcolor{comment}{//\ ReSharper\ disable\ once\ CppClassCanBeFinal}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00099}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition}{00099}}\ \ \ \ \ \textcolor{keyword}{class\ }\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}\ final\ :\ \textcolor{keyword}{public}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_abstract}{CompositionAbstract}}\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00100}00100\ \ \ \ \ \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00101}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a7eace279c95ac7cccb05434320203343}{00101}}\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a7eace279c95ac7cccb05434320203343}{iterator}}\ =\ \mbox{\hyperlink{classfourdst_1_1composition_1_1detail_1_1_composition_iterator}{detail::CompositionIterator}};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00102}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a38bbc17eb83b6155163382b27b3818e6}{00102}}\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a38bbc17eb83b6155163382b27b3818e6}{const\_iterator}}\ =\ \mbox{\hyperlink{classfourdst_1_1composition_1_1detail_1_1_composition_iterator}{detail::CompositionIterator}};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00103}00103\ \ \ \ \ \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00111}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache}{00111}}\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache}{CompositionCache}}\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00112}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a459e01b94eb0e78dd95bb6932a967f13}{00112}}\ \ \ \ \ \ \ \ \ \ \ \ \ std::optional\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a459e01b94eb0e78dd95bb6932a967f13}{canonicalComp}};\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00113}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_add5ce97ae6a1796c5f6488bfa1555be6}{00113}}\ \ \ \ \ \ \ \ \ \ \ \ \ std::optional>\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_add5ce97ae6a1796c5f6488bfa1555be6}{massFractions}};\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00114}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a41ce9d6b4a0f00030e3027b23c0269fb}{00114}}\ \ \ \ \ \ \ \ \ \ \ \ \ std::optional>\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a41ce9d6b4a0f00030e3027b23c0269fb}{numberFractions}};\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00115}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ab74c9cd92ba8aaf5f95c8ca5284206a6}{00115}}\ \ \ \ \ \ \ \ \ \ \ \ \ std::optional>\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ab74c9cd92ba8aaf5f95c8ca5284206a6}{molarAbundances}};\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00116}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a14761ff2df5423884330e423ec38e98c}{00116}}\ \ \ \ \ \ \ \ \ \ \ \ \ std::optional>\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a14761ff2df5423884330e423ec38e98c}{sortedSpecies}};\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00117}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_abe45010a5104562d3ebecc77393c04ce}{00117}}\ \ \ \ \ \ \ \ \ \ \ \ \ std::optional>\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_abe45010a5104562d3ebecc77393c04ce}{sortedSymbols}};\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00118}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ae844e5a1d2b85c7cfee50157ccf189ce}{00118}}\ \ \ \ \ \ \ \ \ \ \ \ \ std::optional\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ae844e5a1d2b85c7cfee50157ccf189ce}{Ye}};\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00119}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a8580c92659fff18f7453496939ecd427}{00119}}\ \ \ \ \ \ \ \ \ \ \ \ \ std::optional\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a8580c92659fff18f7453496939ecd427}{hash}};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00120}00120\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00124}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ac8b576c3b48c4cedda6e9e2790072b0d}{00124}}\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ac8b576c3b48c4cedda6e9e2790072b0d}{clear}}()\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00125}00125\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a459e01b94eb0e78dd95bb6932a967f13}{canonicalComp}}\ =\ std::nullopt;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00126}00126\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_add5ce97ae6a1796c5f6488bfa1555be6}{massFractions}}\ =\ std::nullopt;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00127}00127\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a41ce9d6b4a0f00030e3027b23c0269fb}{numberFractions}}\ =\ std::nullopt;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00128}00128\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ab74c9cd92ba8aaf5f95c8ca5284206a6}{molarAbundances}}\ =\ std::nullopt;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00129}00129\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_abe45010a5104562d3ebecc77393c04ce}{sortedSymbols}}\ =\ std::nullopt;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00130}00130\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a14761ff2df5423884330e423ec38e98c}{sortedSpecies}}\ =\ std::nullopt;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00131}00131\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ae844e5a1d2b85c7cfee50157ccf189ce}{Ye}}\ =\ std::nullopt;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00132}00132\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a8580c92659fff18f7453496939ecd427}{hash}}\ =\ std::nullopt;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00133}00133\ \ \ \ \ \ \ \ \ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00134}00134\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00139}\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_af291583560120bb53c4546a598666477}{00139}}\ \ \ \ \ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_af291583560120bb53c4546a598666477}{is\_clear}}()\textcolor{keyword}{\ const\ }\{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00140}00140\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ !\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a459e01b94eb0e78dd95bb6932a967f13}{canonicalComp}}.has\_value()\ \&\&\ !\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_add5ce97ae6a1796c5f6488bfa1555be6}{massFractions}}.has\_value()\ \&\&} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00141}00141\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ !\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a41ce9d6b4a0f00030e3027b23c0269fb}{numberFractions}}.has\_value()\ \&\&\ !\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ab74c9cd92ba8aaf5f95c8ca5284206a6}{molarAbundances}}.has\_value()\ \&\&\ !\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_abe45010a5104562d3ebecc77393c04ce}{sortedSymbols}}.has\_value()\ \&\&} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00142}00142\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ !\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_ae844e5a1d2b85c7cfee50157ccf189ce}{Ye}}.has\_value()\ \&\&\ !\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a14761ff2df5423884330e423ec38e98c}{sortedSpecies}}.has\_value()\ \&\&\ !\mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache_a8580c92659fff18f7453496939ecd427}{hash}}.has\_value();} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00143}00143\ \ \ \ \ \ \ \ \ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00144}00144\ \ \ \ \ \ \ \ \ \};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00145}00145\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00146}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aeef903d5b7d02467c6462d183ac47db8}{00146}}\ \ \ \ \ \ \ \ \ \textcolor{keyword}{enum\ class}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aeef903d5b7d02467c6462d183ac47db8}{SpeciesIndexLookupError}}\ :\ uint8\_t\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00147}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aeef903d5b7d02467c6462d183ac47db8ac7cc0e85688b85571f30fd16a46d9891}{00147}}\ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aeef903d5b7d02467c6462d183ac47db8ac7cc0e85688b85571f30fd16a46d9891}{NO\_REGISTERED\_SPECIES}},} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00148}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aeef903d5b7d02467c6462d183ac47db8a3659baf2b06bba6c02bad8316d517761}{00148}}\ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aeef903d5b7d02467c6462d183ac47db8a3659baf2b06bba6c02bad8316d517761}{SPECIES\_NOT\_FOUND}}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00149}00149\ \ \ \ \ \ \ \ \ \};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00150}00150\ \ \ \ \ \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00156}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a46a706f9e4c06a45b45ae3dffdde5e9e}{00156}}\ \ \ \ \ \ \ \ \ \textcolor{keyword}{static}\ quill::Logger*\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a46a706f9e4c06a45b45ae3dffdde5e9e}{getLogger}}()\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00157}00157\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{static}\ quill::Logger*\ logger\ =\ logging::LogManager::getInstance().getLogger(\textcolor{stringliteral}{"{}log"{}});} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00158}00158\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ logger;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00159}00159\ \ \ \ \ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00160}00160\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00161}00161\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ std::set\ m\_registeredSpecies;\ ///<\ Set\ of\ registered\ species\ in\ the\ composition.}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00162}00162\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ std::map\ m\_molarAbundances;\ ///<\ Map\ of\ species\ to\ their\ molar\ abundances.}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00163}00163\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00164}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aa0edc4976ccd24f2d9f6ad730f058b27}{00164}}\ \ \ \ \ \ \ \ \ std::vector\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aa0edc4976ccd24f2d9f6ad730f058b27}{m\_species}};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00165}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ab2faabe2e64c587bda8106687f752479}{00165}}\ \ \ \ \ \ \ \ \ std::vector\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ab2faabe2e64c587bda8106687f752479}{m\_molarAbundances}};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00166}00166\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00167}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a02cd9d9608da082a200fdfa86d14bf5d}{00167}}\ \ \ \ \ \ \ \ \ \textcolor{keyword}{mutable}\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_composition_1_1_composition_cache}{CompositionCache}}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a02cd9d9608da082a200fdfa86d14bf5d}{m\_cache}};\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00168}00168\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00169}00169\ \ \ \ \ \textcolor{keyword}{private}:} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00170}00170\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::expected\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aded88f0ad4a97eaae1e356fa8428cab5}{findSpeciesIndex}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{structfourdst_1_1atomic_1_1_species}{atomic::Species}}\ \&species)\ \textcolor{keyword}{const}\ \textcolor{keyword}{noexcept};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00171}00171\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keyword}{static}\ std::vector\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a3f013e33b8978baf81447e5bd177f38b}{symbolVectorToSpeciesVector}}(\textcolor{keyword}{const}\ std::vector\&\ symbols);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00172}00172\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00173}00173\ \ \ \ \ \textcolor{keyword}{public}:} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00179}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{00179}}\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}()\ =\ \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00180}00180\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00184}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a08c1d1fe9384c5255a6ba40e34b18315}{00184}}\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a08c1d1fe9384c5255a6ba40e34b18315}{\string~Composition}}()\ \textcolor{keyword}{override}\ =\ \textcolor{keywordflow}{default};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00185}00185\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00196}00196\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::vector\&\ symbols);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00197}00197\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00211}00211\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::vector\&\ species);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00212}00212\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00223}00223\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::set\&\ symbols);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00224}00224\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00238}00238\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::set\&\ species);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00239}00239\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00240}00240\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::unordered\_set\&\ symbols);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00241}00241\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::unordered\_set\&\ species);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00242}00242\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00258}00258\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::vector\&\ symbols,\ \textcolor{keyword}{const}\ std::vector\&\ molarAbundances);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00259}00259\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00274}00274\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::vector\&\ species,\ \textcolor{keyword}{const}\ std::vector\&\ molarAbundances);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00275}00275\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00291}00291\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::set\&\ symbols,\ \textcolor{keyword}{const}\ std::vector\&\ molarAbundances);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00292}00292\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00293}00293\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::unordered\_map\&\ symbolMolarAbundances);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00294}00294\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::map\&\ symbolMolarAbundances);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00295}00295\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00296}00296\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::unordered\_map\&\ speciesMolarAbundances);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00297}00297\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ std::map\&\ speciesMolarAbundances);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00298}00298\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00299}00299\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00304}00304\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}\&\ \mbox{\hyperlink{namespacefourdst_1_1composition}{composition}});} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00305}00305\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00306}00306\ \ \ \ \ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_abstract}{CompositionAbstract}}\&\ \mbox{\hyperlink{namespacefourdst_1_1composition}{composition}});} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00307}00307\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00313}00313\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}\&\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a4ec1e23cfecef764cb831171fed62fc2}{operator=}}(\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}\ \textcolor{keyword}{const}\&\ other);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00314}00314\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}\&\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a4ec1e23cfecef764cb831171fed62fc2}{operator=}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_abstract}{CompositionAbstract}}\&\ other);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00315}00315\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00330}00330\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a3ab4dcda0bfd1a35b169bcc57fe66725}{registerSymbol}}(\textcolor{keyword}{const}\ std::string\&\ symbol);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00331}00331\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00346}00346\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a3ab4dcda0bfd1a35b169bcc57fe66725}{registerSymbol}}(\textcolor{keyword}{const}\ std::vector\&\ symbols);} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00347}00347\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00370}00370\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a392a34c19f45d6c936cc7030e6cfaf3f}{registerSpecies}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{structfourdst_1_1atomic_1_1_species}{atomic::Species}}\&\ species)\ \textcolor{keyword}{noexcept};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00371}00371\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00372}00372\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00392}00392\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a392a34c19f45d6c936cc7030e6cfaf3f}{registerSpecies}}(\textcolor{keyword}{const}\ std::vector\&\ species)\ \textcolor{keyword}{noexcept};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00393}00393\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00399}00399\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a194f715788e7921bd611579440de2ecd}{contains}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{structfourdst_1_1atomic_1_1_species}{atomic::Species}}\&\ species)\ \textcolor{keyword}{const}\ \textcolor{keyword}{noexcept}\ \textcolor{keyword}{override};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00400}00400\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00407}00407\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a194f715788e7921bd611579440de2ecd}{contains}}(\textcolor{keyword}{const}\ std::string\&\ symbol)\ \textcolor{keyword}{const\ override};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00408}00408\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00413}00413\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{size\_t}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a9d177d36b728442bcbd8cb66712c7c75}{size}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00414}00414\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00431}00431\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a262d7133035d4e6f45daa81827abf5e7}{setMolarAbundance}}(} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00432}00432\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::\textcolor{keywordtype}{string}\&\ symbol,} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00433}00433\ \ \ \ \ \ \ \ \ \ \ \ \ const\ \textcolor{keywordtype}{double}\&\ molar\_abundance} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00434}00434\ \ \ \ \ \ \ \ \ );} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00435}00435\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00455}00455\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a262d7133035d4e6f45daa81827abf5e7}{setMolarAbundance}}(} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00456}00456\ \ \ \ \ \ \ \ \ \ \ \ \ const\ \mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species\&\ species,} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00457}00457\ \ \ \ \ \ \ \ \ \ \ \ \ const\ \textcolor{keywordtype}{double}\&\ molar\_abundance} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00458}00458\ \ \ \ \ \ \ \ \ );} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00459}00459\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00475}00475\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a262d7133035d4e6f45daa81827abf5e7}{setMolarAbundance}}(} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00476}00476\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::vector\&\ symbols,} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00477}00477\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::vector<\textcolor{keywordtype}{double}>\&\ molar\_abundances} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00478}00478\ \ \ \ \ \ \ \ \ );} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00479}00479\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00498}00498\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a262d7133035d4e6f45daa81827abf5e7}{setMolarAbundance}}(} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00499}00499\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::vector<\mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species>\&\ species,} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00500}00500\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::vector<\textcolor{keywordtype}{double}>\&\ molar\_abundances} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00501}00501\ \ \ \ \ \ \ \ \ );} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00502}00502\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00519}00519\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a262d7133035d4e6f45daa81827abf5e7}{setMolarAbundance}}(} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00520}00520\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::set\&\ symbols,} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00521}00521\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::vector<\textcolor{keywordtype}{double}>\&\ molar\_abundances} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00522}00522\ \ \ \ \ \ \ \ \ );} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00523}00523\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00543}00543\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a262d7133035d4e6f45daa81827abf5e7}{setMolarAbundance}}(} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00544}00544\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::set<\mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species>\&\ species,} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00545}00545\ \ \ \ \ \ \ \ \ \ \ \ \ const\ std::vector<\textcolor{keywordtype}{double}>\&\ molar\_abundances} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00546}00546\ \ \ \ \ \ \ \ \ );} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00547}00547\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00556}00556\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::set\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a3ae885c28580ae15be8c16614bef3b0e}{getRegisteredSymbols}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00557}00557\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00566}00566\ \ \ \ \ \ \ \ \ [[nodiscard]]\ const\ std::vector<\mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species>\ \&\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_af4b01ec4140e278d92c18f139f69ab1f}{getRegisteredSpecies}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00567}00567\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00574}00574\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::unordered\_map<\mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species,\ \textcolor{keywordtype}{double}>\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a9ea2b673341fdc67afeb0f0517a54c8c}{getMassFraction}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00575}00575\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00584}00584\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a9ea2b673341fdc67afeb0f0517a54c8c}{getMassFraction}}(const\ std::\textcolor{keywordtype}{string}\&\ symbol)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00585}00585\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00603}00603\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a9ea2b673341fdc67afeb0f0517a54c8c}{getMassFraction}}(const\ \mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species\&\ species)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00604}00604\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00613}00613\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a34f71d4d8f0297c576fd62fabd490305}{getNumberFraction}}(const\ std::\textcolor{keywordtype}{string}\&\ symbol)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00614}00614\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00631}00631\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a34f71d4d8f0297c576fd62fabd490305}{getNumberFraction}}(const\ \mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species\&\ species)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00632}00632\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00639}00639\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::unordered\_map<\mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species,\ \textcolor{keywordtype}{double}>\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a34f71d4d8f0297c576fd62fabd490305}{getNumberFraction}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00640}00640\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00651}00651\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_add67a92d73e3a57a2bbdb52bc9ca3bfe}{getMolarAbundance}}(const\ std::\textcolor{keywordtype}{string}\&\ symbol)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00652}00652\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00662}00662\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_add67a92d73e3a57a2bbdb52bc9ca3bfe}{getMolarAbundance}}(const\ \mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species\&\ species)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00663}00663\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00677}00677\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_afbbb5e51ad5ae5c0fa6bc0094195aecd}{getMeanParticleMass}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00678}00678\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00692}00692\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{double}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a90fc71d1fe03017ee4c7a1cac69d24fb}{getElectronAbundance}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00693}00693\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00694}00694\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00709}00709\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \mbox{\hyperlink{structfourdst_1_1composition_1_1_canonical_composition}{CanonicalComposition}}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aac5b214a3d1278e127422224cb9cee50}{getCanonicalComposition}}()\ const;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00710}00710\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00716}00716\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::vector<\textcolor{keywordtype}{double}>\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_af4f44aaf8b7e0d63872a70b5e2131369}{getMassFractionVector}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00717}00717\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00723}00723\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::vector<\textcolor{keywordtype}{double}>\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ae4f72972cf4d1ff422d0790080e11473}{getNumberFractionVector}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00724}00724\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00730}00730\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::vector<\textcolor{keywordtype}{double}>\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_abcb391f5fca2b636127e48e681e4c3ee}{getMolarAbundanceVector}}()\ const\ noexcept\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00731}00731\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00740}00740\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{size\_t}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a0d94f62402bb90b5d12679faeaa8c5d7}{getSpeciesIndex}}(const\ std::\textcolor{keywordtype}{string}\&\ symbol)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00741}00741\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00749}00749\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \textcolor{keywordtype}{size\_t}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a0d94f62402bb90b5d12679faeaa8c5d7}{getSpeciesIndex}}(const\ \mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species\&\ species)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00750}00750\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00758}00758\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \mbox{\hyperlink{namespacefourdst_1_1atomic}{atomic}}::Species\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ae4f854ded38f5e6fcd157a74a57cbf0c}{getSpeciesAtIndex}}(\textcolor{keywordtype}{size\_t}\ index)\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00759}00759\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00760}00760\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::unique\_ptr<\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_abstract}{CompositionAbstract}}>\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a5a1f5661a329ec7bc8b7e118ff9d6c25}{clone}}()\ const\ override;} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00761}00761\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00768}00768\ \ \ \ \ \ \ \ \ friend\ std::ostream\&\ operator<<(std::ostream\&\ os,\ const\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a23b83b76ee025f6fc009184ee19bba88}{Composition}}\&\ \mbox{\hyperlink{namespacefourdst_1_1composition}{composition}});} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00769}00769\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00787}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a5bdb6ca3f734fae901b3d6179dbc17a0}{00787}}\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a7eace279c95ac7cccb05434320203343}{iterator}}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a5bdb6ca3f734fae901b3d6179dbc17a0}{begin}}()\textcolor{keyword}{\ override\ }\{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00788}00788\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \{\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aa0edc4976ccd24f2d9f6ad730f058b27}{m\_species}}.begin(),\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ab2faabe2e64c587bda8106687f752479}{m\_molarAbundances}}.begin()\};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00789}00789\ \ \ \ \ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00790}00790\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00808}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ae4600dc915645fc1b50c67e0218b794d}{00808}}\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a38bbc17eb83b6155163382b27b3818e6}{const\_iterator}}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ae4600dc915645fc1b50c67e0218b794d}{begin}}()\textcolor{keyword}{\ const\ override\ }\{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00809}00809\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \{\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aa0edc4976ccd24f2d9f6ad730f058b27}{m\_species}}.cbegin(),\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ab2faabe2e64c587bda8106687f752479}{m\_molarAbundances}}.cbegin()\};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00810}00810\ \ \ \ \ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00811}00811\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00829}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aaa89050308dda5e51d4b47d18d54cb58}{00829}}\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \mbox{\hyperlink{classfourdst_1_1composition_1_1detail_1_1_composition_iterator}{detail::CompositionIterator}}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aaa89050308dda5e51d4b47d18d54cb58}{end}}()\textcolor{keyword}{\ override\ }\{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00830}00830\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \{\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aa0edc4976ccd24f2d9f6ad730f058b27}{m\_species}}.end(),\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ab2faabe2e64c587bda8106687f752479}{m\_molarAbundances}}.end()\};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00831}00831\ \ \ \ \ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00832}00832\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00850}\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aabcde53961ecadfa823de5a766f0da84}{00850}}\ \ \ \ \ \ \ \ \ [[nodiscard]]\ \mbox{\hyperlink{classfourdst_1_1composition_1_1detail_1_1_composition_iterator}{detail::CompositionIterator}}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aabcde53961ecadfa823de5a766f0da84}{end}}()\textcolor{keyword}{\ const\ override\ }\{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00851}00851\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \{\mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_aa0edc4976ccd24f2d9f6ad730f058b27}{m\_species}}.cend(),\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_ab2faabe2e64c587bda8106687f752479}{m\_molarAbundances}}.cend()\};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00852}00852\ \ \ \ \ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00853}00853\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00854}00854\ \ \ \ \ \ \ \ \ [[nodiscard]]\ std::size\_t\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition_a5b3631fa33b0c6809ad652b0e31663a1}{hash}}()\ \textcolor{keyword}{const\ override};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00855}00855\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00856}00856\ \ \ \ \ \};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00857}00857\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00858}\mbox{\hyperlink{namespacefourdst_1_1composition_a06f5abc74104de40349e47ad367c402a}{00858}}\ \ \ \ \ \textcolor{keyword}{inline}\ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{namespacefourdst_1_1composition_a06f5abc74104de40349e47ad367c402a}{operator==}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition}{Composition}}\&\ a,\ \textcolor{keyword}{const}\ \mbox{\hyperlink{classfourdst_1_1composition_1_1_composition}{Composition}}\&\ b)\ \textcolor{keyword}{noexcept}\ \{} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00859}00859\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (a.size()\ !=\ b.size())\ \textcolor{keywordflow}{return}\ \textcolor{keyword}{false};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00860}00860\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00861}00861\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (a.getRegisteredSpecies()\ !=\ b.getRegisteredSpecies())} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00862}00862\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{false};} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00863}00863\ } \DoxyCodeLine{\Hypertarget{composition_8h_source_l00864}00864\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ a.hash()\ ==\ b.hash();} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00865}00865\ \ \ \ \ \}} \DoxyCodeLine{\Hypertarget{composition_8h_source_l00866}00866\ \};\ \textcolor{comment}{//\ namespace\ fourdst::composition}} \end{DoxyCode}