Chris@16: /* Chris@16: [auto_generated] Chris@16: boost/numeric/odeint/util/detail/is_range.hpp Chris@16: Chris@16: [begin_description] Chris@16: is_range implementation. Taken from the boost::range library. Chris@16: [end_description] Chris@16: Chris@101: Copyright 2011-2013 Karsten Ahnert Chris@101: Copyright 2011-2013 Thorsten Ottosen Chris@16: Chris@16: Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. Chris@16: (See accompanying file LICENSE_1_0.txt or Chris@16: copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: */ Chris@16: Chris@16: Chris@16: #ifndef BOOST_NUMERIC_ODEINT_UTIL_DETAIL_IS_RANGE_HPP_INCLUDED Chris@16: #define BOOST_NUMERIC_ODEINT_UTIL_DETAIL_IS_RANGE_HPP_INCLUDED Chris@16: Chris@16: Chris@16: #if defined(_MSC_VER) && (_MSC_VER >= 1200) Chris@16: # pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace numeric { Chris@16: namespace odeint { Chris@16: Chris@16: Chris@16: Chris@16: namespace range_detail Chris@16: { Chris@16: BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator) Chris@16: BOOST_MPL_HAS_XXX_TRAIT_DEF(const_iterator) Chris@16: } Chris@16: Chris@16: namespace detail Chris@16: { Chris@16: Chris@16: template< typename Range > Chris@16: struct is_range : boost::mpl::and_, range_detail::has_const_iterator > Chris@16: { Chris@16: }; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: // pair Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template< typename iteratorT > Chris@16: struct is_range< std::pair > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template< typename iteratorT > Chris@16: struct is_range< const std::pair > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: // array Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template< typename elementT, std::size_t sz > Chris@16: struct is_range< elementT[sz] > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template< typename elementT, std::size_t sz > Chris@16: struct is_range< const elementT[sz] > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: // string Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template<> Chris@16: struct is_range< char* > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct is_range< wchar_t* > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct is_range< const char* > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct is_range< const wchar_t* > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct is_range< char* const > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct is_range< wchar_t* const > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct is_range< const char* const > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct is_range< const wchar_t* const > : boost::mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: } // namespace detail Chris@16: Chris@16: } // namespace odeint Chris@16: } // namespace numeric Chris@16: } // namespace boost Chris@16: Chris@16: Chris@16: Chris@16: #endif // BOOST_NUMERIC_ODEINT_UTIL_DETAIL_IS_RANGE_HPP_INCLUDED