Add option to specify synonyms for Factory model names
This commit is contained in:
parent
04cac2b277
commit
c28ca48cf8
3 changed files with 23 additions and 7 deletions
|
|
@ -13,6 +13,7 @@
|
|||
#include <mutex>
|
||||
#include <unordered_map>
|
||||
#include "cantera/base/ctexceptions.h"
|
||||
#include "cantera/base/global.h"
|
||||
|
||||
namespace Cantera
|
||||
{
|
||||
|
|
@ -72,11 +73,19 @@ public:
|
|||
|
||||
//! Create an object using the object construction function corresponding to
|
||||
//! "name" and the provided constructor arguments
|
||||
T* create(const std::string& name, Args... args) {
|
||||
T* create(std::string name, Args... args) {
|
||||
try {
|
||||
return m_creators.at(name)(args...);
|
||||
} catch (std::out_of_range&) {
|
||||
throw CanteraError("Factory::create", "No such type: '{}'", name);
|
||||
if (m_synonyms.find(name) != m_synonyms.end()) {
|
||||
return m_creators.at(m_synonyms.at(name))(args...);
|
||||
} else if (m_deprecated_names.find(name) != m_deprecated_names.end()) {
|
||||
warn_deprecated(name,
|
||||
fmt::format("Use '{}' instead.", m_deprecated_names.at(name)));
|
||||
return m_creators.at(m_deprecated_names.at(name))(args...);
|
||||
} else {
|
||||
throw CanteraError("Factory::create", "No such type: '{}'", name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -87,6 +96,13 @@ public:
|
|||
|
||||
protected:
|
||||
std::unordered_map<std::string, std::function<T*(Args...)>> m_creators;
|
||||
|
||||
//! Map of synonyms to canonical names
|
||||
std::unordered_map<std::string, std::string> m_synonyms;
|
||||
|
||||
//! Map of deprecated synonyms to canonical names. Use of these names will
|
||||
//! show a deprecation warning.
|
||||
std::unordered_map<std::string, std::string> m_deprecated_names;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ ThermoFactory::ThermoFactory()
|
|||
reg("DebyeHuckel", []() { return new DebyeHuckel(); });
|
||||
reg("IdealMolalSolution", []() { return new IdealMolalSoln(); });
|
||||
reg("IdealGasVPSS", []() { return new IdealSolnGasVPSS(); });
|
||||
reg("IdealSolnVPSS", []() { return new IdealSolnGasVPSS(); });
|
||||
m_synonyms["IdealGasVPSS"] = "IdealSolnVPSS";
|
||||
reg("MineralEQ3", []() { return new MineralEQ3(); });
|
||||
reg("MetalSHEelectrons", []() { return new MetalSHEelectrons(); });
|
||||
reg("Margules", []() { return new MargulesVPSSTP(); });
|
||||
|
|
@ -87,7 +87,7 @@ ThermoFactory::ThermoFactory()
|
|||
reg("MolarityIonicVPSSTP", []() { return new MolarityIonicVPSSTP(); });
|
||||
reg("Redlich-Kister", []() { return new RedlichKisterVPSSTP(); });
|
||||
reg("RedlichKwong", []() { return new RedlichKwongMFTP(); });
|
||||
reg("RedlichKwongMFTP", []() { return new RedlichKwongMFTP(); });
|
||||
m_synonyms["RedlichKwongMFTP"] = "RedlichKwong";
|
||||
reg("MaskellSolidSolnPhase", []() { return new MaskellSolidSolnPhase(); });
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,11 +45,11 @@ public:
|
|||
TransportFactory::TransportFactory()
|
||||
{
|
||||
reg("", []() { return new Transport(); });
|
||||
reg("None", []() { return new Transport(); });
|
||||
m_synonyms["None"] = "";
|
||||
reg("Mix", []() { return new MixTransport(); });
|
||||
reg("Multi", []() { return new MultiTransport(); });
|
||||
reg("CK_Mix", []() { return new MixTransport(); });
|
||||
reg("CK_Multi", []() { return new MultiTransport(); });
|
||||
m_synonyms["CK_Mix"] = "Mix";
|
||||
m_synonyms["CK_Multi"] = "Multi";
|
||||
reg("HighP", []() { return new HighPressureGasTransport(); });
|
||||
m_CK_mode["CK_Mix"] = true;
|
||||
m_CK_mode["CK_Multi"] = true;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue