1// (C) Copyright Gennadiy Rozental 2001.
2// Use, modification, and distribution are subject to the
3// Boost Software License, Version 1.0. (See accompanying file
4// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6// See http://www.boost.org/libs/test for the library home page.
7//
8// File : $RCSfile$
9//
10// Version : $Revision$
11//
12// Description : parameter modifiers
13// ***************************************************************************
14
15#ifndef BOOST_TEST_UTILS_RUNTIME_MODIFIER_HPP
16#define BOOST_TEST_UTILS_RUNTIME_MODIFIER_HPP
17
18// Boost.Test Runtime parameters
19#include <boost/test/utils/runtime/fwd.hpp>
20
21// Boost.Test
22#include <boost/test/utils/named_params.hpp>
23
24#include <boost/test/detail/suppress_warnings.hpp>
25
26namespace boost {
27namespace runtime {
28
29// ************************************************************************** //
30// ************** environment variable modifiers ************** //
31// ************************************************************************** //
32
33namespace {
34
35#if !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
36#define BOOST_TEST_CLA_NEW_API
37#endif
38
39#ifdef BOOST_TEST_CLA_NEW_API
40auto const& description = unit_test::static_constant<nfp::typed_keyword<cstring,struct description_t>>::value;
41auto const& help = unit_test::static_constant<nfp::typed_keyword<cstring,struct help_t>>::value;
42auto const& env_var = unit_test::static_constant<nfp::typed_keyword<cstring,struct env_var_t>>::value;
43auto const& end_of_params = unit_test::static_constant<nfp::typed_keyword<cstring,struct end_of_params_t>>::value;
44auto const& negation_prefix = unit_test::static_constant<nfp::typed_keyword<cstring,struct neg_prefix_t>>::value;
45auto const& value_hint = unit_test::static_constant<nfp::typed_keyword<cstring,struct value_hint_t>>::value;
46auto const& optional_value = unit_test::static_constant<nfp::keyword<struct optional_value_t>>::value;
47auto const& default_value = unit_test::static_constant<nfp::keyword<struct default_value_t>>::value;
48auto const& callback = unit_test::static_constant<nfp::keyword<struct callback_t>>::value;
49
50template<typename EnumType>
51using enum_values = unit_test::static_constant<
52 nfp::typed_keyword<std::initializer_list<std::pair<const cstring,EnumType>>, struct enum_values_t>
53>;
54
55#else
56
57nfp::typed_keyword<cstring,struct description_t> description;
58nfp::typed_keyword<cstring,struct help_t> help;
59nfp::typed_keyword<cstring,struct env_var_t> env_var;
60nfp::typed_keyword<cstring,struct end_of_params_t> end_of_params;
61nfp::typed_keyword<cstring,struct neg_prefix_t> negation_prefix;
62nfp::typed_keyword<cstring,struct value_hint_t> value_hint;
63nfp::keyword<struct optional_value_t> optional_value;
64nfp::keyword<struct default_value_t> default_value;
65nfp::keyword<struct callback_t> callback;
66
67template<typename EnumType>
68struct enum_values_list {
69 typedef std::pair<cstring,EnumType> ElemT;
70 typedef std::vector<ElemT> ValuesT;
71
72 enum_values_list const&
73 operator()( cstring k, EnumType v ) const
74 {
75 const_cast<enum_values_list*>(this)->m_values.push_back( ElemT( k, v ) );
76
77 return *this;
78 }
79
80 operator ValuesT const&() const { return m_values; }
81
82private:
83 ValuesT m_values;
84};
85
86template<typename EnumType>
87struct enum_values : unit_test::static_constant<
88 nfp::typed_keyword<enum_values_list<EnumType>, struct enum_values_t> >
89{
90};
91
92#endif
93
94} // local namespace
95
96} // namespace runtime
97} // namespace boost
98
99#include <boost/test/detail/enable_warnings.hpp>
100
101#endif // BOOST_TEST_UTILS_RUNTIME_MODIFIER_HPP
102

source code of boost/boost/test/utils/runtime/modifier.hpp