Chris@16: // Boost.Signals library Chris@16: Chris@16: // Copyright Douglas Gregor 2001-2006. Use, modification and Chris@16: // distribution is subject to the Boost Software License, Version Chris@16: // 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // For more information, see http://www.boost.org/libs/signals Chris@16: Chris@16: #ifndef BOOST_SIGNAL_HPP Chris@16: #define BOOST_SIGNAL_HPP Chris@16: Chris@16: #ifndef BOOST_SIGNALS_NO_DEPRECATION_WARNING Chris@16: # if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__) Chris@16: # pragma message ("Warning: Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING.") Chris@16: # elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__) Chris@16: # warning "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING." Chris@16: # endif Chris@16: #endif Chris@16: Chris@16: #ifndef BOOST_SIGNALS_MAX_ARGS Chris@16: # define BOOST_SIGNALS_MAX_ARGS 10 Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #ifdef BOOST_HAS_ABI_HEADERS Chris@16: # include BOOST_ABI_PREFIX Chris@16: #endif Chris@16: Chris@16: namespace boost { Chris@16: #ifndef BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX Chris@16: namespace BOOST_SIGNALS_NAMESPACE { Chris@16: namespace detail { Chris@16: template Chris@16: class real_get_signal_impl; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<0, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal0 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<1, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal1 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<2, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal2 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<3, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal3 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<4, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal4 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<5, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal5 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<6, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal6 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<7, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal7 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<8, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal8 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<9, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal9 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: class real_get_signal_impl<10, Signature, Combiner, Group, GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: typedef function_traits traits; Chris@16: Chris@16: public: Chris@16: typedef signal10 type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct get_signal_impl : Chris@16: public real_get_signal_impl<(function_traits::arity), Chris@16: Signature, Chris@16: Combiner, Chris@16: Group, Chris@16: GroupCompare, Chris@16: SlotFunction> Chris@16: { Chris@16: }; Chris@16: Chris@16: } // end namespace detail Chris@16: } // end namespace BOOST_SIGNALS_NAMESPACE Chris@16: Chris@16: // Very lightweight wrapper around the signalN classes that allows signals to Chris@16: // be created where the number of arguments does not need to be part of the Chris@16: // class name. Chris@16: template< Chris@16: typename Signature, // function type R (T1, T2, ..., TN) Chris@16: typename Combiner = last_value::result_type>, Chris@16: typename Group = int, Chris@16: typename GroupCompare = std::less, Chris@16: typename SlotFunction = function Chris@16: > Chris@16: class signal : Chris@16: public BOOST_SIGNALS_NAMESPACE::detail::get_signal_impl::type Chris@16: { Chris@16: typedef typename BOOST_SIGNALS_NAMESPACE::detail::get_signal_impl< Chris@16: Signature, Chris@16: Combiner, Chris@16: Group, Chris@16: GroupCompare, Chris@16: SlotFunction>::type base_type; Chris@16: Chris@16: public: Chris@16: explicit signal(const Combiner& combiner = Combiner(), Chris@16: const GroupCompare& group_compare = GroupCompare()) : Chris@16: base_type(combiner, group_compare) Chris@16: { Chris@16: } Chris@16: }; Chris@16: #endif // ndef BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX Chris@16: Chris@16: } // end namespace boost Chris@16: Chris@16: #ifdef BOOST_HAS_ABI_HEADERS Chris@16: # include BOOST_ABI_SUFFIX Chris@16: #endif Chris@16: Chris@16: #endif // BOOST_SIGNAL_HPP