Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
CoroutineGroup.hpp
1#pragma once
2
3#include <boost/asio/spawn.hpp>
4#include <boost/asio/steady_timer.hpp>
5
6#include <atomic>
7#include <cstddef>
8#include <functional>
9#include <optional>
10
11namespace util {
12
19 boost::asio::steady_timer timer_;
20 std::optional<size_t> maxChildren_;
21 std::atomic_size_t childrenCounter_{0};
22
23public:
32 boost::asio::yield_context yield,
33 std::optional<size_t> maxChildren = std::nullopt
34 );
35
42
52 bool
53 spawn(boost::asio::yield_context yield, std::function<void(boost::asio::yield_context)> fn);
54
64 std::optional<std::function<void()>>
65 registerForeign(boost::asio::yield_context yield);
66
74 void
75 asyncWait(boost::asio::yield_context yield);
76
82 size_t
83 size() const;
84
90 bool
91 isFull() const;
92
93private:
94 void
95 onCoroutineCompleted();
96};
97
98} // namespace util
std::optional< std::function< void()> > registerForeign(boost::asio::yield_context yield)
Register a foreign coroutine this group should wait for.
Definition CoroutineGroup.cpp:48
bool isFull() const
Check if the group is full.
Definition CoroutineGroup.cpp:76
void asyncWait(boost::asio::yield_context yield)
Wait for all the coroutines in the group to finish.
Definition CoroutineGroup.cpp:60
CoroutineGroup(boost::asio::yield_context yield, std::optional< size_t > maxChildren=std::nullopt)
Construct a new Coroutine Group object.
Definition CoroutineGroup.cpp:16
bool spawn(boost::asio::yield_context yield, std::function< void(boost::asio::yield_context)> fn)
Spawn a new coroutine in the group.
Definition CoroutineGroup.cpp:31
~CoroutineGroup()
Destroy the Coroutine Group object.
Definition CoroutineGroup.cpp:22
size_t size() const
Get the number of coroutines in the group.
Definition CoroutineGroup.cpp:70
This namespace contains various utilities.
Definition AccountUtils.hpp:11