48#include "platforms/await.h"
68 ALL = (1 << 0) | (1 << 1) | (1 << 2)
72 return static_cast<ExecFlags>(
static_cast<u8>(a) |
static_cast<u8>(b));
76 return (
static_cast<u8>(a) &
static_cast<u8>(b)) != 0;
196 return PromiseResult<T>(Error(
"Invalid promise"));
200 if (p.is_completed()) {
201 if (p.is_resolved()) {
202 return PromiseResult<T>(p.value());
204 return PromiseResult<T>(p.error());
210 if (await_depth > 10) {
211 return PromiseResult<T>(
Error(
"await_top_level recursion limit exceeded - possible infinite loop"));
218 const int max_pump_iterations = 10000;
220 while (!p.is_completed() && pump_count < max_pump_iterations) {
225 if (p.is_completed()) {
238 if (pump_count >= max_pump_iterations) {
239 return PromiseResult<T>(
Error(
"await_top_level timeout - promise did not complete"));
243 if (p.is_resolved()) {
244 return PromiseResult<T>(p.value());
246 return PromiseResult<T>(p.error());
318 fl::u32 timeout_ms = fl::platforms::kAwaitDefaultTimeoutMs)
FL_NO_EXCEPT {
319 return fl::platforms::await(p, timeout_ms);
size_t total_active_tasks() const FL_NO_EXCEPT
Get total number of active tasks across all runners.
fl::vector< Runner * > mRunners
void register_runner(Runner *r) FL_NO_EXCEPT
Register a runner.
bool has_active_tasks() const FL_NO_EXCEPT
Check if there are any active tasks.
void unregister_runner(Runner *r) FL_NO_EXCEPT
Unregister a runner.
static Executor & instance() FL_NO_EXCEPT
void update_all() FL_NO_EXCEPT
Update all registered runners.
Task executor (singleton) — manages registered runners.
Promise class that provides fluent .then() and .catch_() semantics This is a lightweight wrapper arou...
Result type for promise operations.
virtual ~Runner() FL_NO_EXCEPT=default
virtual size_t active_task_count() const FL_NO_EXCEPT=0
Get number of active tasks (for debugging/monitoring)
virtual bool has_active_tasks() const FL_NO_EXCEPT=0
Check if this runner has active tasks.
virtual void update() FL_NO_EXCEPT=0
Update this runner (called during task pumping)
Generic task runner interface.
Compile-time linker keep-alive hook for a single fl::Bus.
int & await_depth_tls() FL_NO_EXCEPT
Get reference to thread-local await recursion depth.
void yield_system(fl::u32 microseconds) FL_NO_EXCEPT
OS-level yield only: same behavior as run(us, ExecFlags::SYSTEM).
size_t active_tasks() FL_NO_EXCEPT
Get the number of active tasks across all systems.
PromiseResult< T > await(Promise< T > p, fl::u32 timeout_ms=fl::platforms::kAwaitDefaultTimeoutMs) FL_NO_EXCEPT
Await promise completion in a coroutine (Trampoline to platform implementation)
void run(fl::u32 microseconds, ExecFlags flags) FL_NO_EXCEPT
Run selected task subsystems.
bool has_tasks() FL_NO_EXCEPT
Check if any systems have active tasks.
ExecFlags operator|(ExecFlags a, ExecFlags b) FL_NO_EXCEPT
ExecFlags
Flags controlling which subsystems run() pumps.
bool operator&(ExecFlags a, ExecFlags b) FL_NO_EXCEPT
PromiseResult< T > await_top_level(Promise< T > p) FL_NO_EXCEPT
Synchronously wait for a promise to complete (ONLY safe in top-level contexts)
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Base definition for an LED controller.
Promise-based fluent API for FastLED - standalone async primitives.
Task scheduler — manages timer and frame-based tasks.