summaryrefslogtreecommitdiff
path: root/Rx/v2/src/rxcpp/sources/rx-scope.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'Rx/v2/src/rxcpp/sources/rx-scope.hpp')
-rw-r--r--Rx/v2/src/rxcpp/sources/rx-scope.hpp124
1 files changed, 0 insertions, 124 deletions
diff --git a/Rx/v2/src/rxcpp/sources/rx-scope.hpp b/Rx/v2/src/rxcpp/sources/rx-scope.hpp
deleted file mode 100644
index d7151f2..0000000
--- a/Rx/v2/src/rxcpp/sources/rx-scope.hpp
+++ /dev/null
@@ -1,124 +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_SCOPE_HPP)
-#define RXCPP_SOURCES_RX_SCOPE_HPP
-
-#include "../rx-includes.hpp"
-
-/*! \file rx-scope.hpp
-
- \brief Returns an observable that makes an observable by the specified observable factory using the resource provided by the specified resource factory for each new observer that subscribes.
-
- \tparam ResourceFactory the type of the resource factory
- \tparam ObservableFactory the type of the observable factory
-
- \param rf the resource factory function that resturn the rxcpp::resource that is used as a resource by the observable factory
- \param of the observable factory function to invoke for each observer that subscribes to the resulting observable
-
- \return observable that makes an observable by the specified observable factory using the resource provided by the specified resource factory for each new observer that subscribes.
-
- \sample
- \snippet scope.cpp scope sample
- \snippet output.txt scope sample
-*/
-
-namespace rxcpp {
-
-namespace sources {
-
-namespace detail {
-
-template<class ResourceFactory, class ObservableFactory>
-struct scope_traits
-{
- typedef rxu::decay_t<ResourceFactory> resource_factory_type;
- typedef rxu::decay_t<ObservableFactory> observable_factory_type;
- typedef decltype((*(resource_factory_type*)nullptr)()) resource_type;
- typedef decltype((*(observable_factory_type*)nullptr)(resource_type())) collection_type;
- typedef typename collection_type::value_type value_type;
-
- static_assert(is_subscription<resource_type>::value, "ResourceFactory must return a subscription");
-};
-
-template<class ResourceFactory, class ObservableFactory>
-struct scope : public source_base<rxu::value_type_t<scope_traits<ResourceFactory, ObservableFactory>>>
-{
- typedef scope_traits<ResourceFactory, ObservableFactory> traits;
- typedef typename traits::resource_factory_type resource_factory_type;
- typedef typename traits::observable_factory_type observable_factory_type;
- typedef typename traits::resource_type resource_type;
- typedef typename traits::value_type value_type;
-
- struct values
- {
- values(resource_factory_type rf, observable_factory_type of)
- : resource_factory(std::move(rf))
- , observable_factory(std::move(of))
- {
- }
- resource_factory_type resource_factory;
- observable_factory_type observable_factory;
- };
- values initial;
-
-
- scope(resource_factory_type rf, observable_factory_type of)
- : initial(std::move(rf), std::move(of))
- {
- }
-
- template<class Subscriber>
- void on_subscribe(Subscriber o) const {
-
- struct state_type
- : public std::enable_shared_from_this<state_type>
- , public values
- {
- state_type(values i, Subscriber o)
- : values(i)
- , out(std::move(o))
- {
- }
- Subscriber out;
- rxu::detail::maybe<resource_type> resource;
- };
-
- auto state = std::make_shared<state_type>(state_type(initial, std::move(o)));
-
- state->resource = on_exception(
- [&](){return state->resource_factory(); },
- state->out);
- if (state->resource.empty()) {
- return;
- }
- state->out.add(state->resource->get_subscription());
-
- auto selectedCollection = on_exception(
- [state](){return state->observable_factory(state->resource.get()); },
- state->out);
- if (selectedCollection.empty()) {
- return;
- }
-
- selectedCollection->subscribe(state->out);
- }
-};
-
-}
-
-/*! @copydoc rx-scope.hpp
- */
-template<class ResourceFactory, class ObservableFactory>
-auto scope(ResourceFactory rf, ObservableFactory of)
- -> observable<rxu::value_type_t<detail::scope_traits<ResourceFactory, ObservableFactory>>, detail::scope<ResourceFactory, ObservableFactory>> {
- return observable<rxu::value_type_t<detail::scope_traits<ResourceFactory, ObservableFactory>>, detail::scope<ResourceFactory, ObservableFactory>>(
- detail::scope<ResourceFactory, ObservableFactory>(std::move(rf), std::move(of)));
-}
-
-}
-
-}
-
-#endif