Skip to content

Commit

Permalink
Passing an executor for all make_ready feature methods. Fix #85
Browse files Browse the repository at this point in the history
  • Loading branch information
FelixPetriconi committed Nov 14, 2017
1 parent 14735c9 commit 5e3d49c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 22 deletions.
18 changes: 9 additions & 9 deletions stlab/concurrency/utility.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

#endif

#include <stlab/concurrency/default_executor.hpp>
#include <stlab/concurrency/future.hpp>

/**************************************************************************************************/
Expand All @@ -32,23 +31,24 @@ inline namespace v1 {

/**************************************************************************************************/

template <typename T>
future<std::decay_t<T>> make_ready_future(T &&x) {
template <typename T, typename E>
future<std::decay_t<T>> make_ready_future(T&& x, E executor) {
auto p = package<std::decay_t<T>(std::decay_t<T>)>(
default_executor, [](auto&& x) { return std::forward<decltype(x)>(x); });
std::move(executor), [](auto&& x) { return std::forward<decltype(x)>(x); });
p.first(std::forward<T>(x));
return p.second;
}

inline future<void> make_ready_future() {
auto p = package<void()>(default_executor, []() {});
template <typename E>
future<void> make_ready_future(E executor) {
auto p = package<void()>(std::move(executor), []() {});
p.first();
return p.second;
}

template <typename T>
future<T> make_exceptional_future(std::exception_ptr error) {
auto p = package<T(T)>(default_executor, [_error = error](auto&& x) {
template <typename T, typename E>
future<T> make_exceptional_future(std::exception_ptr error, E executor) {
auto p = package<T(T)>(std::move(executor), [_error = error](auto&& x) {
std::rethrow_exception(_error);
return std::forward<decltype(x)>(x);
});
Expand Down
27 changes: 14 additions & 13 deletions test/tuple_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <boost/test/unit_test.hpp>

// stlab
#include <stlab/concurrency/default_executor.hpp>
#include <stlab/concurrency/future.hpp>
#include <stlab/concurrency/tuple_algorithm.hpp>
#include <stlab/concurrency/utility.hpp>
Expand Down Expand Up @@ -89,11 +90,11 @@ void when_all_typecheck(F f, future<Ts>... args) {

BOOST_AUTO_TEST_CASE(future_typecheck_test) {
auto fv = []{
return stlab::make_ready_future();
return stlab::make_ready_future(stlab::default_executor);
};
auto fi = []{
static std::size_t count_s{0};
return stlab::make_ready_future<int>(count_s++);
return stlab::make_ready_future<int>(count_s++, stlab::default_executor);
};

when_all_typecheck([](auto... args){
Expand All @@ -106,7 +107,7 @@ BOOST_AUTO_TEST_CASE(future_typecheck_test) {
BOOST_AUTO_TEST_CASE(future_when_all_int_int) {
auto fi = []{
static std::size_t count_s{0};
return stlab::make_ready_future<int>(count_s++);
return stlab::make_ready_future<int>(count_s++, stlab::default_executor);
};

auto f = when_all(stlab::default_executor, [](auto... args){
Expand All @@ -120,7 +121,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_int) {

BOOST_AUTO_TEST_CASE(future_when_all_void) {
auto fv = []{
return stlab::make_ready_future();
return stlab::make_ready_future(stlab::default_executor);
};

auto f = when_all(stlab::default_executor, [](){
Expand All @@ -134,11 +135,11 @@ BOOST_AUTO_TEST_CASE(future_when_all_void) {

BOOST_AUTO_TEST_CASE(future_when_all_void_int) {
auto fv = []{
return stlab::make_ready_future();
return stlab::make_ready_future(stlab::default_executor);
};
auto fi = []{
static std::size_t count_s{0};
return stlab::make_ready_future<int>(count_s++);
return stlab::make_ready_future<int>(count_s++, stlab::default_executor);
};

auto f = when_all(stlab::default_executor, [](auto... args){
Expand All @@ -152,11 +153,11 @@ BOOST_AUTO_TEST_CASE(future_when_all_void_int) {

BOOST_AUTO_TEST_CASE(future_when_all_int_void) {
auto fv = []{
return stlab::make_ready_future();
return stlab::make_ready_future(stlab::default_executor);
};
auto fi = []{
static std::size_t count_s{0};
return stlab::make_ready_future<int>(count_s++);
return stlab::make_ready_future<int>(count_s++, stlab::default_executor);
};

auto f = when_all(stlab::default_executor, [](auto... args){
Expand All @@ -170,16 +171,16 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_void) {

BOOST_AUTO_TEST_CASE(future_when_all_int_void_string_void_bool_void) {
auto fv = []{
return stlab::make_ready_future();
return stlab::make_ready_future(stlab::default_executor);
};
auto fi = []{
return stlab::make_ready_future<int>(42);
return stlab::make_ready_future<int>(42, stlab::default_executor);
};
auto fs = []{
return stlab::make_ready_future<std::string>("Hello, world!");
return stlab::make_ready_future<std::string>("Hello, world!", stlab::default_executor);
};
auto fb = []{
return stlab::make_ready_future<bool>(true);
return stlab::make_ready_future<bool>(true, stlab::default_executor);
};

auto f = when_all(stlab::default_executor, [](auto... args){
Expand All @@ -193,7 +194,7 @@ BOOST_AUTO_TEST_CASE(future_when_all_int_void_string_void_bool_void) {

BOOST_AUTO_TEST_CASE(future_when_any_void) {
auto fv = []{
return stlab::make_ready_future();
return stlab::make_ready_future(stlab::default_executor);
};

auto f = when_any(stlab::default_executor, [](size_t index){
Expand Down

0 comments on commit 5e3d49c

Please sign in to comment.