1 /*
2  *          Copyright Andrey Semashev 2007 - 2015.
3  * Distributed under the Boost Software License, Version 1.0.
4  *    (See accompanying file LICENSE_1_0.txt or copy at
5  *          http://www.boost.org/LICENSE_1_0.txt)
6  */
7 
8 template< BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename ArgT) >
9 BOOST_FORCEINLINE format_named_scope_actor<
10     fallback_to_none,
11     typename boost::log::aux::deduce_char_type<
12         typename parameter::binding<
13             typename boost::log::aux::make_arg_list< BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), ArgT) >::type,
14             keywords::tag::format,
15             void
16         >::type
17     >::type
format_named_scope(attribute_name const & name,BOOST_PP_ENUM_BINARY_PARAMS (BOOST_PP_ITERATION (),ArgT,const & arg))18 > format_named_scope(attribute_name const& name, BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), ArgT, const& arg))
19 {
20     typedef typename boost::log::aux::deduce_char_type<
21         typename parameter::binding<
22             typename boost::log::aux::make_arg_list< BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), ArgT) >::type,
23             keywords::tag::format,
24             void
25         >::type
26     >::type char_type;
27     return aux::format_named_scope< char_type, phoenix::actor >(name, fallback_to_none(), (BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), arg)));
28 }
29 
30 template< typename DescriptorT, template< typename > class ActorT, BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename ArgT) >
31 BOOST_FORCEINLINE format_named_scope_actor<
32     fallback_to_none,
33     typename boost::log::aux::deduce_char_type<
34         typename parameter::binding<
35             typename boost::log::aux::make_arg_list< BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), ArgT) >::type,
36             keywords::tag::format,
37             void
38         >::type
39     >::type,
40     ActorT
41 >
format_named_scope(attribute_keyword<DescriptorT,ActorT> const & keyword,BOOST_PP_ENUM_BINARY_PARAMS (BOOST_PP_ITERATION (),ArgT,const & arg))42 format_named_scope(attribute_keyword< DescriptorT, ActorT > const& keyword, BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), ArgT, const& arg))
43 {
44     BOOST_STATIC_ASSERT_MSG((is_same< typename DescriptorT::value_type, attributes::named_scope::value_type >::value),\
45         "Boost.Log: Named scope formatter only accepts attribute values of type attributes::named_scope::value_type.");
46 
47     typedef typename boost::log::aux::deduce_char_type<
48         typename parameter::binding<
49             typename boost::log::aux::make_arg_list< BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), ArgT) >::type,
50             keywords::tag::format,
51             void
52         >::type
53     >::type char_type;
54     return aux::format_named_scope< char_type, ActorT >(keyword.get_name(), fallback_to_none(), (BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), arg)));
55 }
56 
57 template< typename T, typename FallbackPolicyT, typename TagT, template< typename > class ActorT, BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), typename ArgT) >
58 BOOST_FORCEINLINE format_named_scope_actor<
59     FallbackPolicyT,
60     typename boost::log::aux::deduce_char_type<
61         typename parameter::binding<
62             typename boost::log::aux::make_arg_list< BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), ArgT) >::type,
63             keywords::tag::format,
64             void
65         >::type
66     >::type,
67     ActorT
68 >
format_named_scope(attribute_actor<T,FallbackPolicyT,TagT,ActorT> const & placeholder,BOOST_PP_ENUM_BINARY_PARAMS (BOOST_PP_ITERATION (),ArgT,const & arg))69 format_named_scope(attribute_actor< T, FallbackPolicyT, TagT, ActorT > const& placeholder, BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), ArgT, const& arg))
70 {
71     BOOST_STATIC_ASSERT_MSG((is_same< T, attributes::named_scope::value_type >::value),\
72         "Boost.Log: Named scope formatter only accepts attribute values of type attributes::named_scope::value_type.");
73 
74     typedef typename boost::log::aux::deduce_char_type<
75         typename parameter::binding<
76             typename boost::log::aux::make_arg_list< BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), ArgT) >::type,
77             keywords::tag::format,
78             void
79         >::type
80     >::type char_type;
81     return aux::format_named_scope< char_type, ActorT >(placeholder.get_name(), placeholder.get_fallback_policy(), (BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), arg)));
82 }
83