doxygen-mermaid
main
Mermaid graphs in doxygen 🧜♀️
|
This is an example of how to include Mermaid graphs in doxygen documentation.
https://github.com/tttapa/doxygen-mermaid
promise_type promise {};
\npromise.get_return_object()
"]
bar_coro_alloc --> call_foo["task<> f = foo();
"]
await_f["co_await f;
"]
await_f --> op_co_await["f.operator co_await()
"]
awaiter_promise["task::awaiter a {f.promise}
"]
op_co_await --> awaiter_promise
await_rdy["a.await_ready()
"]
awaiter_promise --> await_rdy
await_rdy --> if_await_rdy{{"f.done()
"}}
if_await_rdy -->|false| await_sus["a.await_suspend(bar)
"]
if_await_rdy -->|true| await_rsm["a.await_resume()
"]
await_sus --> await_sus_body["f.promise.continuation = bar\nreturn foo
"]
await_rsm --> bar_ret_void["promise.return_void()
"]
bar_ret_void --> destroy_f["f.~task()
"]
destroy_f --> destroy_foo["foo.destroy()
"]
destroy_foo --> bar_final_sus["promise.final_suspend()
"]
end
subgraph foo
coro_alloc["coroutine frame allocation\npromise_type promise {};
\npromise.get_return_object()
"]
coro_alloc --> init_sus["co_await promise.initial_suspend()
"]
co_ret["co_return;
"]
co_ret --> ret_void["promise.return_void()
"]
ret_void --> final_sus["promise.final_suspend()
"]
final_sus --> final_sus_a["task::promise_type::final_awaiter a {}
"]
final_sus_a --> final_await_sus["a.await_suspend(foo)
"]
final_await_sus --> final_await_sus_body["return promise.continuation
"]
end
end_(( ))
start --> bar_coro_alloc
call_foo -->|Function call| coro_alloc
init_sus -->|Suspend| await_f
await_sus_body -->|Symmetric Control Transfer| co_ret
final_await_sus_body -->|Symmetric Control Transfer| await_rsm
bar_final_sus --> end_