/* * Copyright (C) 2015 Naios * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include template struct Continuable; template Continuable<> make_continuable(Args&&...); template struct Continuable { template Continuable then(Args&&...) { return Continuable(); } template Continuable all(Args&&...) { return Continuable(); } }; template Continuable<> make_continuable(Args&&...) { return Continuable<>(); } template Continuable<> operator&& (Continuable&&, Continuable&&) { return Continuable<>(); } template Continuable<> operator|| (Continuable&&, Continuable&&) { return Continuable<>(); } Continuable<> http_request(std::string const& url) { return make_continuable([=](std::function&& callback) { // Do request... callback("some HTTP content"); }); } struct ResultSet { }; Continuable<> mysql_query(std::string const& query) { return make_continuable([=](std::function&& callback) { // Do request... callback("a mysql query result"); }); } void test_mockup() { { Continuable<> continuable = make_continuable([] { return "hey"; }); } Continuable<> c1 = make_continuable([] { }); Continuable<> c2 = make_continuable([] { }); Continuable<> c3 = make_continuable([] { }); Continuable<> c4 = make_continuable([] { }); (std::move(c1) && std::move(c2)) .then(http_request("https://github.com/") && http_request("https://www.google.de/") && mysql_query("SELECT name, session FROM users WHERE id = 3726284")) .then([](std::string github, std::string google, ResultSet user) { // result bla bla return std::forward_as_tuple(github.empty(), std::move(google), std::move(user)); }) .then([](bool hasContent, std::string google, ResultSet user) { }); // Continuable<> c11 = || std::move(c3); }