diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-03-21 15:45:20 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-03-21 15:46:37 +0900 |
commit | 733b5d5ae2c5d625211e2985ac25728ac3f54883 (patch) | |
tree | a5b214744b256f07e1dc2bd7273035a7808c659f /boost/signals2 | |
parent | 08c1e93fa36a49f49325a07fe91ff92c964c2b6c (diff) | |
download | boost-733b5d5ae2c5d625211e2985ac25728ac3f54883.tar.gz boost-733b5d5ae2c5d625211e2985ac25728ac3f54883.tar.bz2 boost-733b5d5ae2c5d625211e2985ac25728ac3f54883.zip |
Imported Upstream version 1.58.0upstream/1.58.0
Change-Id: If0072143aa26874812e0db6872e1efb10a3e5e94
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/signals2')
-rw-r--r-- | boost/signals2/detail/signal_template.hpp | 18 | ||||
-rw-r--r-- | boost/signals2/detail/signals_common_macros.hpp | 15 | ||||
-rw-r--r-- | boost/signals2/detail/slot_call_iterator.hpp | 2 | ||||
-rw-r--r-- | boost/signals2/signal.hpp | 1 | ||||
-rw-r--r-- | boost/signals2/trackable.hpp | 1 |
5 files changed, 21 insertions, 16 deletions
diff --git a/boost/signals2/detail/signal_template.hpp b/boost/signals2/detail/signal_template.hpp index bb5d3a4f56..09d7d8d9f9 100644 --- a/boost/signals2/detail/signal_template.hpp +++ b/boost/signals2/detail/signal_template.hpp @@ -40,10 +40,10 @@ namespace boost BOOST_SIGNALS2_ARGS_TEMPLATE_DECL(BOOST_SIGNALS2_NUM_ARGS)> result_type operator()(ExtendedSlotFunction &func, const connection &conn BOOST_SIGNALS2_PP_COMMA_IF(BOOST_SIGNALS2_NUM_ARGS) - BOOST_SIGNALS2_FULL_REF_ARGS(BOOST_SIGNALS2_NUM_ARGS)) const + BOOST_SIGNALS2_FULL_FORWARD_ARGS(BOOST_SIGNALS2_NUM_ARGS)) const { return func(conn BOOST_SIGNALS2_PP_COMMA_IF(BOOST_SIGNALS2_NUM_ARGS) - BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(BOOST_SIGNALS2_NUM_ARGS)); + BOOST_SIGNALS2_FORWARDED_ARGS(BOOST_SIGNALS2_NUM_ARGS)); } }; #ifdef BOOST_NO_VOID_RETURNS @@ -56,10 +56,10 @@ namespace boost BOOST_SIGNALS2_ARGS_TEMPLATE_DECL(BOOST_SIGNALS2_NUM_ARGS)> result_type operator()(ExtendedSlotFunction &func, const connection &conn BOOST_SIGNALS2_PP_COMMA_IF(BOOST_SIGNALS2_NUM_ARGS) - BOOST_SIGNALS2_FULL_REF_ARGS(BOOST_SIGNALS2_NUM_ARGS)) const + BOOST_SIGNALS2_FULL_FORWARD_ARGS(BOOST_SIGNALS2_NUM_ARGS)) const { func(conn BOOST_SIGNALS2_PP_COMMA_IF(BOOST_SIGNALS2_NUM_ARGS) - BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(BOOST_SIGNALS2_NUM_ARGS)); + BOOST_SIGNALS2_FORWARDED_ARGS(BOOST_SIGNALS2_NUM_ARGS)); return result_type(); } }; @@ -84,23 +84,23 @@ namespace boost #if BOOST_SIGNALS2_NUM_ARGS > 0 template<BOOST_SIGNALS2_ARGS_TEMPLATE_DECL(BOOST_SIGNALS2_NUM_ARGS)> #endif // BOOST_SIGNALS2_NUM_ARGS > 0 - result_type operator()(BOOST_SIGNALS2_FULL_REF_ARGS(BOOST_SIGNALS2_NUM_ARGS)) + result_type operator()(BOOST_SIGNALS2_FULL_FORWARD_ARGS(BOOST_SIGNALS2_NUM_ARGS)) { return BOOST_SIGNALS2_BOUND_EXTENDED_SLOT_FUNCTION_INVOKER_N(BOOST_SIGNALS2_NUM_ARGS) <typename ExtendedSlotFunction::result_type>() (_fun, *_connection BOOST_SIGNALS2_PP_COMMA_IF(BOOST_SIGNALS2_NUM_ARGS) - BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(BOOST_SIGNALS2_NUM_ARGS)); + BOOST_SIGNALS2_FORWARDED_ARGS(BOOST_SIGNALS2_NUM_ARGS)); } // const overload #if BOOST_SIGNALS2_NUM_ARGS > 0 template<BOOST_SIGNALS2_ARGS_TEMPLATE_DECL(BOOST_SIGNALS2_NUM_ARGS)> #endif // BOOST_SIGNALS2_NUM_ARGS > 0 - result_type operator()(BOOST_SIGNALS2_FULL_REF_ARGS(BOOST_SIGNALS2_NUM_ARGS)) const + result_type operator()(BOOST_SIGNALS2_FULL_FORWARD_ARGS(BOOST_SIGNALS2_NUM_ARGS)) const { return BOOST_SIGNALS2_BOUND_EXTENDED_SLOT_FUNCTION_INVOKER_N(BOOST_SIGNALS2_NUM_ARGS) <typename ExtendedSlotFunction::result_type>() (_fun, *_connection BOOST_SIGNALS2_PP_COMMA_IF(BOOST_SIGNALS2_NUM_ARGS) - BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(BOOST_SIGNALS2_NUM_ARGS)); + BOOST_SIGNALS2_FORWARDED_ARGS(BOOST_SIGNALS2_NUM_ARGS)); } template<typename T> bool operator==(const T &other) const @@ -401,7 +401,7 @@ namespace boost }; // Destructor of invocation_janitor does some cleanup when a signal invocation completes. // Code can't be put directly in signal's operator() due to complications from void return types. - class invocation_janitor + class invocation_janitor: noncopyable { public: typedef BOOST_SIGNALS2_SIGNAL_IMPL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) signal_type; diff --git a/boost/signals2/detail/signals_common_macros.hpp b/boost/signals2/detail/signals_common_macros.hpp index b149dbc288..4ca4403827 100644 --- a/boost/signals2/detail/signals_common_macros.hpp +++ b/boost/signals2/detail/signals_common_macros.hpp @@ -100,11 +100,13 @@ #define BOOST_SIGNALS2_PREFIXED_FULL_REF_ARGS(arity, prefix) \ BOOST_PP_ENUM(arity, BOOST_SIGNALS2_PREFIXED_FULL_REF_ARG, prefix) // Tn & argn -#define BOOST_SIGNALS2_FULL_REF_ARG(z, n, data) \ - BOOST_PP_CAT(T, BOOST_PP_INC(n)) & BOOST_SIGNALS2_SIGNATURE_ARG_NAME(~, n, ~) -// T1 & arg1, T2 & arg2, ..., Tn & argn -#define BOOST_SIGNALS2_FULL_REF_ARGS(arity) \ - BOOST_PP_ENUM(arity, BOOST_SIGNALS2_FULL_REF_ARG, ~) +#define BOOST_SIGNALS2_FULL_CREF_ARG(z, n, data) \ + const BOOST_PP_CAT(T, BOOST_PP_INC(n)) & BOOST_SIGNALS2_SIGNATURE_ARG_NAME(~, n, ~) +// const T1 & arg1, const T2 & arg2, ..., const Tn & argn +#define BOOST_SIGNALS2_FULL_FORWARD_ARGS(arity) \ + BOOST_PP_ENUM(arity, BOOST_SIGNALS2_FULL_CREF_ARG, ~) +#define BOOST_SIGNALS2_FORWARDED_ARGS(arity) \ + BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(arity) // preprocessed_arg_typeN #define BOOST_SIGNALS2_PREPROCESSED_ARG_N_TYPE_CLASS_NAME(arity) BOOST_PP_CAT(preprocessed_arg_type, arity) @@ -149,7 +151,8 @@ #define BOOST_SIGNALS2_SIGNATURE_TEMPLATE_INSTANTIATION(arity) R (Args...) #define BOOST_SIGNALS2_SIGNATURE_FUNCTION_TYPE(arity) R (Args...) #define BOOST_SIGNALS2_ARGS_TEMPLATE_DECL(arity) typename ... Args -#define BOOST_SIGNALS2_FULL_REF_ARGS(arity) Args & ... args +#define BOOST_SIGNALS2_FULL_FORWARD_ARGS(arity) Args && ... args +#define BOOST_SIGNALS2_FORWARDED_ARGS(arity) std::forward<Args>(args)... #define BOOST_SIGNALS2_SLOT_CLASS_NAME(arity) slot #define BOOST_SIGNALS2_EXTENDED_SLOT_TYPE(arity) slot<R (const connection &, Args...), extended_slot_function_type> #define BOOST_SIGNALS2_BOUND_EXTENDED_SLOT_FUNCTION_N(arity) bound_extended_slot_function diff --git a/boost/signals2/detail/slot_call_iterator.hpp b/boost/signals2/detail/slot_call_iterator.hpp index 99eec1d7bb..9dbbb3c9b5 100644 --- a/boost/signals2/detail/slot_call_iterator.hpp +++ b/boost/signals2/detail/slot_call_iterator.hpp @@ -113,8 +113,8 @@ namespace boost { } for(;iter != end; ++iter) { - lock_type lock(**iter); cache->tracked_ptrs.clear(); + lock_type lock(**iter); (*iter)->nolock_grab_tracked_objects(std::back_inserter(cache->tracked_ptrs)); if((*iter)->nolock_nograb_connected()) { diff --git a/boost/signals2/signal.hpp b/boost/signals2/signal.hpp index c04c9e6164..7abcea6241 100644 --- a/boost/signals2/signal.hpp +++ b/boost/signals2/signal.hpp @@ -17,6 +17,7 @@ #include <boost/config.hpp> #include <boost/function.hpp> #include <boost/mpl/identity.hpp> +#include <boost/noncopyable.hpp> #include <boost/shared_ptr.hpp> #include <boost/signals2/connection.hpp> #include <boost/signals2/detail/unique_lock.hpp> diff --git a/boost/signals2/trackable.hpp b/boost/signals2/trackable.hpp index dba001da45..64e848921e 100644 --- a/boost/signals2/trackable.hpp +++ b/boost/signals2/trackable.hpp @@ -18,6 +18,7 @@ #include <boost/assert.hpp> #include <boost/shared_ptr.hpp> +#include <boost/weak_ptr.hpp> namespace boost { namespace signals2 { |