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
 |