51 GSROCrateLimits limits = {}, std::size_t max_pending_events = 65536);
75 std::unique_ptr<Impl> impl;
void begin_run(ResourceFactory make_resources, GSROCrateLimits limits={}, DeliveryCallback on_delivery={})
Begin a fresh invocation after the previous one was joined; clears its progress and failure state.
void finish_run(GSROEndContext context)
GSROService & operator=(GSROService &&)=delete
void advance_time(GSROTime safe_time)
Manual mode only: broadcast a proven bound after all earlier dispatches return. New crates inherit it...
void rethrow_if_failed() const
GSROService(const GSROService &)=delete
void complete_event(GSROEventId event_id)
Automatic mode only. Close once, after all dispatch calls for this event have returned.
void create_crate_thread_if_needed(GSROCrateId crate_id)
Also permits implementations to request output for empty crates. Concurrent requests create once.
std::function< void(GSROCrateId, GSROEventId, std::uint64_t)> DeliveryCallback
GSROService & operator=(const GSROService &)=delete
void cancel_run(std::exception_ptr error)
Report a worker-side failure and wake blocked producers. The run owner still calls finish_run to join...
std::function< GSROCrateResources(GSROCrateId)> ResourceFactory
GSROService(GSROService &&)=delete
void dispatch_payload_to_crate(GSROPayload payload)
Transfers ownership directly to the destination queue, creating its crate on first use.
std::chrono::duration< std::int64_t, std::nano > GSROTime
std::uint32_t GSROCrateId
std::uint64_t GSROEventId
Per-crate bounds preventing asynchronous delivery from consuming unlimited memory.
Declare the sink first so the plugin referencing it is destroyed first.