Template Class IntegratorBuilder
Defined in File integrator_builder.hpp
Class Documentation
-
template<system_state S>
class IntegratorBuilder Builder for composing multiple facilities.
This allows flexible combination of any facilities without exponential class combinations. Uses the decorator pattern to stack facilities in any order.
Key Design Principles:
Fluent Interface: Chainable method calls
Order Independence: Facilities work in any composition order
Type Safety: Compile-time type checking
Extensibility: Easy to add new facilities without modification
Example Usage:
auto integrator = make_builder(base_integrator) .with_timeout(TimeoutConfig{.timeout_duration = std::chrono::seconds{30}}) .with_parallel(ParallelConfig{.max_threads = 8}) .with_signals() .with_output(OutputConfig{.mode = OutputMode::HYBRID}) .build();
Public Functions
-
inline explicit IntegratorBuilder(std::unique_ptr<AbstractIntegrator<S>> integrator)
Construct builder with base integrator.
- Parameters:
integrator – The integrator to build upon (takes ownership)
-
inline IntegratorBuilder &with_timeout(TimeoutConfig config = {})
Add timeout protection facility.
- Parameters:
config – Timeout configuration (uses defaults if not specified)
- Throws:
std::invalid_argument – if config is invalid
- Returns:
Reference to this builder for chaining
-
inline IntegratorBuilder &with_parallel(ParallelConfig config = {})
Add parallel execution facility.
- Parameters:
config – Parallel configuration (uses defaults if not specified)
- Throws:
std::invalid_argument – if config is invalid
- Returns:
Reference to this builder for chaining
-
inline IntegratorBuilder &with_output(OutputConfig config = {}, std::function<void(const S&, typename AbstractIntegrator<S>::time_type, size_t)> handler = nullptr)
Add output handling facility.
- Parameters:
config – Output configuration (uses defaults if not specified)
handler – Optional output handler function
- Throws:
std::invalid_argument – if config is invalid
- Returns:
Reference to this builder for chaining
-
inline IntegratorBuilder &with_signals(SignalConfig config = {})
Add signal processing facility.
- Parameters:
config – Signal configuration (uses defaults if not specified)
- Throws:
std::invalid_argument – if config is invalid
- Returns:
Reference to this builder for chaining
-
inline IntegratorBuilder &with_interpolation(InterpolationConfig config = {})
Add interpolation facility.
- Parameters:
config – Interpolation configuration (uses defaults if not specified)
- Throws:
std::invalid_argument – if config is invalid
- Returns:
Reference to this builder for chaining
-
inline IntegratorBuilder &with_interprocess(InterprocessConfig config = {})
Add interprocess facility.
- Parameters:
config – Interprocess configuration (uses defaults if not specified)
- Throws:
std::invalid_argument – if config is invalid
- Returns:
Reference to this builder for chaining
-
inline std::unique_ptr<AbstractIntegrator<S>> build()
Build the final composed integrator.
Note: After calling build(), the builder is left in a valid but unspecified state. Do not use the builder after calling build().
- Returns:
Unique pointer to the composed integrator
-
template<typename DecoratorType>
inline DecoratorType *get_as() Get specific decorator type from the composition chain.
Note: This performs a dynamic_cast and may be expensive. Use sparingly.
Example:
auto builder = make_builder(base).with_timeout().with_async(); auto* timeout_decorator = builder.get_as<TimeoutDecorator<S, T>>(); if (timeout_decorator) { // Access timeout-specific functionality timeout_decorator->config().timeout_duration = std::chrono::seconds{60}; }
- Template Parameters:
DecoratorType – The specific decorator type to retrieve
- Returns:
Pointer to the decorator, or nullptr if not found
-
inline bool is_valid() const
Check if the builder has a valid integrator.
- Returns:
true if the builder can still be used
-
inline std::string get_composition_info() const
Get information about the current composition.
- Returns:
String describing the current decorator stack