| 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 | #include <boost/test/detail/global_typedef.hpp> |
| 24 | |
| 25 | #include <boost/test/detail/suppress_warnings.hpp> |
| 26 | |
| 27 | |
| 28 | // New CLA API available only for some C++11 compilers |
| 29 | #if !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) \ |
| 30 | && !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) \ |
| 31 | && !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) \ |
| 32 | && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) |
| 33 | #define BOOST_TEST_CLA_NEW_API |
| 34 | #endif |
| 35 | |
| 36 | namespace boost { |
| 37 | namespace runtime { |
| 38 | |
| 39 | // ************************************************************************** // |
| 40 | // ************** environment variable modifiers ************** // |
| 41 | // ************************************************************************** // |
| 42 | |
| 43 | namespace { |
| 44 | |
| 45 | #ifdef BOOST_TEST_CLA_NEW_API |
| 46 | auto const& description = unit_test::static_constant<nfp::typed_keyword<cstring,struct description_t>>::value; |
| 47 | auto const& help = unit_test::static_constant<nfp::typed_keyword<cstring,struct help_t>>::value; |
| 48 | auto const& env_var = unit_test::static_constant<nfp::typed_keyword<cstring,struct env_var_t>>::value; |
| 49 | auto const& end_of_params = unit_test::static_constant<nfp::typed_keyword<cstring,struct end_of_params_t>>::value; |
| 50 | auto const& negation_prefix = unit_test::static_constant<nfp::typed_keyword<cstring,struct neg_prefix_t>>::value; |
| 51 | auto const& value_hint = unit_test::static_constant<nfp::typed_keyword<cstring,struct value_hint_t>>::value; |
| 52 | auto const& optional_value = unit_test::static_constant<nfp::keyword<struct optional_value_t>>::value; |
| 53 | auto const& default_value = unit_test::static_constant<nfp::keyword<struct default_value_t>>::value; |
| 54 | auto const& callback = unit_test::static_constant<nfp::keyword<struct callback_t>>::value; |
| 55 | |
| 56 | template<typename EnumType> |
| 57 | using enum_values = unit_test::static_constant< |
| 58 | nfp::typed_keyword<std::initializer_list<std::pair<const cstring,EnumType>>, struct enum_values_t> |
| 59 | >; |
| 60 | |
| 61 | #else |
| 62 | |
| 63 | nfp::typed_keyword<cstring,struct description_t> description; |
| 64 | nfp::typed_keyword<cstring,struct help_t> help; |
| 65 | nfp::typed_keyword<cstring,struct env_var_t> env_var; |
| 66 | nfp::typed_keyword<cstring,struct end_of_params_t> end_of_params; |
| 67 | nfp::typed_keyword<cstring,struct neg_prefix_t> negation_prefix; |
| 68 | nfp::typed_keyword<cstring,struct value_hint_t> value_hint; |
| 69 | nfp::keyword<struct optional_value_t> optional_value; |
| 70 | nfp::keyword<struct default_value_t> default_value; |
| 71 | nfp::keyword<struct callback_t> callback; |
| 72 | |
| 73 | template<typename EnumType> |
| 74 | struct enum_values_list { |
| 75 | typedef std::pair<cstring,EnumType> ElemT; |
| 76 | typedef std::vector<ElemT> ValuesT; |
| 77 | |
| 78 | enum_values_list const& |
| 79 | operator()( cstring k, EnumType v ) const |
| 80 | { |
| 81 | const_cast<enum_values_list*>(this)->m_values.push_back( ElemT( k, v ) ); |
| 82 | |
| 83 | return *this; |
| 84 | } |
| 85 | |
| 86 | operator ValuesT const&() const { return m_values; } |
| 87 | |
| 88 | private: |
| 89 | ValuesT m_values; |
| 90 | }; |
| 91 | |
| 92 | template<typename EnumType> |
| 93 | struct enum_values : unit_test::static_constant< |
| 94 | nfp::typed_keyword<enum_values_list<EnumType>, struct enum_values_t> > |
| 95 | { |
| 96 | }; |
| 97 | |
| 98 | #endif |
| 99 | |
| 100 | } // local namespace |
| 101 | |
| 102 | } // namespace runtime |
| 103 | } // namespace boost |
| 104 | |
| 105 | #include <boost/test/detail/enable_warnings.hpp> |
| 106 | |
| 107 | #endif // BOOST_TEST_UTILS_RUNTIME_MODIFIER_HPP |
| 108 | |