diff --git a/doc/slideshow.gif b/doc/slideshow.gif new file mode 100644 index 0000000..2d07e85 Binary files /dev/null and b/doc/slideshow.gif differ diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index bfb101c..4fc9aff 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(documentation) +add_subdirectory(slideshow) diff --git a/examples/slideshow/CMakeLists.txt b/examples/slideshow/CMakeLists.txt new file mode 100644 index 0000000..6df8a8a --- /dev/null +++ b/examples/slideshow/CMakeLists.txt @@ -0,0 +1,5 @@ +add_executable(example-slideshow + ${CMAKE_CURRENT_LIST_DIR}/example-slideshow.cpp) +target_link_libraries(example-slideshow + PRIVATE + continuable) diff --git a/examples/slideshow/example-slideshow.cpp b/examples/slideshow/example-slideshow.cpp new file mode 100644 index 0000000..d4397ee --- /dev/null +++ b/examples/slideshow/example-slideshow.cpp @@ -0,0 +1,93 @@ +/** + Copyright(c) 2015 - 2017 Denis Blank + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files(the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and / or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions : + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +**/ + +#include "continuable/continuable.hpp" + +cti::continuable http_request(std::string /*url*/) { + return cti::make_continuable( + [](auto&& callback) { callback("..."); }); +} + +struct ResultSet {}; +struct Buffer {}; + +cti::continuable mysql_query(std::string /*url*/) { + return cti::make_continuable( + [](auto&& callback) { callback("..."); }); +} + +cti::continuable read_file(std::string /*url*/) { + return cti::make_continuable( + [](auto&& callback) { callback("..."); }); +} + +struct a { + auto post() const { + return [](auto&&) {}; + } +}; + +int main(int, char**) { + a e; + auto executor = &e; + // clang-format off + + + // ---------- + + (http_request("github.com") && http_request("atom.io")) + .then([] (std::string github, std::string atom) { + // ... + return mysql_query("select * from `users`"); + }) + .then([] (ResultSet result) { + // ... + }, executor->post()); + + // ---------- + + auto cq = http_request("github.com") && http_request("atom.io") ; + + + + auto cq = http_request("github.com") || http_request("atom.io") ; + + + + auto cq = http_request("github.com") >> http_request("atom.io") ; + + // ---------- + + read_file("entries.csv") + .then([] (Buffer buffer) { + // ... + return std::make_tuple("hey", true, 0); + }) + .then([] (std::string msg) { + // ... + }); + + // ---------- + + // clang-format on + return 0; +}