![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/thread-self/root/usr/include/boost/thread/detail/ |
Upload File : |
// Copyright (C) 2013 Vicente J. Botet Escriba // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // 2013/09 Vicente J. Botet Escriba // Adapt to boost from CCIA C++11 implementation // Make use of Boost.Move #ifndef BOOST_THREAD_DETAIL_FUNCTION_WRAPPER_HPP #define BOOST_THREAD_DETAIL_FUNCTION_WRAPPER_HPP #include <boost/config.hpp> #include <boost/thread/detail/memory.hpp> #include <boost/thread/detail/move.hpp> #include <boost/thread/csbl/memory/unique_ptr.hpp> #include <memory> #include <functional> namespace boost { namespace detail { class function_wrapper { struct impl_base { virtual void call()=0; virtual ~impl_base() { } }; typedef boost::csbl::unique_ptr<impl_base> impl_base_type; impl_base_type impl; template <typename F> struct impl_type: impl_base { F f; impl_type(F const &f_) : f(f_) {} impl_type(BOOST_THREAD_RV_REF(F) f_) : f(boost::move(f_)) {} void call() { if (impl) f(); } }; public: BOOST_THREAD_MOVABLE_ONLY(function_wrapper) //#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES template<typename F> function_wrapper(F const& f): impl(new impl_type<F>(f)) {} //#endif template<typename F> function_wrapper(BOOST_THREAD_RV_REF(F) f): impl(new impl_type<F>(boost::forward<F>(f))) {} function_wrapper(BOOST_THREAD_RV_REF(function_wrapper) other) BOOST_NOEXCEPT : impl(other.impl) { other.impl = 0; } function_wrapper() : impl(0) { } ~function_wrapper() { } function_wrapper& operator=(BOOST_THREAD_RV_REF(function_wrapper) other) BOOST_NOEXCEPT { impl=other.impl; other.impl=0; return *this; } void operator()() { impl->call();} }; } } #endif // header