1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/stdapis/boost/range/iterator.hpp Wed Mar 31 12:33:34 2010 +0100
1.3 @@ -0,0 +1,128 @@
1.4 +// Boost.Range library
1.5 +//
1.6 +// Copyright Thorsten Ottosen 2003-2004. Use, modification and
1.7 +// distribution is subject to the Boost Software License, Version
1.8 +// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
1.9 +// http://www.boost.org/LICENSE_1_0.txt)
1.10 +//
1.11 +// For more information, see http://www.boost.org/libs/range/
1.12 +//
1.13 +
1.14 +#ifndef BOOST_RANGE_ITERATOR_HPP
1.15 +#define BOOST_RANGE_ITERATOR_HPP
1.16 +
1.17 +#if defined(_MSC_VER) && (_MSC_VER >= 1200)
1.18 +# pragma once
1.19 +#endif
1.20 +
1.21 +#include <boost/range/config.hpp>
1.22 +
1.23 +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.24 +#include <boost/range/detail/iterator.hpp>
1.25 +#else
1.26 +
1.27 +#include <boost/iterator/iterator_traits.hpp>
1.28 +#include <cstddef>
1.29 +#include <utility>
1.30 +
1.31 +namespace boost
1.32 +{
1.33 + //////////////////////////////////////////////////////////////////////////
1.34 + // default
1.35 + //////////////////////////////////////////////////////////////////////////
1.36 +
1.37 + template< typename C >
1.38 + struct range_iterator
1.39 + {
1.40 + typedef BOOST_DEDUCED_TYPENAME C::iterator type;
1.41 + };
1.42 +
1.43 + //////////////////////////////////////////////////////////////////////////
1.44 + // pair
1.45 + //////////////////////////////////////////////////////////////////////////
1.46 +
1.47 + template< typename Iterator >
1.48 + struct range_iterator< std::pair<Iterator,Iterator> >
1.49 + {
1.50 + typedef Iterator type;
1.51 + };
1.52 +
1.53 + template< typename Iterator >
1.54 + struct range_iterator< const std::pair<Iterator,Iterator> >
1.55 + {
1.56 + typedef Iterator type;
1.57 + };
1.58 +
1.59 + //////////////////////////////////////////////////////////////////////////
1.60 + // array
1.61 + //////////////////////////////////////////////////////////////////////////
1.62 +
1.63 + template< typename T, std::size_t sz >
1.64 + struct range_iterator< T[sz] >
1.65 + {
1.66 + typedef T* type;
1.67 + };
1.68 +
1.69 + template< typename T, std::size_t sz >
1.70 + struct range_iterator< const T[sz] >
1.71 + {
1.72 + typedef const T* type;
1.73 + };
1.74 +
1.75 + //////////////////////////////////////////////////////////////////////////
1.76 + // string
1.77 + //////////////////////////////////////////////////////////////////////////
1.78 +
1.79 + template<>
1.80 + struct range_iterator< char* >
1.81 + {
1.82 + typedef char* type;
1.83 + };
1.84 +
1.85 + template<>
1.86 + struct range_iterator< wchar_t* >
1.87 + {
1.88 + typedef wchar_t* type;
1.89 + };
1.90 +
1.91 + template<>
1.92 + struct range_iterator< const char* >
1.93 + {
1.94 + typedef const char* type;
1.95 + };
1.96 +
1.97 + template<>
1.98 + struct range_iterator< const wchar_t* >
1.99 + {
1.100 + typedef const wchar_t* type;
1.101 + };
1.102 +
1.103 + template<>
1.104 + struct range_iterator< char* const >
1.105 + {
1.106 + typedef char* type;
1.107 + };
1.108 +
1.109 + template<>
1.110 + struct range_iterator< wchar_t* const >
1.111 + {
1.112 + typedef wchar_t* type;
1.113 + };
1.114 +
1.115 + template<>
1.116 + struct range_iterator< const char* const >
1.117 + {
1.118 + typedef const char* type;
1.119 + };
1.120 +
1.121 + template<>
1.122 + struct range_iterator< const wchar_t* const >
1.123 + {
1.124 + typedef const wchar_t* type;
1.125 + };
1.126 +
1.127 +} // namespace boost
1.128 +
1.129 +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.130 +
1.131 +#endif