13#include <nlohmann/json.hpp>
35 static std::map<std::string, std::string> r;
60 invariant(inserted,
"Conflicting primary_param for '" + strategy +
"': '" + it->second +
"' vs '" + param +
"'");
72 if (
auto it = r.find(strategy); it != r.end()) {
95 using Ptr = std::shared_ptr<Derived>;
139 registry()[name] = factory;
152 auto name = j.at(
"name").get<std::string>();
153 auto& reg = registry();
154 auto it = reg.find(name);
156 if (it == reg.end()) {
157 throw std::runtime_error(
"Unknown strategy: " + name);
160 return it->second(j);
164 static std::map<std::string, Factory>& registry() {
165 static std::map<std::string, Factory> r;
185#define PPFOREST2_REGISTER_STRATEGY(StrategyBase, name) \
186 inline static const bool registered_ = StrategyBase::register_strategy(name, from_json);
228#define PPFOREST2_REGISTER_PRIMARY_PARAM(strategy_name, param_name) \
229 inline static const bool registered_primary_param_ = \
230 ppforest2::strategies::register_primary_param(strategy_name, param_name);
void invariant(bool condition, char const *message)
Runtime assertion that throws on failure.
CRTP base class providing self-registration for strategy types.
Definition Strategy.hpp:93
Ptr(*)(nlohmann::json const &) Factory
Factory function type for deserializing a strategy from JSON.
Definition Strategy.hpp:98
std::shared_ptr< Derived > Ptr
Definition Strategy.hpp:95
virtual nlohmann::json to_json() const =0
Serialize this strategy's configuration to JSON.
static Ptr from_json(nlohmann::json const &j)
Construct a strategy from its JSON representation.
Definition Strategy.hpp:151
virtual std::set< ppforest2::types::Mode > supported_modes() const =0
Training modes this strategy supports.
static bool register_strategy(std::string const &name, Factory factory)
Register a concrete strategy for JSON deserialization.
Definition Strategy.hpp:138
virtual ~Strategy()=default
virtual std::string display_name() const =0
Human-readable name for display in summaries.
Definition Strategy.hpp:15
std::map< std::string, std::string > & primary_params_registry()
Cross-family registry for strategies that accept a CLI positional-shorthand value (e....
Definition Strategy.hpp:34
bool register_primary_param(std::string const &strategy, std::string const ¶m)
Register a strategy's primary (shorthand) parameter name.
Definition Strategy.hpp:58
std::optional< std::string > primary_param_for(std::string const &strategy)
Look up a strategy's primary shorthand parameter by name.
Definition Strategy.hpp:70