From eac8d3bd204929311e4933f9641f0b3ba16d7a2b Mon Sep 17 00:00:00 2001 From: tearshark Date: Tue, 27 Mar 2018 00:43:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=AD=E6=B3=95=E6=9B=B4=E7=AC=A6=E5=90=88C+?= =?UTF-8?q?+17=E6=A0=87=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- librf/src/channel.h | 4 ++-- librf/src/event.h | 3 +-- librf/src/future.h | 7 +++++++ librf/src/mutex.h | 2 +- librf/src/rf_task.h | 3 +++ 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/librf/src/channel.h b/librf/src/channel.h index ad358eb..d1393ee 100644 --- a/librf/src/channel.h +++ b/librf/src/channel.h @@ -38,12 +38,12 @@ namespace resumef #endif template, channel_read_awaker_ptr>::value>> - auto read(callee_t && awaker) + decltype(auto) read(callee_t && awaker) { return read_(std::make_shared(std::forward(awaker))); } template, channel_write_awaker_ptr>::value>> - auto write(callee_t && awaker, _Ty2&& val) + decltype(auto) write(callee_t && awaker, _Ty2&& val) { return write_(std::make_shared(std::forward(awaker)), std::forward<_Ty2>(val)); } diff --git a/librf/src/event.h b/librf/src/event.h index cda4fc2..138186e 100644 --- a/librf/src/event.h +++ b/librf/src/event.h @@ -29,7 +29,7 @@ namespace resumef RF_API bool wait_(const event_awaker_ptr & awaker); template, event_awaker_ptr>::value>> - auto wait(callee_t && awaker, dummy_t * dummy_ = nullptr) + decltype(auto) wait(callee_t && awaker, dummy_t * dummy_ = nullptr) { return wait_(std::make_shared(std::forward(awaker))); } @@ -183,7 +183,6 @@ namespace resumef return std::move(evts); } - public: inline future_t wait_for_(const clock_type::duration & dt) const { return wait_until_(clock_type::now() + dt); diff --git a/librf/src/future.h b/librf/src/future.h index f5d1b53..38d9f3a 100644 --- a/librf/src/future.h +++ b/librf/src/future.h @@ -72,6 +72,9 @@ namespace resumef template struct future_t : public future_impl_t { + using state_type = typename future_impl_t::state_type; + using future_impl_t::_state; + future_t(const counted_ptr& state) : future_impl_t(state) { @@ -110,6 +113,8 @@ namespace resumef template <> struct future_t : public future_impl_t { + using future_impl_t::_state; + future_t(const counted_ptr& state) : future_impl_t(state) { @@ -246,6 +251,7 @@ namespace resumef struct promise_t : public promise_impl_t { typedef promise_t promise_type; + using promise_impl_t::_state; //------------------------------------------------------------------------------------------ //以下是与编译器生成的resumable function交互的接口 @@ -275,6 +281,7 @@ namespace resumef struct promise_t : public promise_impl_t { typedef promise_t promise_type; + using promise_impl_t::_state; //------------------------------------------------------------------------------------------ //以下是与编译器生成的resumable function交互的接口 diff --git a/librf/src/mutex.h b/librf/src/mutex.h index ca37671..4e2a02e 100644 --- a/librf/src/mutex.h +++ b/librf/src/mutex.h @@ -28,7 +28,7 @@ namespace resumef RF_API void unlock(); template, mutex_awaker_ptr>::value>> - auto lock(callee_t && awaker, dummy_t * dummy_ = nullptr) + decltype(auto) lock(callee_t && awaker, dummy_t * dummy_ = nullptr) { return lock_(std::make_shared(std::forward(awaker))); } diff --git a/librf/src/rf_task.h b/librf/src/rf_task.h index c3b1b36..b519b05 100644 --- a/librf/src/rf_task.h +++ b/librf/src/rf_task.h @@ -149,6 +149,9 @@ namespace resumef template struct ctx_task_t : public task_t::type> { + typedef task_t::type> base_type; + using base_type::_future; + typedef _Ctx context_type; context_type _context;