File indexing completed on 2025-12-16 10:08:48
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef BOOST_SIGNALS2_SIGNAL_TYPE_HPP
0018 #define BOOST_SIGNALS2_SIGNAL_TYPE_HPP
0019
0020 #include <boost/parameter/config.hpp>
0021
0022 #if BOOST_PARAMETER_MAX_ARITY < 7
0023 #error Define BOOST_PARAMETER_MAX_ARITY as 7 or greater.
0024 #endif
0025
0026 #include <boost/parameter/template_keyword.hpp>
0027 #include <boost/parameter/parameters.hpp>
0028 #include <boost/parameter/required.hpp>
0029 #include <boost/parameter/optional.hpp>
0030 #include <boost/parameter/value_type.hpp>
0031 #include <boost/type_traits/is_function.hpp>
0032 #include <boost/type_traits/function_traits.hpp>
0033 #include <boost/signals2/signal.hpp>
0034 #include <functional>
0035
0036 namespace boost
0037 {
0038 namespace signals2
0039 {
0040 namespace keywords
0041 {
0042 BOOST_PARAMETER_TEMPLATE_KEYWORD(signature_type)
0043 BOOST_PARAMETER_TEMPLATE_KEYWORD(combiner_type)
0044 BOOST_PARAMETER_TEMPLATE_KEYWORD(group_type)
0045 BOOST_PARAMETER_TEMPLATE_KEYWORD(group_compare_type)
0046 BOOST_PARAMETER_TEMPLATE_KEYWORD(slot_function_type)
0047 BOOST_PARAMETER_TEMPLATE_KEYWORD(extended_slot_function_type)
0048 BOOST_PARAMETER_TEMPLATE_KEYWORD(mutex_type)
0049 }
0050
0051 template <
0052 typename A0,
0053 typename A1 = parameter::void_,
0054 typename A2 = parameter::void_,
0055 typename A3 = parameter::void_,
0056 typename A4 = parameter::void_,
0057 typename A5 = parameter::void_,
0058 typename A6 = parameter::void_
0059 >
0060 class signal_type
0061 {
0062 typedef parameter::parameters<
0063 parameter::required<keywords::tag::signature_type, is_function<boost::mpl::_> >,
0064 parameter::optional<keywords::tag::combiner_type>,
0065 parameter::optional<keywords::tag::group_type>,
0066 parameter::optional<keywords::tag::group_compare_type>,
0067 parameter::optional<keywords::tag::slot_function_type>,
0068 parameter::optional<keywords::tag::extended_slot_function_type>,
0069 parameter::optional<keywords::tag::mutex_type>
0070 > parameter_spec;
0071
0072 public:
0073
0074 typedef typename parameter_spec::bind<A0, A1, A2, A3, A4, A5, A6>::type
0075 args;
0076
0077 typedef typename parameter::value_type<args, keywords::tag::signature_type>::type
0078 signature_type;
0079
0080 typedef typename parameter::value_type
0081 <
0082 args,
0083 keywords::tag::combiner_type,
0084 optional_last_value
0085 <
0086 typename boost::function_traits<signature_type>::result_type
0087 >
0088 >::type combiner_type;
0089
0090 typedef typename
0091 parameter::value_type<args, keywords::tag::group_type, int>::type group_type;
0092
0093 typedef typename
0094 parameter::value_type<args, keywords::tag::group_compare_type, std::less<group_type> >::type
0095 group_compare_type;
0096
0097 typedef typename
0098 parameter::value_type<args, keywords::tag::slot_function_type, function<signature_type> >::type
0099 slot_function_type;
0100
0101 typedef typename
0102 parameter::value_type
0103 <
0104 args,
0105 keywords::tag::extended_slot_function_type,
0106 typename detail::extended_signature<function_traits<signature_type>::arity, signature_type>::function_type
0107 >::type
0108 extended_slot_function_type;
0109
0110 typedef typename
0111 parameter::value_type<args, keywords::tag::mutex_type, mutex>::type mutex_type;
0112
0113 typedef signal
0114 <
0115 signature_type,
0116 combiner_type,
0117 group_type,
0118 group_compare_type,
0119 slot_function_type,
0120 extended_slot_function_type,
0121 mutex_type
0122 > type;
0123 };
0124 }
0125 }
0126
0127 #endif