3 // Copyright Thorsten Ottosen 2003-2004. Use, modification and
4 // distribution is subject to the Boost Software License, Version
5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
8 // For more information, see http://www.boost.org/libs/range/
11 #ifndef BOOST_RANGE_DETAIL_VC6_END_HPP
12 #define BOOST_RANGE_DETAIL_VC6_END_HPP
14 #include <boost/range/detail/implementation_help.hpp>
15 #include <boost/range/detail/implementation_help.hpp>
16 #include <boost/range/result_iterator.hpp>
17 #include <boost/range/detail/common.hpp>
18 #include <boost/range/detail/remove_extent.hpp>
22 namespace range_detail
24 template< typename T >
27 //////////////////////////////////////////////////////////////////////
29 //////////////////////////////////////////////////////////////////////
32 struct range_end<std_container_>
34 template< typename C >
36 static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<C>::type
44 //////////////////////////////////////////////////////////////////////
46 //////////////////////////////////////////////////////////////////////
49 struct range_end<std_pair_>
51 template< typename P >
53 static BOOST_RANGE_DEDUCED_TYPENAME range_result_iterator<P>::type
61 //////////////////////////////////////////////////////////////////////
63 //////////////////////////////////////////////////////////////////////
66 struct range_end<array_>
68 template< typename T >
70 static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
73 return t + remove_extent<T>::size;
80 struct range_end<char_array_>
82 template< typename T >
84 static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
87 return t + remove_extent<T>::size;
93 struct range_end<wchar_t_array_>
95 template< typename T >
97 static BOOST_DEDUCED_TYPENAME remove_extent<T>::type*
100 return t + remove_extent<T>::size;
105 //////////////////////////////////////////////////////////////////////
107 //////////////////////////////////////////////////////////////////////
110 struct range_end<char_ptr_>
112 template< typename T >
114 static char* fun( char* s )
116 return boost::range_detail::str_end( s );
122 struct range_end<const_char_ptr_>
124 template< typename T >
126 static const char* fun( const char* s )
128 return boost::range_detail::str_end( s );
134 struct range_end<wchar_t_ptr_>
136 template< typename T >
138 static wchar_t* fun( wchar_t* s )
140 return boost::range_detail::str_end( s );
147 struct range_end<const_wchar_t_ptr_>
149 template< typename T >
151 static const wchar_t* fun( const wchar_t* s )
153 return boost::range_detail::str_end( s );
158 } // namespace 'range_detail'
160 template< typename C >
161 inline BOOST_DEDUCED_TYPENAME range_result_iterator<C>::type
164 return range_detail::range_end<range_detail::range<C>::type>::inner<C>::fun( c );
167 } // namespace 'boost'