17#ifndef PFC_UI_FIELD_MODIFIER_REGISTRY_HPP
18#define PFC_UI_FIELD_MODIFIER_REGISTRY_HPP
33#include <unordered_map>
38using FieldModifier_p = std::unique_ptr<FieldModifier>;
51 using CreatorFunction = std::function<FieldModifier_p(
const json &)>;
80 auto it = modifiers.find(
type);
81 if (
it != modifiers.end()) {
82 return it->second(data);
93 std::unordered_map<std::string, CreatorFunction>
109 type, [](
const json &
params) -> std::unique_ptr<T> {
110 std::unique_ptr<T>
modifier = std::make_unique<T>();
165static FieldModifierInitializer
166 fieldModifierInitializer;
A registry for field modifiers used in the application.
Definition field_modifier_registry.hpp:49
static FieldModifierRegistry & get_instance()
Get the singleton instance of the FieldModifierRegistry.
Definition field_modifier_registry.hpp:57
FieldModifier_p create_modifier(const std::string &type, const json &data)
Create an instance of a field modifier based on its registered type.
Definition field_modifier_registry.hpp:79
void register_modifier(const std::string &type, CreatorFunction creator)
Register a field modifier with its creator function.
Definition field_modifier_registry.hpp:68
Constant value initial condition.
Helpful error message formatting for JSON configuration validation.
std::string format_unknown_modifier_error(const std::string &invalid_type, const std::string &context="field modifier")
Format error for unknown field modifier type.
Definition errors.hpp:289
Base class for initial conditions and boundary conditions.
void register_field_modifier(const std::string &type)
Register a field modifier type with the FieldModifierRegistry.
Definition field_modifier_registry.hpp:107
std::unique_ptr< FieldModifier > create_field_modifier(const std::string &type, const json ¶ms)
Create an instance of a field modifier based on its type.
Definition field_modifier_registry.hpp:128
Read initial conditions from binary file.
Fixed boundary condition with smooth transition.
JSON deserialization functions for OpenPFC types.
Moving boundary condition that tracks solidification front.
Random distribution of crystalline seeds initial condition.
Regular grid of crystalline seeds initial condition.
Single spherical crystalline seed initial condition.
Helper struct for registering field modifiers during static initialization.
Definition field_modifier_registry.hpp:143
FieldModifierInitializer()
Constructor for FieldModifierInitializer.
Definition field_modifier_registry.hpp:151
Represents the global simulation domain (the "world").
Definition world.hpp:91