Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:42:58

0001 /*
0002  [auto_generated]
0003  boost/numeric/odeint/util/detail/is_range.hpp
0004 
0005  [begin_description]
0006  is_range implementation. Taken from the boost::range library.
0007  [end_description]
0008 
0009  Copyright 2011-2013 Karsten Ahnert
0010  Copyright 2011-2013 Thorsten Ottosen
0011 
0012 
0013 
0014  Distributed under the Boost Software License, Version 1.0.
0015  (See accompanying file LICENSE_1_0.txt or
0016  copy at http://www.boost.org/LICENSE_1_0.txt)
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 // pair
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 // array
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 // string
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 } // namespace detail
0127 
0128 } // namespace odeint
0129 } // namespace numeric
0130 } // namespace boost
0131 
0132 
0133 
0134 #endif // BOOST_NUMERIC_ODEINT_UTIL_DETAIL_IS_RANGE_HPP_INCLUDED