/* | |
Author: Frank Mori Hess <fmhess@users.sourceforge.net> | |
Begin: 2007-01-23 | |
*/ | |
// Copyright Frank Mori Hess 2007-2008 | |
// Use, modification and | |
// distribution is subject to 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) | |
#ifndef BOOST_SIGNALS2_SIGNALS_COMMON_MACROS_HPP | |
#define BOOST_SIGNALS2_SIGNALS_COMMON_MACROS_HPP | |
#include <boost/config.hpp> | |
#ifdef BOOST_NO_VARIADIC_TEMPLATES | |
#ifndef BOOST_SIGNALS2_MAX_ARGS | |
#define BOOST_SIGNALS2_MAX_ARGS 9 | |
#endif | |
// signaln | |
#define BOOST_SIGNALS2_SIGNAL_CLASS_NAME(arity) BOOST_PP_CAT(signal, arity) | |
// weak_signaln | |
#define BOOST_SIGNALS2_WEAK_SIGNAL_CLASS_NAME(arity) BOOST_PP_CAT(weak_, BOOST_SIGNALS2_SIGNAL_CLASS_NAME(arity)) | |
// signaln_impl | |
#define BOOST_SIGNALS2_SIGNAL_IMPL_CLASS_NAME(arity) BOOST_PP_CAT(BOOST_SIGNALS2_SIGNAL_CLASS_NAME(arity), _impl) | |
// argn | |
#define BOOST_SIGNALS2_SIGNATURE_ARG_NAME(z, n, data) BOOST_PP_CAT(arg, BOOST_PP_INC(n)) | |
// Tn argn | |
#define BOOST_SIGNALS2_SIGNATURE_FULL_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_SIGNATURE_FULL_ARGS(arity) \ | |
BOOST_PP_ENUM(arity, BOOST_SIGNALS2_SIGNATURE_FULL_ARG, ~) | |
// arg1, arg2, ..., argn | |
#define BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(arity) BOOST_PP_ENUM(arity, BOOST_SIGNALS2_SIGNATURE_ARG_NAME, ~) | |
// T1, T2, ..., TN | |
#define BOOST_SIGNALS2_ARGS_TEMPLATE_INSTANTIATION(arity) \ | |
BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_INC(arity), T) | |
// R (T1, T2, ..., TN) | |
#define BOOST_SIGNALS2_SIGNATURE_FUNCTION_TYPE(arity) \ | |
R ( BOOST_SIGNALS2_ARGS_TEMPLATE_INSTANTIATION(arity) ) | |
// typename prefixR, typename prefixT1, typename prefixT2, ..., typename prefixTN | |
#define BOOST_SIGNALS2_PREFIXED_SIGNATURE_TEMPLATE_DECL(arity, prefix) \ | |
typename BOOST_PP_CAT(prefix, R) BOOST_PP_COMMA_IF(arity) \ | |
BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_INC(arity), typename BOOST_PP_CAT(prefix, T)) | |
// typename R, typename T1, typename T2, ..., typename TN | |
#define BOOST_SIGNALS2_SIGNATURE_TEMPLATE_DECL(arity) BOOST_SIGNALS2_PREFIXED_SIGNATURE_TEMPLATE_DECL(arity,) | |
// typename prefixT1, typename prefixT2, ..., typename prefixTN | |
#define BOOST_SIGNALS2_PREFIXED_ARGS_TEMPLATE_DECL(arity, prefix) \ | |
BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_INC(arity), typename BOOST_PP_CAT(prefix, T)) | |
// typename T1, typename T2, ..., typename TN | |
#define BOOST_SIGNALS2_ARGS_TEMPLATE_DECL(arity) BOOST_SIGNALS2_PREFIXED_ARGS_TEMPLATE_DECL(arity,) | |
// prefixR, prefixT1, prefixT2, ..., prefixTN | |
#define BOOST_SIGNALS2_PREFIXED_SIGNATURE_TEMPLATE_INSTANTIATION(arity, prefix) \ | |
BOOST_PP_CAT(prefix, R) BOOST_PP_COMMA_IF(arity) BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_INC(arity), BOOST_PP_CAT(prefix, T)) | |
// R, T1, T2, ..., TN | |
#define BOOST_SIGNALS2_SIGNATURE_TEMPLATE_INSTANTIATION(arity) \ | |
BOOST_SIGNALS2_PREFIXED_SIGNATURE_TEMPLATE_INSTANTIATION(arity,) | |
// boost::functionN<R, T1, T2, ..., TN> | |
#define BOOST_SIGNALS2_FUNCTION_N_DECL(arity) BOOST_PP_CAT(boost::function, arity)<\ | |
BOOST_SIGNALS2_SIGNATURE_TEMPLATE_INSTANTIATION(arity) > | |
// R, const boost::signals2::connection&, T1, T2, ..., TN | |
#define BOOST_SIGNALS2_EXT_SLOT_TEMPLATE_INSTANTIATION(arity) \ | |
R, const boost::signals2::connection& BOOST_PP_COMMA_IF(arity) \ | |
BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_INC(arity), T) | |
// boost::functionN<R, const boost::signals2::connection &, T1, T2, ..., TN> | |
#define BOOST_SIGNALS2_EXT_FUNCTION_N_DECL(arity) BOOST_PP_CAT(boost::function, BOOST_PP_INC(arity))<\ | |
BOOST_SIGNALS2_EXT_SLOT_TEMPLATE_INSTANTIATION(arity) > | |
// slotN | |
#define BOOST_SIGNALS2_SLOT_CLASS_NAME(arity) BOOST_PP_CAT(slot, arity) | |
// slotN+1<R, const connection &, T1, T2, ..., TN, extended_slot_function_type> | |
#define BOOST_SIGNALS2_EXTENDED_SLOT_TYPE(arity) \ | |
BOOST_SIGNALS2_SLOT_CLASS_NAME(BOOST_PP_INC(arity))< \ | |
BOOST_SIGNALS2_EXT_SLOT_TEMPLATE_INSTANTIATION(arity), \ | |
extended_slot_function_type> | |
// bound_extended_slot_functionN | |
#define BOOST_SIGNALS2_BOUND_EXTENDED_SLOT_FUNCTION_N(arity) BOOST_PP_CAT(bound_extended_slot_function, arity) | |
// bound_extended_slot_function_helperN | |
#define BOOST_SIGNALS2_BOUND_EXTENDED_SLOT_FUNCTION_INVOKER_N(arity) BOOST_PP_CAT(bound_extended_slot_function_invoker, arity) | |
// typename function_traits<Signature>::argn_type | |
#define BOOST_SIGNALS2_SIGNATURE_TO_ARGN_TYPE(z, n, Signature) \ | |
BOOST_PP_CAT(BOOST_PP_CAT(typename function_traits<Signature>::arg, BOOST_PP_INC(n)), _type) | |
// typename function_traits<Signature>::result_type, | |
// typename function_traits<Signature>::arg1_type, | |
// typename function_traits<Signature>::arg2_type, | |
// ..., | |
// typename function_traits<Signature>::argn_type | |
#define BOOST_SIGNALS2_PORTABLE_SIGNATURE(arity, Signature) \ | |
typename function_traits<Signature>::result_type \ | |
BOOST_PP_COMMA_IF(arity) BOOST_PP_ENUM(arity, BOOST_SIGNALS2_SIGNATURE_TO_ARGN_TYPE, Signature) | |
// prefixTn & argn | |
#define BOOST_SIGNALS2_PREFIXED_FULL_REF_ARG(z, n, prefix) \ | |
BOOST_PP_CAT(BOOST_PP_CAT(prefix, T), BOOST_PP_INC(n)) & BOOST_SIGNALS2_SIGNATURE_ARG_NAME(~, n, ~) | |
// prefixT1 & arg1, prefixT2 & arg2, ..., prefixTn & argn | |
#define BOOST_SIGNALS2_PREFIXED_FULL_REF_ARGS(arity, prefix) \ | |
BOOST_PP_ENUM(arity, BOOST_SIGNALS2_PREFIXED_FULL_REF_ARG, prefix) | |
// T1 & arg1, T2 & arg2, ..., Tn & argn | |
#define BOOST_SIGNALS2_FULL_REF_ARGS(arity) BOOST_SIGNALS2_PREFIXED_FULL_REF_ARGS(arity,) | |
// preprocessed_arg_typeN | |
#define BOOST_SIGNALS2_PREPROCESSED_ARG_N_TYPE_CLASS_NAME(arity) BOOST_PP_CAT(preprocessed_arg_type, arity) | |
// typename R, typename T1, typename T2, ..., typename TN, typename SlotFunction | |
#define BOOST_SIGNALS2_SLOT_TEMPLATE_SPECIALIZATION_DECL(arity) \ | |
BOOST_SIGNALS2_SIGNATURE_TEMPLATE_DECL(arity), \ | |
typename SlotFunction | |
#define BOOST_SIGNALS2_SLOT_TEMPLATE_SPECIALIZATION | |
// typename R, typename T1, typename T2, ..., typename TN, typename Combiner, ... | |
#define BOOST_SIGNALS2_SIGNAL_TEMPLATE_DECL(arity) \ | |
BOOST_SIGNALS2_SIGNATURE_TEMPLATE_DECL(arity), \ | |
typename Combiner, \ | |
typename Group, \ | |
typename GroupCompare, \ | |
typename SlotFunction, \ | |
typename ExtendedSlotFunction, \ | |
typename Mutex | |
// typename R, typename T1, typename T2, ..., typename TN, typename Combiner = optional_last_value<R>, ... | |
#define BOOST_SIGNALS2_SIGNAL_TEMPLATE_DEFAULTED_DECL(arity) \ | |
BOOST_SIGNALS2_SIGNATURE_TEMPLATE_DECL(arity), \ | |
typename Combiner = optional_last_value<R>, \ | |
typename Group = int, \ | |
typename GroupCompare = std::less<Group>, \ | |
typename SlotFunction = BOOST_SIGNALS2_FUNCTION_N_DECL(arity), \ | |
typename ExtendedSlotFunction = BOOST_SIGNALS2_EXT_FUNCTION_N_DECL(arity), \ | |
typename Mutex = signals2::mutex | |
#define BOOST_SIGNALS2_SIGNAL_TEMPLATE_SPECIALIZATION_DECL(arity) BOOST_SIGNALS2_SIGNAL_TEMPLATE_DECL(arity) | |
#define BOOST_SIGNALS2_SIGNAL_TEMPLATE_SPECIALIZATION | |
#define BOOST_SIGNALS2_STD_FUNCTIONAL_BASE(result_type) std_functional_base | |
#define BOOST_SIGNALS2_PP_COMMA_IF(arity) BOOST_PP_COMMA_IF(arity) | |
#else // BOOST_NO_VARIADIC_TEMPLATES | |
#define BOOST_SIGNALS2_SIGNAL_CLASS_NAME(arity) signal | |
#define BOOST_SIGNALS2_WEAK_SIGNAL_CLASS_NAME(arity) weak_signal | |
#define BOOST_SIGNALS2_SIGNAL_IMPL_CLASS_NAME(arity) signal_impl | |
#define BOOST_SIGNALS2_SIGNATURE_TEMPLATE_DECL(arity) typename Signature | |
#define BOOST_SIGNALS2_ARGS_TEMPLATE_INSTANTIATION(arity) Args... | |
#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_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 | |
#define BOOST_SIGNALS2_BOUND_EXTENDED_SLOT_FUNCTION_INVOKER_N(arity) bound_extended_slot_function_invoker | |
#define BOOST_SIGNALS2_FUNCTION_N_DECL(arity) boost::function<Signature> | |
#define BOOST_SIGNALS2_PREFIXED_SIGNATURE_TEMPLATE_DECL(arity, prefix) typename prefixSignature | |
#define BOOST_SIGNALS2_PREFIXED_SIGNATURE_TEMPLATE_INSTANTIATION(arity, prefix) prefixSignature | |
#define BOOST_SIGNALS2_SIGNATURE_FULL_ARGS(arity) Args ... args | |
#define BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(arity) args... | |
#define BOOST_SIGNALS2_PORTABLE_SIGNATURE(arity, Signature) Signature | |
#define BOOST_SIGNALS2_SLOT_CLASS_NAME(arity) slot | |
#define BOOST_SIGNALS2_SLOT_TEMPLATE_SPECIALIZATION_DECL(arity) \ | |
typename SlotFunction, \ | |
typename R, \ | |
typename ... Args | |
#define BOOST_SIGNALS2_SLOT_TEMPLATE_SPECIALIZATION \ | |
<R (Args...), SlotFunction> | |
#define BOOST_SIGNALS2_SIGNAL_TEMPLATE_DECL(arity) \ | |
typename Signature, \ | |
typename Combiner, \ | |
typename Group, \ | |
typename GroupCompare, \ | |
typename SlotFunction, \ | |
typename ExtendedSlotFunction, \ | |
typename Mutex | |
#define BOOST_SIGNALS2_SIGNAL_TEMPLATE_DEFAULTED_DECL(arity) \ | |
typename Signature, \ | |
typename Combiner = optional_last_value<typename boost::function_traits<Signature>::result_type>, \ | |
typename Group = int, \ | |
typename GroupCompare = std::less<Group>, \ | |
typename SlotFunction = boost::function<Signature>, \ | |
typename ExtendedSlotFunction = typename detail::variadic_extended_signature<Signature>::function_type, \ | |
typename Mutex = signals2::mutex | |
#define BOOST_SIGNALS2_SIGNAL_TEMPLATE_SPECIALIZATION_DECL(arity) \ | |
typename Combiner, \ | |
typename Group, \ | |
typename GroupCompare, \ | |
typename SlotFunction, \ | |
typename ExtendedSlotFunction, \ | |
typename Mutex, \ | |
typename R, \ | |
typename ... Args | |
#define BOOST_SIGNALS2_SIGNAL_TEMPLATE_SPECIALIZATION <\ | |
R (Args...), \ | |
Combiner, \ | |
Group, \ | |
GroupCompare, \ | |
SlotFunction, \ | |
ExtendedSlotFunction, \ | |
Mutex> | |
#define BOOST_SIGNALS2_STD_FUNCTIONAL_BASE(result_type) \ | |
std_functional_base<result_type , Args...> | |
#define BOOST_SIGNALS2_PP_COMMA_IF(arity) , | |
#endif // BOOST_NO_VARIADIC_TEMPLATES | |
#endif // BOOST_SIGNALS2_SIGNALS_COMMON_MACROS_HPP |