File indexing completed on 2025-01-18 09:42:58
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef BOOST_NUMERIC_ODEINT_UTIL_DETAIL_IS_RANGE_HPP_INCLUDED
0021 #define BOOST_NUMERIC_ODEINT_UTIL_DETAIL_IS_RANGE_HPP_INCLUDED
0022
0023
0024 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
0025 # pragma once
0026 #endif
0027
0028 #include <cstddef>
0029 #include <boost/range/config.hpp>
0030 #include <boost/mpl/has_xxx.hpp>
0031 #include <boost/mpl/bool.hpp>
0032 #include <boost/mpl/and.hpp>
0033
0034 namespace boost {
0035 namespace numeric {
0036 namespace odeint {
0037
0038
0039
0040 namespace range_detail
0041 {
0042 BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator)
0043 BOOST_MPL_HAS_XXX_TRAIT_DEF(const_iterator)
0044 }
0045
0046 namespace detail
0047 {
0048
0049 template< typename Range >
0050 struct is_range : boost::mpl::and_<range_detail::has_iterator<Range>, range_detail::has_const_iterator<Range> >
0051 {
0052 };
0053
0054
0055
0056
0057
0058 template< typename iteratorT >
0059 struct is_range< std::pair<iteratorT,iteratorT> > : boost::mpl::true_
0060 {
0061 };
0062
0063 template< typename iteratorT >
0064 struct is_range< const std::pair<iteratorT,iteratorT> > : boost::mpl::true_
0065 {
0066 };
0067
0068
0069
0070
0071
0072 template< typename elementT, std::size_t sz >
0073 struct is_range< elementT[sz] > : boost::mpl::true_
0074 {
0075 };
0076
0077 template< typename elementT, std::size_t sz >
0078 struct is_range< const elementT[sz] > : boost::mpl::true_
0079 {
0080 };
0081
0082
0083
0084
0085
0086 template<>
0087 struct is_range< char* > : boost::mpl::true_
0088 {
0089 };
0090
0091 template<>
0092 struct is_range< wchar_t* > : boost::mpl::true_
0093 {
0094 };
0095
0096 template<>
0097 struct is_range< const char* > : boost::mpl::true_
0098 {
0099 };
0100
0101 template<>
0102 struct is_range< const wchar_t* > : boost::mpl::true_
0103 {
0104 };
0105
0106 template<>
0107 struct is_range< char* const > : boost::mpl::true_
0108 {
0109 };
0110
0111 template<>
0112 struct is_range< wchar_t* const > : boost::mpl::true_
0113 {
0114 };
0115
0116 template<>
0117 struct is_range< const char* const > : boost::mpl::true_
0118 {
0119 };
0120
0121 template<>
0122 struct is_range< const wchar_t* const > : boost::mpl::true_
0123 {
0124 };
0125
0126 }
0127
0128 }
0129 }
0130 }
0131
0132
0133
0134 #endif