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.
* @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.
* @param fractions The fractions to validate.
* @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.

View File

@@ -321,14 +321,14 @@ namespace fourdst::composition {
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)) {
LOG_ERROR(getLogger(), "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);
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<std::string> 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(