-
-// For more information, see http://www.boost.org
-
-// William Kempf, Jesse Jones and Karl Nelson were all very helpful in the
-// design of this library.
-
-#ifndef BOOST_FUNCTION_HPP
-#define BOOST_FUNCTION_HPP
-
-#include <boost/function/function_base.hpp>
-#include <boost/type_traits/function_traits.hpp>
-#include <boost/type_traits/same_traits.hpp>
-#include <boost/type_traits/transform_traits.hpp>
-#include <boost/type_traits/ice.hpp>
-#include <boost/function/function0.hpp>
-#include <boost/function/function1.hpp>
-#include <boost/function/function2.hpp>
-#include <boost/function/function3.hpp>
-#include <boost/function/function4.hpp>
-#include <boost/function/function5.hpp>
-#include <boost/function/function6.hpp>
-#include <boost/function/function7.hpp>
-#include <boost/function/function8.hpp>
-#include <boost/function/function9.hpp>
-#include <boost/function/function10.hpp>
-
-namespace boost {
- namespace detail {
- namespace function {
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template<typename Signature>
- struct function_traits
- {
- typedef void result_type;
- typedef void arg1_type;
- typedef void arg2_type;
- typedef void arg3_type;
- typedef void arg4_type;
- typedef void arg5_type;
- typedef void arg6_type;
- typedef void arg7_type;
- typedef void arg8_type;
- typedef void arg9_type;
- typedef void arg10_type;
- };
-
- template<typename R>
- struct function_traits<R (*)(void)>
- {
- typedef R result_type;
- typedef unusable arg1_type;
- typedef unusable arg2_type;
- typedef unusable arg3_type;
- typedef unusable arg4_type;
- typedef unusable arg5_type;
- typedef unusable arg6_type;
- typedef unusable arg7_type;
- typedef unusable arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1>
- struct function_traits<R (*)(T1)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef unusable arg2_type;
- typedef unusable arg3_type;
- typedef unusable arg4_type;
- typedef unusable arg5_type;
- typedef unusable arg6_type;
- typedef unusable arg7_type;
- typedef unusable arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2>
- struct function_traits<R (*)(T1, T2)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef unusable arg3_type;
- typedef unusable arg4_type;
- typedef unusable arg5_type;
- typedef unusable arg6_type;
- typedef unusable arg7_type;
- typedef unusable arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2, typename T3>
- struct function_traits<R (*)(T1, T2, T3)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef T3 arg3_type;
- typedef unusable arg4_type;
- typedef unusable arg5_type;
- typedef unusable arg6_type;
- typedef unusable arg7_type;
- typedef unusable arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2, typename T3, typename T4>
- struct function_traits<R (*)(T1, T2, T3, T4)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef T3 arg3_type;
- typedef T4 arg4_type;
- typedef unusable arg5_type;
- typedef unusable arg6_type;
- typedef unusable arg7_type;
- typedef unusable arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5>
- struct function_traits<R (*)(T1, T2, T3, T4, T5)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef T3 arg3_type;
- typedef T4 arg4_type;
- typedef T5 arg5_type;
- typedef unusable arg6_type;
- typedef unusable arg7_type;
- typedef unusable arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6>
- struct function_traits<R (*)(T1, T2, T3, T4, T5, T6)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef T3 arg3_type;
- typedef T4 arg4_type;
- typedef T5 arg5_type;
- typedef T6 arg6_type;
- typedef unusable arg7_type;
- typedef unusable arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7>
- struct function_traits<R (*)(T1, T2, T3, T4, T5, T6, T7)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef T3 arg3_type;
- typedef T4 arg4_type;
- typedef T5 arg5_type;
- typedef T6 arg6_type;
- typedef T7 arg7_type;
- typedef unusable arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8>
- struct function_traits<R (*)(T1, T2, T3, T4, T5, T6, T7, T8)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef T3 arg3_type;
- typedef T4 arg4_type;
- typedef T5 arg5_type;
- typedef T6 arg6_type;
- typedef T7 arg7_type;
- typedef T8 arg8_type;
- typedef unusable arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8, typename T9>
- struct function_traits<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef T3 arg3_type;
- typedef T4 arg4_type;
- typedef T5 arg5_type;
- typedef T6 arg6_type;
- typedef T7 arg7_type;
- typedef T8 arg8_type;
- typedef T9 arg9_type;
- typedef unusable arg10_type;
- };
-
- template<typename R, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8, typename T9,
- typename T10>
- struct function_traits<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>
- {
- typedef R result_type;
- typedef T1 arg1_type;
- typedef T2 arg2_type;
- typedef T3 arg3_type;
- typedef T4 arg4_type;
- typedef T5 arg5_type;
- typedef T6 arg6_type;
- typedef T7 arg7_type;
- typedef T8 arg8_type;
- typedef T9 arg9_type;
- typedef T10 arg10_type;
- };
-#endif
-
- // Choose the appropriate underlying implementation
- template<int Args> struct real_get_function_impl {};
-
- template<>
- struct real_get_function_impl<0>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function0<R, Policy, Mixin, Allocator> type;
- };
- };
-
- template<>
- struct real_get_function_impl<1>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function1<R, T1, Policy, Mixin, Allocator> type;
- };
- };
-
- template<>
- struct real_get_function_impl<2>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function2<R, T1, T2, Policy, Mixin, Allocator> type;
- };
- };
-
- template<>
- struct real_get_function_impl<3>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function3<R, T1, T2, T3, Policy, Mixin, Allocator> type;
- };
- };
-
- template<>
- struct real_get_function_impl<4>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function4<R, T1, T2, T3, T4, Policy, Mixin, Allocator> type;
- };
- };
-
- template<>
- struct real_get_function_impl<5>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function5<R, T1, T2, T3, T4, T5, Policy, Mixin, Allocator>
- type;
- };
- };
-
- template<>
- struct real_get_function_impl<6>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function6<R, T1, T2, T3, T4, T5, T6, Policy, Mixin, Allocator>
- type;
- };
- };
-
- template<>
- struct real_get_function_impl<7>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function7<R, T1, T2, T3, T4, T5, T6, T7, Policy, Mixin,
- Allocator> type;
- };
- };
-
- template<>
- struct real_get_function_impl<8>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function8<R, T1, T2, T3, T4, T5, T6, T7, T8, Policy, Mixin,
- Allocator> type;
- };
- };
-
- template<>
- struct real_get_function_impl<9>
- {
- template<
- typename R,
- typename T1,
- typename T2,
- typename T3,
- typename T4,
- typename T5,
- typename T6,
- typename T7,
- typename T8,
- typename T9,
- typename T10,
- typename Policy,
- typename Mixin,
- typename Allocator
- >
- struct params
- {
- typedef function9<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, Policy,
- Mixin, Allocator> type;
- };
- };