Chris@16: // Boost.Signals2 library Chris@16: Chris@16: // Copyright Frank Mori Hess 2007-2009. Chris@16: // Copyright Timmo Stange 2007. Chris@16: // Copyright Douglas Gregor 2001-2004. 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 Chris@16: Chris@16: #ifndef BOOST_SIGNALS2_PREPROCESSED_SLOT_HPP Chris@16: #define BOOST_SIGNALS2_PREPROCESSED_SLOT_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #ifndef BOOST_SIGNALS2_SLOT_MAX_BINDING_ARGS Chris@16: #define BOOST_SIGNALS2_SLOT_MAX_BINDING_ARGS 10 Chris@16: #endif Chris@16: Chris@16: Chris@16: // template slotN(... Chris@16: #define BOOST_SIGNALS2_SLOT_N_BINDING_CONSTRUCTOR(z, n, data) \ Chris@16: template \ Chris@16: BOOST_SIGNALS2_SLOT_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS)( \ Chris@16: const Func &func, BOOST_SIGNALS2_PREFIXED_FULL_REF_ARGS(n, const BindArg)) \ Chris@16: { \ Chris@16: init_slot_function(boost::bind(func, BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(n))); \ Chris@16: } Chris@16: #define BOOST_SIGNALS2_SLOT_N_BINDING_CONSTRUCTORS \ Chris@16: BOOST_PP_REPEAT_FROM_TO(1, BOOST_SIGNALS2_SLOT_MAX_BINDING_ARGS, BOOST_SIGNALS2_SLOT_N_BINDING_CONSTRUCTOR, ~) Chris@16: Chris@16: Chris@16: #define BOOST_PP_ITERATION_LIMITS (0, BOOST_PP_INC(BOOST_SIGNALS2_MAX_ARGS)) Chris@16: #define BOOST_PP_FILENAME_1 Chris@16: #include BOOST_PP_ITERATE() Chris@16: Chris@16: #undef BOOST_SIGNALS2_SLOT_N_BINDING_CONSTRUCTOR Chris@16: #undef BOOST_SIGNALS2_SLOT_N_BINDING_CONSTRUCTORS Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: namespace signals2 Chris@16: { Chris@16: template > Chris@16: class slot: public detail::slotN::arity, Chris@16: Signature, SlotFunction>::type Chris@16: { Chris@16: private: Chris@16: typedef typename detail::slotN::arity, Chris@16: Signature, SlotFunction>::type base_type; Chris@16: public: Chris@16: template Chris@16: slot(const F& f): base_type(f) Chris@16: {} Chris@16: // bind syntactic sugar Chris@16: // template slot(... Chris@16: #define BOOST_SIGNALS2_SLOT_BINDING_CONSTRUCTOR(z, n, data) \ Chris@16: template \ Chris@16: slot(const Func &func, BOOST_SIGNALS2_PREFIXED_FULL_REF_ARGS(n, const BindArg)): \ Chris@16: base_type(func, BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(n)) \ Chris@16: {} Chris@16: BOOST_PP_REPEAT_FROM_TO(1, BOOST_SIGNALS2_SLOT_MAX_BINDING_ARGS, BOOST_SIGNALS2_SLOT_BINDING_CONSTRUCTOR, ~) Chris@16: #undef BOOST_SIGNALS2_SLOT_BINDING_CONSTRUCTOR Chris@16: }; Chris@16: } // namespace signals2 Chris@16: } Chris@16: Chris@16: #endif // BOOST_SIGNALS2_PREPROCESSED_SLOT_HPP