mirror of
https://github.com/Naios/continuable.git
synced 2025-12-06 08:46:44 +08:00
| include | ||
| testing | ||
| .gitignore | ||
| .travis.yml | ||
| CMakeLists.txt | ||
| Incubator.cpp | ||
| LICENSE | ||
| mockup.cpp | ||
| Readme.md | ||
| test.cpp | ||
Continuable
C++11 Continuation chains (Work in progress)
This library aims to provide full support for async continuation chains with callbacks.
Important note: Everything is work in progress and the library is not ready to be use yet, most showed examples are not working yet and are just there for explaining my plans.
Creating Continuables
Create a continuable from a callback taking function
Continuable<std::string> continuable =
make_continuable([](Callback<std::string>&& callback)
{
callback("some data");
});
Providing helper functions
Continuable<ResultSet> mysql_query(std::string&& query)
{
return make_continuable(
[query = std::move(query)](Callback<ResultSet>&& callback) mutable
{
// Pass the callback to the handler
// which calls the callback when finished.
// Everything which takes a callback works with continuables.
mysql_handle_async_query(std::move(query), std::move(callback));
});
}
// You can use the helper function like you would normally do:
mysql_query("DELETE FROM users WHERE id = 27361");
// Or using chaining to handle the result which is covered in the next topic .
mysql_query("SELECT id, name FROM users")
.then([](ResultSet result)
{
});
Chaining Continuables
Chaining continuables is very easy:
(mysql_query("SELECT id, name FROM users")
&& http_request("http://github.com"))
.then([](ResultSet result, std::string page_content)
{
// Pass one argument to the next continuation...
return page_content.empty();
// ... or pass multiple args using tuples...
return std::make_tuple(std::move(result), page_content.empty());
// ... return the next continuable to process
return mysql_query("SELECT id name FROM sessions");
});