perf(Composition): improved static correctness

This commit is contained in:
2025-10-22 10:35:49 -04:00
parent 19c78ff241
commit b8dc4ad8a5
2 changed files with 10 additions and 10 deletions

View File

@@ -312,14 +312,14 @@ namespace fourdst::composition {
* @param fractions The fractions to check. * @param fractions The fractions to check.
* @return True if the fractions are valid, false otherwise. * @return True if the fractions are valid, false otherwise.
*/ */
[[nodiscard]] bool isValidComposition(const std::vector<double>& fractions) const; [[nodiscard]] static bool isValidComposition(const std::vector<double>& fractions) ;
/** /**
* @brief Validates the given fractions, throwing an exception on failure. * @brief Validates the given fractions, throwing an exception on failure.
* @param fractions The fractions to validate. * @param fractions The fractions to validate.
* @throws exceptions::InvalidCompositionError if the fractions are invalid. * @throws exceptions::InvalidCompositionError if the fractions are invalid.
*/ */
void validateComposition(const std::vector<double>& fractions) const; static void validateComposition(const std::vector<double>& fractions) ;
/** /**
* @brief Finalizes the composition in mass fraction mode. * @brief Finalizes the composition in mass fraction mode.

View File

@@ -321,14 +321,14 @@ namespace fourdst::composition {
return atomic::species.contains(symbol); return atomic::species.contains(symbol);
} }
void Composition::validateComposition(const std::vector<double>& fractions) const { void Composition::validateComposition(const std::vector<double>& fractions) {
if (!isValidComposition(fractions)) { if (!isValidComposition(fractions)) {
LOG_ERROR(getLogger(), "Invalid composition."); LOG_ERROR(getLogger(), "Invalid composition.");
throw exceptions::InvalidCompositionError("Invalid composition."); throw exceptions::InvalidCompositionError("Invalid composition.");
} }
} }
bool Composition::isValidComposition(const std::vector<double>& fractions) const { bool Composition::isValidComposition(const std::vector<double>& fractions) {
const double sum = std::accumulate(fractions.begin(), fractions.end(), 0.0); const double sum = std::accumulate(fractions.begin(), fractions.end(), 0.0);
if (sum < 0.999999 || sum > 1.000001) { if (sum < 0.999999 || sum > 1.000001) {
LOG_ERROR(getLogger(), "The sum of fractions must be equal to 1 (expected 1, got {}).", sum); 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<std::string> symbols; std::vector<std::string> symbols;
symbols.reserve(species.size()); 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); return setNumberFraction(symbols, number_fractions);
} }
@@ -1024,12 +1024,12 @@ namespace fourdst::composition {
} }
bool Composition::hasSpecies(const fourdst::atomic::Species &species) const { bool Composition::hasSpecies(const fourdst::atomic::Species &species) const {
for (const auto &entry: m_compositions | std::views::values) { return std::ranges::any_of(
if (entry.isotope() == species) { m_compositions | std::views::values,
return true; [&species](const CompositionEntry &entry) {
return entry.isotope() == species;
} }
} );
return false;
} }
bool Composition::contains( bool Composition::contains(