Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:43:29

0001 // Copyright Daniel Wallin 2006.
0002 // Distributed under the Boost Software License, Version 1.0.
0003 // (See accompanying file LICENSE_1_0.txt or copy at
0004 // http://www.boost.org/LICENSE_1_0.txt)
0005 
0006 #ifndef BOOST_PARAMETER_SET_060912_HPP
0007 #define BOOST_PARAMETER_SET_060912_HPP
0008 
0009 #include <boost/parameter/config.hpp>
0010 
0011 #if defined(BOOST_PARAMETER_CAN_USE_MP11)
0012 #include <boost/mp11/list.hpp>
0013 
0014 namespace boost { namespace parameter { namespace aux {
0015 
0016     typedef ::boost::mp11::mp_list<> set0;
0017 }}} // namespace boost::parameter::aux
0018 
0019 #include <boost/mp11/algorithm.hpp>
0020 
0021 namespace boost { namespace parameter { namespace aux {
0022 
0023     template <typename S, typename K>
0024     struct insert_
0025     {
0026         using type = ::boost::mp11::mp_insert_c<S,0,K>;
0027     };
0028 }}} // namespace boost::parameter::aux
0029 
0030 #include <boost/mp11/integral.hpp>
0031 #include <boost/mp11/utility.hpp>
0032 #include <type_traits>
0033 
0034 namespace boost { namespace parameter { namespace aux {
0035 
0036     template <typename Set, typename K>
0037     struct has_key_
0038     {
0039         using type = ::boost::mp11::mp_if<
0040             ::boost::mp11::mp_empty<Set>
0041           , ::boost::mp11::mp_false
0042           , ::std::is_same<
0043                 ::boost::mp11::mp_find<Set,K>
0044               , ::boost::mp11::mp_size<Set>
0045             >
0046         >;
0047     };
0048 }}} // namespace boost::parameter::aux
0049 
0050 #elif BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
0051 #include <boost/mpl/list.hpp>
0052 
0053 namespace boost { namespace parameter { namespace aux {
0054 
0055     typedef ::boost::mpl::list0<> set0;
0056 }}} // namespace boost::parameter::aux
0057 
0058 #include <boost/mpl/push_front.hpp>
0059 
0060 namespace boost { namespace parameter { namespace aux {
0061 
0062     template <typename Set, typename K>
0063     struct insert_ : ::boost::mpl::push_front<Set,K>
0064     {
0065     };
0066 }}} // namespace boost::parameter::aux
0067 
0068 #include <boost/mpl/bool.hpp>
0069 #include <boost/mpl/if.hpp>
0070 #include <boost/mpl/end.hpp>
0071 #include <boost/mpl/find.hpp>
0072 #include <boost/type_traits/is_same.hpp>
0073 
0074 namespace boost { namespace parameter { namespace aux {
0075 
0076     template <typename Set, typename K>
0077     struct has_key_
0078     {
0079         typedef typename ::boost::mpl::find<Set,K>::type iter;
0080         typedef typename ::boost::mpl::if_<
0081             ::boost::is_same<iter,typename ::boost::mpl::end<Set>::type>
0082           , ::boost::mpl::false_
0083           , ::boost::mpl::true_
0084         >::type type;
0085     };
0086 }}} // namespace boost::parameter::aux
0087 
0088 #else   // !BOOST_PARAMETER_CAN_USE_MP11 && Borland workarounds not needed
0089 #include <boost/mpl/set/set0.hpp>
0090 
0091 namespace boost { namespace parameter { namespace aux {
0092 
0093     typedef ::boost::mpl::set0<> set0;
0094 }}} // namespace boost::parameter::aux
0095 
0096 #include <boost/mpl/insert.hpp>
0097 
0098 namespace boost { namespace parameter { namespace aux {
0099 
0100     template <typename Set, typename K>
0101     struct insert_ : ::boost::mpl::insert<Set,K>
0102     {
0103     };
0104 }}} // namespace boost::parameter::aux
0105 
0106 #include <boost/mpl/has_key.hpp>
0107 
0108 namespace boost { namespace parameter { namespace aux {
0109 
0110     template <typename Set, typename K>
0111     struct has_key_ : ::boost::mpl::has_key<Set,K>
0112     {
0113     };
0114 }}} // namespace boost::parameter::aux
0115 
0116 #endif  // BOOST_PARAMETER_CAN_USE_MP11 || Borland workarounds needed
0117 #endif  // include guard
0118