diff --git a/fluent++/Continuable.h b/fluent++/Continuable.h index c18b5ca..7589f72 100644 --- a/fluent++/Continuable.h +++ b/fluent++/Continuable.h @@ -21,7 +21,7 @@ #include "Callback.h" -template +template struct Continuable; template @@ -39,7 +39,7 @@ public: : _callback_insert(std::forward(callback_insert)) { } template - Continuable>& then(_CTy&& callback) + Continuable>& then(_CTy&&) { return *this; } @@ -66,6 +66,14 @@ namespace detail } // detail +/// Wraps a functional object which expects a r-value callback as argument into a continuable. +/// The callable is invoked when the continuable shall continue. +/// For example: +/// make_continuable([](Callback&& callback) +/// { +/// /* Continue here */ +/// callback(5); +/// }); template inline auto make_continuable(_FTy&& functional) -> decltype(typename detail::continuable_factory_t<_FTy>::CreateFrom(std::declval<_FTy>())) diff --git a/fluent++/fluent++.hpp b/fluent++/fluent++.hpp index 5fc82c2..b28efc8 100644 --- a/fluent++/fluent++.hpp +++ b/fluent++/fluent++.hpp @@ -8,6 +8,7 @@ #include "functional_unwrap.hpp" +/* class fluent_step { bool released; @@ -82,6 +83,7 @@ struct ProtoContinueable return ProtoContinueable(); } }; +*/ void do_export(); diff --git a/test.cpp b/test.cpp index eb6ea55..abfd71c 100644 --- a/test.cpp +++ b/test.cpp @@ -1,6 +1,4 @@ -#include "fluent++.hpp" - #include "Callback.h" #include "WeakCallbackContainer.h" #include "Continuable.h" @@ -18,45 +16,11 @@ enum SpellCastResult SPELL_FAILED_ALREADY_BEING_TAMED = 5 }; -/* -ProtoContinueable ProtoCastSpell(int id) +// Continuable> +int CastSpell(int id) { - std::cout << "Cast " << id << std::endl; - - // on success call true - return ProtoContinueable(); -} - -ProtoContinueable ProtoMoveTo(int point) -{ - std::cout << "Move to point " << point << std::endl; - - // on success call true - return ProtoContinueable(); -} - -void ProtoCastSpell(int id, Callback const& callback) -{ - std::cout << "Cast " << id << std::endl; - - // on success call the callback with SPELL_FAILED_SUCCESS - callback(SPELL_FAILED_SUCCESS); - - -void ProtoMoveTo(int point, Callback const& callback) -{ - std::cout << "Move to point " << point << std::endl; - - // on success call true - callback(true); -} - -} -*/ - -Continuable> CastSpell(int id) -{ - return make_continuable([=](Callback&& callback) + return 1; + make_continuable([=](Callback&& callback) { std::cout << "Cast " << id << std::endl; @@ -67,122 +31,16 @@ Continuable> CastSpell(int id) int main(int argc, char** argv) { - /* - make_waterfall>() - // .then(std::bind(&CastSpell, 71382, std::placeholders::_1)) - .then([](SpellCastResult result, Callback const& callback) - { - ProtoMoveTo(1, callback); - }) - .then([](bool success) - { - // Do something final - std::cout << "finish everything" << std::endl; - }); - - - - auto cabt = []() - { - // Do something - return ProtoMoveTo(2); - }; - - typedef Callback cbd1; - typedef WeakCallback cbd2; - typedef SharedCallback cbd3; - - cbd1 _cbd1; - cbd2 _cbd2; - cbd3 _cbd3; - - auto _test_make_shared_callback = make_shared_callback([](bool) - { - - }); - - Callback<> weak_cb_test; - - { - WeakCallbackContainer callback; - - // Some tests - ProtoCastSpell(22872) - .weak(callback) - .then([](bool success) - { - if (success) - { - // do something - } - - // Do something - return ProtoMoveTo(2); - }) - .then([] - { - - - }); - - std::shared_ptr dealloc_test(new int{2}, [](int* me) - { - std::cout << "dealloc ok" << std::endl; - delete me; - }); - - auto const cb_void = callback([dealloc_test] - { - std::cout << "huhu i'm a..." << std::endl; - - auto const cp = dealloc_test; - }); - - dealloc_test.reset(); - - auto const cb_bool = callback([](bool success) - { - std::cout << "...weak wrapped callback!" << std::endl; - }); - - weak_cb_test = callback([] - { - std::cout << "huhu i'm crashsafe (you wont see me)!" << std::endl; - std::logic_error("bad logic"); - }); - - cb_void(); - - int i = 0; - ++i; - - cb_bool(true); - } - - // This will never be executed because the CallbackContainer was deallocated and its weak callback proxies are crash safe. - weak_cb_test(); - - auto weak_2 = make_shared_callback([] - { - std::cout << "huhu" << std::endl; - }); - - - auto wrapped = make_weak_wrapped_callback(weak_2); - auto wrapped2 = make_weak_wrapped_callback(WeakCallback<>(weak_2)); - wrapped(); - wrapped2(); - - */ - typedef Continuable> cont123; // typedef Continuable>::type myty1; // typedef Continuable, float>::type myty2; // Continuable> - CastSpell(63362) - .then([](SpellCastResult result) + CastSpell(63362); + + Continuable> spell; + spell.then([](SpellCastResult result) {