/Src/Dependencies/Boost/boost/fusion/algorithm/query/detail/count.hpp
http://hadesmem.googlecode.com/ · C++ Header · 78 lines · 59 code · 11 blank · 8 comment · 1 complexity · d779fcc8838f6f23a27d094a289d7c3e MD5 · raw file
- /*=============================================================================
- Copyright (c) 2001-2006 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- ==============================================================================*/
- #if !defined(FUSION_COUNT_09162005_0158)
- #define FUSION_COUNT_09162005_0158
- #include <boost/config.hpp>
- #include <boost/mpl/or.hpp>
- #include <boost/type_traits/is_convertible.hpp>
- #include <boost/fusion/support/detail/access.hpp>
- #if defined (BOOST_MSVC)
- # pragma warning(push)
- # pragma warning (disable: 4512) // assignment operator could not be generated.
- #endif
- namespace boost { namespace fusion { namespace detail
- {
- template <bool is_convertible>
- struct compare_convertible;
- // T1 is convertible to T2 or vice versa
- template <>
- struct compare_convertible<true>
- {
- template <typename T1, typename T2>
- static bool
- call(T1 const& x, T2 const& y)
- {
- return x == y;
- }
- };
- // T1 is NOT convertible to T2 NOR vice versa
- template <>
- struct compare_convertible<false>
- {
- template <typename T1, typename T2>
- static bool
- call(T1 const&, T2 const&)
- {
- return false;
- }
- };
- template <typename T1>
- struct count_compare
- {
- typedef typename detail::call_param<T1>::type param;
- count_compare(param in_x)
- : x(in_x) {}
- template <typename T2>
- bool
- operator()(T2 const& y)
- {
- return
- compare_convertible<
- mpl::or_<
- is_convertible<T1, T2>
- , is_convertible<T2, T1>
- >::value
- >::call(x, y);
- }
- param x;
- };
- }}}
- #if defined (BOOST_MSVC)
- # pragma warning(pop)
- #endif
- #endif