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/
12 #ifndef BOOST_RANGE_DETAIL_VC6_SIZE_HPP
13 #define BOOST_RANGE_DETAIL_VC6_SIZE_HPP
15 #include <boost/range/detail/implementation_help.hpp>
16 #include <boost/range/detail/size_type.hpp>
17 #include <boost/range/detail/common.hpp>
18 #include <boost/range/detail/remove_extent.hpp>
23 namespace range_detail
25 template< typename T >
28 //////////////////////////////////////////////////////////////////////
30 //////////////////////////////////////////////////////////////////////
33 struct range_size_<std_container_>
35 template< typename C >
37 static BOOST_RANGE_DEDUCED_TYPENAME C::size_type fun( const C& c )
44 //////////////////////////////////////////////////////////////////////
46 //////////////////////////////////////////////////////////////////////
49 struct range_size_<std_pair_>
51 template< typename P >
53 static BOOST_RANGE_DEDUCED_TYPENAME range_size<P>::type
56 return std::distance( p.first, p.second );
61 //////////////////////////////////////////////////////////////////////
63 //////////////////////////////////////////////////////////////////////
66 struct range_size_<array_>
70 static std::size_t fun(T& t)
72 return remove_extent<T>::size;
78 struct range_size_<char_array_>
82 static std::size_t fun(T& t)
84 return sizeof(T) / sizeof(T[0]);
90 struct range_size_<wchar_t_array_>
94 static std::size_t fun(T& t)
96 return sizeof(T) / sizeof(T[0]);
101 //////////////////////////////////////////////////////////////////////
103 //////////////////////////////////////////////////////////////////////
106 struct range_size_<char_ptr_>
110 static std::size_t fun( const char* s )
112 return boost::range_detail::str_size( s );
118 struct range_size_<const_char_ptr_>
122 static std::size_t fun( const char* s )
124 return boost::range_detail::str_size( s );
130 struct range_size_<wchar_t_ptr_>
134 static std::size_t fun( const wchar_t* s )
136 return boost::range_detail::str_size( s );
142 struct range_size_<const_wchar_t_ptr_>
146 static std::size_t fun( const wchar_t* s )
148 return boost::range_detail::str_size( s );
153 } // namespace 'range_detail'
156 template< typename C >
157 BOOST_RANGE_DEDUCED_TYPENAME range_size<C>::type
160 return range_detail::range_size_<range_detail::range<C>::type>::inner<C>::fun( c );
163 } // namespace 'boost'