Builder for composing multiple facilities.
More...
#include <integrator_builder.hpp>
template<
system_state S>
class diffeq::core::composable::IntegratorBuilder< S >
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}})
IntegratorBuilder & with_parallel(ParallelConfig config={})
Add parallel execution facility.
IntegratorBuilder & with_output(OutputConfig config={}, std::function< void(const S &, typename AbstractIntegrator< S >::time_type, size_t)> handler=nullptr)
Add output handling facility.
std::unique_ptr< AbstractIntegrator< S > > build()
Build the final composed integrator.
IntegratorBuilder & with_signals(SignalConfig config={})
Add signal processing facility.
Configuration for output handling.
Configuration for parallel execution.
Timeout configuration for integration protection.
Definition at line 39 of file integrator_builder.hpp.
◆ IntegratorBuilder()
Construct builder with base integrator.
- Parameters
-
integrator | The integrator to build upon (takes ownership) |
Definition at line 48 of file integrator_builder.hpp.
◆ build()
Build the final composed integrator.
- Returns
- Unique pointer to the composed integrator
Note: After calling build(), the builder is left in a valid but unspecified state. Do not use the builder after calling build().
Definition at line 146 of file integrator_builder.hpp.
◆ get_as()
template<typename DecoratorType >
Get specific decorator type from the composition chain.
- Template Parameters
-
DecoratorType | The specific decorator type to retrieve |
- Returns
- Pointer to the decorator, or nullptr if not found
Note: This performs a dynamic_cast and may be expensive. Use sparingly.
Example:
auto builder = make_builder(base).with_timeout().with_async();
if (timeout_decorator) {
timeout_decorator->
config().timeout_duration = std::chrono::seconds{60};
}
Timeout decorator - adds timeout protection to any integrator.
TimeoutConfig & config()
Access and modify timeout configuration.
Definition at line 171 of file integrator_builder.hpp.
◆ get_composition_info()
Get information about the current composition.
- Returns
- String describing the current decorator stack
Definition at line 187 of file integrator_builder.hpp.
◆ is_valid()
Check if the builder has a valid integrator.
- Returns
- true if the builder can still be used
Definition at line 179 of file integrator_builder.hpp.
◆ with_interpolation()
Add interpolation facility.
- Parameters
-
config | Interpolation configuration (uses defaults if not specified) |
- Returns
- Reference to this builder for chaining
- Exceptions
-
std::invalid_argument | if config is invalid |
Definition at line 112 of file integrator_builder.hpp.
◆ with_interprocess()
Add interprocess facility.
- Parameters
-
config | Interprocess configuration (uses defaults if not specified) |
- Returns
- Reference to this builder for chaining
- Exceptions
-
std::invalid_argument | if config is invalid |
Definition at line 124 of file integrator_builder.hpp.
◆ with_output()
Add output handling facility.
- Parameters
-
config | Output configuration (uses defaults if not specified) |
handler | Optional output handler function |
- Returns
- Reference to this builder for chaining
- Exceptions
-
std::invalid_argument | if config is invalid |
Definition at line 87 of file integrator_builder.hpp.
◆ with_parallel()
Add parallel execution facility.
- Parameters
-
config | Parallel configuration (uses defaults if not specified) |
- Returns
- Reference to this builder for chaining
- Exceptions
-
std::invalid_argument | if config is invalid |
Definition at line 74 of file integrator_builder.hpp.
◆ with_signals()
Add signal processing facility.
- Parameters
-
config | Signal configuration (uses defaults if not specified) |
- Returns
- Reference to this builder for chaining
- Exceptions
-
std::invalid_argument | if config is invalid |
Definition at line 100 of file integrator_builder.hpp.
◆ with_timeout()
Add timeout protection facility.
- Parameters
-
config | Timeout configuration (uses defaults if not specified) |
- Returns
- Reference to this builder for chaining
- Exceptions
-
std::invalid_argument | if config is invalid |
Definition at line 62 of file integrator_builder.hpp.
The documentation for this class was generated from the following file: