15#include "fastmm/core/engine_runner.hpp"
17#include "fastmm/core/msg_ring.hpp"
70 std::string_view
name;
76 const auto i =
static_cast<std::size_t
>(k);
92 return "already present";
101class StrategyRegistry {
118 const auto k =
static_cast<std::size_t
>(kind);
119 if (name.empty() || factory ==
nullptr || k >=
kTransportKinds || schema ==
nullptr)
122 if (e.name != name)
continue;
124 if (e.publisher ==
nullptr) e.publisher = publisher;
127 e.factories[k] = factory;
131 e.factories[k] = factory;
132 entries_.push_back(e);
137 if (e.name == name)
return &e;
141 [[nodiscard]]
const std::vector<StrategyEntry>&
entries() const noexcept {
return entries_; }
144 [[nodiscard]] std::unique_ptr<IEngineRunner>
make(std::string_view name,
148 if (e ==
nullptr || !e->
supports(kind))
return nullptr;
149 return e->
factories[
static_cast<std::size_t
>(kind)](kind, deps);
153 std::vector<StrategyEntry> entries_;
156[[nodiscard]]
inline const std::vector<StrategyEntry>&
list_strategies() {
Dense-by-id table built at startup; symbol lookup is a sorted FlatMap keyed by (venue,...
Definition instrument.hpp:141
Definition params.hpp:102
Definition registry.hpp:103
const std::vector< StrategyEntry > & entries() const noexcept
Definition registry.hpp:143
AddResult try_add(std::string_view name, const ParamSchema *schema, TransportKind kind, StrategyEntry::Factory factory, StrategyEntry::PublisherFactory publisher=nullptr)
Registers factory for one transport kind of name.
Definition registry.hpp:115
const StrategyEntry * find(std::string_view name) const noexcept
Definition registry.hpp:137
std::unique_ptr< IEngineRunner > make(std::string_view name, TransportKind kind, RunnerDeps &deps) const
Builds a runner; null when name or its factory for kind is missing, or the factory refuses (wrong bac...
Definition registry.hpp:146
static StrategyRegistry & instance()
The registry the CLIs, run_backtest(cfg, name), replay_journal and Python use.
Definition registry.hpp:107
EngineConfig: the per-session settings an Engine is constructed with.
Instrument: the single definition of a tradable contract (5.3 / 5.15).
Definition strategy.hpp:16
constexpr std::size_t kTransportKinds
Definition registry.hpp:62
const std::vector< StrategyEntry > & list_strategies()
Definition registry.hpp:158
TransportKind
Definition registry.hpp:33
constexpr std::string_view to_string(ParamType t) noexcept
Definition params.hpp:63
AddResult
Definition registry.hpp:83
@ Invalid
empty name, null schema or factory, or an invalid kind
@ AlreadyPresent
the same schema and factory were registered before: nothing changed
@ Conflict
name is registered with a different schema, or (name, kind) with another factory
@ Added
the factory is now registered for (name, kind)
std::map< std::string, std::string > ParamMap
Definition params.hpp:119
ParamPublisher: builds ParamUpdate messages for a running engine, off the engine thread (ADR-0013).
Strategy parameter schema (8.6, ADR-0012).
Strategy concept and the StrategyBase helper (8.6).
Where a built update goes; push returns false when it was not accepted (full).
Definition param_publisher.hpp:45
Everything a factory needs that is backend-independent.
Definition registry.hpp:51
MsgRing * journal_ring
Definition registry.hpp:55
void * backend
Definition registry.hpp:59
const InstrumentTable * instruments
Definition registry.hpp:53
ParamMap params
Definition registry.hpp:54
MsgRing * record_ring
Where the engine hands fills, orders, positions and kill events for a storage backend (core/record_st...
Definition registry.hpp:58
EngineConfig engine
Definition registry.hpp:52
Definition registry.hpp:64
std::unique_ptr< IEngineRunner >(*)(TransportKind, RunnerDeps &) Factory
Definition registry.hpp:65
const ParamSchema * schema
Definition registry.hpp:73
bool supports(TransportKind k) const noexcept
Definition registry.hpp:77
std::array< Factory, kTransportKinds > factories
indexed by TransportKind
Definition registry.hpp:74
std::unique_ptr< ParamPublisher >(*)(ParamSink, const ParamMap &) PublisherFactory
Builds a publisher for this strategy's parameters over sink, its copy seeded with the values the sess...
Definition registry.hpp:71
PublisherFactory publisher
Definition registry.hpp:75
std::string_view name
must outlive the registry (S::name() returns a literal)
Definition registry.hpp:72