53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
#pragma once
|
|
|
|
#if !defined(RXCPP_RX_SCHEDULER_SAME_WORKER_HPP)
|
|
#define RXCPP_RX_SCHEDULER_SAME_WORKER_HPP
|
|
|
|
#include "../rx-includes.hpp"
|
|
|
|
namespace rxcpp {
|
|
|
|
namespace schedulers {
|
|
|
|
struct same_worker : public scheduler_interface
|
|
{
|
|
private:
|
|
typedef same_worker this_type;
|
|
same_worker(const this_type&);
|
|
|
|
rxsc::worker controller;
|
|
|
|
public:
|
|
explicit same_worker(rxsc::worker w)
|
|
: controller(std::move(w))
|
|
{
|
|
}
|
|
virtual ~same_worker()
|
|
{
|
|
}
|
|
|
|
virtual clock_type::time_point now() const {
|
|
return controller.now();
|
|
}
|
|
|
|
virtual worker create_worker(composite_subscription cs) const {
|
|
// use different lifetime
|
|
auto inner_lifetime = controller.get_subscription();
|
|
auto token = inner_lifetime.add(cs);
|
|
cs.add([inner_lifetime, token](){inner_lifetime.remove(token);});
|
|
return worker(cs, controller);
|
|
}
|
|
};
|
|
|
|
inline scheduler make_same_worker(rxsc::worker w) {
|
|
return make_scheduler<same_worker>(std::move(w));
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|