]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/asio/impl/executor.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / asio / impl / executor.hpp
index 31a1e43bb649f77b840bc6a8de831561e52b5300..261ca263476c2e33fdfec4b9fa00de1c2c931b2f 100644 (file)
 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
 
 #include <boost/asio/detail/config.hpp>
+
+#if !defined(BOOST_ASIO_NO_TS_EXECUTORS)
+
 #include <boost/asio/detail/atomic_count.hpp>
-#include <boost/asio/detail/executor_function.hpp>
 #include <boost/asio/detail/global.hpp>
 #include <boost/asio/detail/memory.hpp>
 #include <boost/asio/detail/recycling_allocator.hpp>
@@ -31,99 +33,7 @@ namespace asio {
 
 #if !defined(GENERATING_DOCUMENTATION)
 
-#if defined(BOOST_ASIO_HAS_MOVE)
-
-// Lightweight, move-only function object wrapper.
-class executor::function
-{
-public:
-  template <typename F, typename Alloc>
-  explicit function(F f, const Alloc& a)
-  {
-    // Allocate and construct an operation to wrap the function.
-    typedef detail::executor_function<F, Alloc> func_type;
-    typename func_type::ptr p = {
-      detail::addressof(a), func_type::ptr::allocate(a), 0 };
-    func_ = new (p.v) func_type(BOOST_ASIO_MOVE_CAST(F)(f), a);
-    p.v = 0;
-  }
-
-  function(function&& other) BOOST_ASIO_NOEXCEPT
-    : func_(other.func_)
-  {
-    other.func_ = 0;
-  }
-
-  ~function()
-  {
-    if (func_)
-      func_->destroy();
-  }
-
-  void operator()()
-  {
-    if (func_)
-    {
-      detail::executor_function_base* func = func_;
-      func_ = 0;
-      func->complete();
-    }
-  }
-
-private:
-  detail::executor_function_base* func_;
-};
-
-#else // defined(BOOST_ASIO_HAS_MOVE)
-
-// Not so lightweight, copyable function object wrapper.
-class executor::function
-{
-public:
-  template <typename F, typename Alloc>
-  explicit function(const F& f, const Alloc&)
-    : impl_(new impl<F>(f))
-  {
-  }
-
-  void operator()()
-  {
-    impl_->invoke_(impl_.get());
-  }
-
-private:
-  // Base class for polymorphic function implementations.
-  struct impl_base
-  {
-    void (*invoke_)(impl_base*);
-  };
-
-  // Polymorphic function implementation.
-  template <typename F>
-  struct impl : impl_base
-  {
-    impl(const F& f)
-      : function_(f)
-    {
-      invoke_ = &function::invoke<F>;
-    }
-
-    F function_;
-  };
-
-  // Helper to invoke a function.
-  template <typename F>
-  static void invoke(impl_base* i)
-  {
-    static_cast<impl<F>*>(i)->function_();
-  }
-
-  detail::shared_ptr<impl_base> impl_;
-};
-
-#endif // defined(BOOST_ASIO_HAS_MOVE)
-
-// Default polymorphic allocator implementation.
+// Default polymorphic executor implementation.
 template <typename Executor, typename Allocator>
 class executor::impl
   : public executor::impl_base
@@ -149,13 +59,13 @@ public:
 
   impl_base* clone() const BOOST_ASIO_NOEXCEPT
   {
-    ++ref_count_;
+    detail::ref_count_up(ref_count_);
     return const_cast<impl_base*>(static_cast<const impl_base*>(this));
   }
 
   void destroy() BOOST_ASIO_NOEXCEPT
   {
-    if (--ref_count_ == 0)
+    if (detail::ref_count_down(ref_count_))
     {
       allocator_type alloc(allocator_);
       impl* p = this;
@@ -247,7 +157,7 @@ private:
   };
 };
 
-// Polymorphic allocator specialisation for system_executor.
+// Polymorphic executor specialisation for system_executor.
 template <typename Allocator>
 class executor::impl<system_executor, Allocator>
   : public executor::impl_base
@@ -290,17 +200,20 @@ public:
 
   void dispatch(BOOST_ASIO_MOVE_ARG(function) f)
   {
-    executor_.dispatch(BOOST_ASIO_MOVE_CAST(function)(f), allocator_);
+    executor_.dispatch(BOOST_ASIO_MOVE_CAST(function)(f),
+        std::allocator<void>());
   }
 
   void post(BOOST_ASIO_MOVE_ARG(function) f)
   {
-    executor_.post(BOOST_ASIO_MOVE_CAST(function)(f), allocator_);
+    executor_.post(BOOST_ASIO_MOVE_CAST(function)(f),
+        std::allocator<void>());
   }
 
   void defer(BOOST_ASIO_MOVE_ARG(function) f)
   {
-    executor_.defer(BOOST_ASIO_MOVE_CAST(function)(f), allocator_);
+    executor_.defer(BOOST_ASIO_MOVE_CAST(function)(f),
+        std::allocator<void>());
   }
 
   type_id_result_type target_type() const BOOST_ASIO_NOEXCEPT
@@ -325,7 +238,6 @@ public:
 
 private:
   system_executor executor_;
-  Allocator allocator_;
 };
 
 template <typename Executor>
@@ -386,4 +298,6 @@ const Executor* executor::target() const BOOST_ASIO_NOEXCEPT
 
 #include <boost/asio/detail/pop_options.hpp>
 
+#endif // !defined(BOOST_ASIO_NO_TS_EXECUTORS)
+
 #endif // BOOST_ASIO_IMPL_EXECUTOR_HPP