diff options
Diffstat (limited to 'Rx/v2/src/rxcpp/sources/rx-interval.hpp')
-rw-r--r-- | Rx/v2/src/rxcpp/sources/rx-interval.hpp | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/Rx/v2/src/rxcpp/sources/rx-interval.hpp b/Rx/v2/src/rxcpp/sources/rx-interval.hpp deleted file mode 100644 index 7d3d47d..0000000 --- a/Rx/v2/src/rxcpp/sources/rx-interval.hpp +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. - -#pragma once - -#if !defined(RXCPP_SOURCES_RX_INTERVAL_HPP) -#define RXCPP_SOURCES_RX_INTERVAL_HPP - -#include "../rx-includes.hpp" - -/*! \file rx-interval.hpp - - \brief Returns an observable that emits a sequential integer every specified time interval, on the specified scheduler. - - \tparam Coordination the type of the scheduler (optional) - - \param period period between emitted values - \param cn the scheduler to use for scheduling the items (optional) - - \return Observable that sends a sequential integer each time interval - - \sample - \snippet interval.cpp interval sample - \snippet output.txt interval sample - - \sample - \snippet interval.cpp immediate interval sample - \snippet output.txt immediate interval sample - - \sample - \snippet interval.cpp threaded interval sample - \snippet output.txt threaded interval sample - - \sample - \snippet interval.cpp threaded immediate interval sample - \snippet output.txt threaded immediate interval sample -*/ - -namespace rxcpp { - -namespace sources { - -namespace detail { - -template<class Coordination> -struct interval : public source_base<long> -{ - typedef interval<Coordination> this_type; - - typedef rxu::decay_t<Coordination> coordination_type; - typedef typename coordination_type::coordinator_type coordinator_type; - - struct interval_initial_type - { - interval_initial_type(rxsc::scheduler::clock_type::time_point i, rxsc::scheduler::clock_type::duration p, coordination_type cn) - : initial(i) - , period(p) - , coordination(std::move(cn)) - { - } - rxsc::scheduler::clock_type::time_point initial; - rxsc::scheduler::clock_type::duration period; - coordination_type coordination; - }; - interval_initial_type initial; - - interval(rxsc::scheduler::clock_type::time_point i, rxsc::scheduler::clock_type::duration p, coordination_type cn) - : initial(i, p, std::move(cn)) - { - } - template<class Subscriber> - void on_subscribe(Subscriber o) const { - static_assert(is_subscriber<Subscriber>::value, "subscribe must be passed a subscriber"); - - // creates a worker whose lifetime is the same as this subscription - auto coordinator = initial.coordination.create_coordinator(o.get_subscription()); - - auto controller = coordinator.get_worker(); - - auto counter = std::make_shared<long>(0); - - auto producer = [o, counter](const rxsc::schedulable&) { - // send next value - o.on_next(++(*counter)); - }; - - auto selectedProducer = on_exception( - [&](){return coordinator.act(producer);}, - o); - if (selectedProducer.empty()) { - return; - } - - controller.schedule_periodically(initial.initial, initial.period, selectedProducer.get()); - } -}; - -template<class Duration, class Coordination> -struct defer_interval : public defer_observable< - rxu::all_true< - std::is_convertible<Duration, rxsc::scheduler::clock_type::duration>::value, - is_coordination<Coordination>::value>, - void, - interval, Coordination> -{ -}; - -} - - -/*! @copydoc rx-interval.hpp - */ -template<class Duration> -auto interval(Duration period) - -> typename std::enable_if< - detail::defer_interval<Duration, identity_one_worker>::value, - typename detail::defer_interval<Duration, identity_one_worker>::observable_type>::type { - return detail::defer_interval<Duration, identity_one_worker>::make(identity_current_thread().now(), period, identity_current_thread()); -} - -/*! @copydoc rx-interval.hpp - */ -template<class Coordination> -auto interval(rxsc::scheduler::clock_type::duration period, Coordination cn) - -> typename std::enable_if< - detail::defer_interval<rxsc::scheduler::clock_type::duration, Coordination>::value, - typename detail::defer_interval<rxsc::scheduler::clock_type::duration, Coordination>::observable_type>::type { - return detail::defer_interval<rxsc::scheduler::clock_type::duration, Coordination>::make(cn.now(), period, std::move(cn)); -} - -/*! @copydoc rx-interval.hpp - */ -template<class Duration> -auto interval(rxsc::scheduler::clock_type::time_point when, Duration period) - -> typename std::enable_if< - detail::defer_interval<Duration, identity_one_worker>::value, - typename detail::defer_interval<Duration, identity_one_worker>::observable_type>::type { - return detail::defer_interval<Duration, identity_one_worker>::make(when, period, identity_current_thread()); -} - -/*! @copydoc rx-interval.hpp - */ -template<class Coordination> -auto interval(rxsc::scheduler::clock_type::time_point when, rxsc::scheduler::clock_type::duration period, Coordination cn) - -> typename std::enable_if< - detail::defer_interval<rxsc::scheduler::clock_type::duration, Coordination>::value, - typename detail::defer_interval<rxsc::scheduler::clock_type::duration, Coordination>::observable_type>::type { - return detail::defer_interval<rxsc::scheduler::clock_type::duration, Coordination>::make(when, period, std::move(cn)); -} - -} - -} - -#endif |