Skip to content
Snippets Groups Projects
Unverified Commit 97be8fd7 authored by Dmitri Naumov's avatar Dmitri Naumov Committed by GitHub
Browse files

Merge pull request #2531 from renchao-lu/checkUniquenessOfComponentsAndPhases

[MatL/MPL] Check uniqueness of components and phases
parents 7bb59c5e e83d5e1c
No related branches found
No related tags found
No related merge requests found
...@@ -72,10 +72,6 @@ std::vector<std::unique_ptr<Component>> createComponents( ...@@ -72,10 +72,6 @@ std::vector<std::unique_ptr<Component>> createComponents(
} }
std::vector<std::unique_ptr<Component>> components; std::vector<std::unique_ptr<Component>> components;
// Collect component's names to avoid duplicate components.
std::set<std::string> component_names;
for ( for (
auto const& component_config : auto const& component_config :
//! \ogs_file_param{prj__media__medium__phases__phase__components__component} //! \ogs_file_param{prj__media__medium__phases__phase__components__component}
...@@ -83,10 +79,11 @@ std::vector<std::unique_ptr<Component>> createComponents( ...@@ -83,10 +79,11 @@ std::vector<std::unique_ptr<Component>> createComponents(
{ {
auto component = createComponent(component_config); auto component = createComponent(component_config);
bool new_insertion = false; if (std::find_if(components.begin(),
std::tie(std::ignore, new_insertion) = components.end(),
component_names.insert(component->name()); [component_name = component->name()](auto const& c) {
if (!new_insertion) return c->name() == component_name;
}) != components.end())
{ {
OGS_FATAL("Found duplicates with the same component name tag '%s'.", OGS_FATAL("Found duplicates with the same component name tag '%s'.",
component->name().c_str()); component->name().c_str());
...@@ -94,6 +91,7 @@ std::vector<std::unique_ptr<Component>> createComponents( ...@@ -94,6 +91,7 @@ std::vector<std::unique_ptr<Component>> createComponents(
components.push_back(std::move(component)); components.push_back(std::move(component));
} }
return components; return components;
} }
} // namespace MaterialPropertyLib } // namespace MaterialPropertyLib
...@@ -89,17 +89,17 @@ std::vector<std::unique_ptr<Phase>> createPhases( ...@@ -89,17 +89,17 @@ std::vector<std::unique_ptr<Phase>> createPhases(
std::vector<std::unique_ptr<Phase>> phases; std::vector<std::unique_ptr<Phase>> phases;
std::set<std::string> phase_names; for (auto phase_config :
//! \ogs_file_param{prj__media__medium__phases__phase}
//! \ogs_file_param{prj__media__medium__phases__phase} config->getConfigSubtreeList("phase"))
for (auto phase_config : config->getConfigSubtreeList("phase"))
{ {
auto phase = createPhase(phase_config); auto phase = createPhase(phase_config);
bool new_insertion = false;
std::tie(std::ignore, new_insertion) =
phase_names.insert(phase->name());
if (!new_insertion) if (std::find_if(phases.begin(),
phases.end(),
[phase_name = phase->name()](auto const& p) {
return p->name() == phase_name;
}) != phases.end())
{ {
OGS_FATAL("Found duplicates with the same phase name tag '%s'.", OGS_FATAL("Found duplicates with the same phase name tag '%s'.",
phase->name().c_str()); phase->name().c_str());
...@@ -107,6 +107,7 @@ std::vector<std::unique_ptr<Phase>> createPhases( ...@@ -107,6 +107,7 @@ std::vector<std::unique_ptr<Phase>> createPhases(
phases.push_back(std::move(phase)); phases.push_back(std::move(phase));
} }
return phases; return phases;
} }
} // namespace MaterialPropertyLib } // namespace MaterialPropertyLib
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment