epoc32/include/stdapis/boost/detail/iterator.hpp
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 2fe1408b6811
child 4 837f303aceeb
equal deleted inserted replaced
2:2fe1408b6811 3:e1b950c65cb4
       
     1 // Boost.Range library
       
     2 //
       
     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)
       
     7 //
       
     8 // For more information, see http://www.boost.org/libs/range/
       
     9 //
       
    10 
       
    11 #ifndef BOOST_RANGE_ITERATOR_HPP
       
    12 #define BOOST_RANGE_ITERATOR_HPP
       
    13 
       
    14 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
       
    15 # pragma once
       
    16 #endif
       
    17 
       
    18 #include <boost/range/config.hpp>
       
    19 
       
    20 #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
       
    21 #include <boost/range/detail/iterator.hpp>
       
    22 #else
       
    23 
       
    24 #include <boost/iterator/iterator_traits.hpp>
       
    25 #include <cstddef>
       
    26 #include <utility>
       
    27 
       
    28 namespace boost
       
    29 {
       
    30     //////////////////////////////////////////////////////////////////////////
       
    31     // default
       
    32     //////////////////////////////////////////////////////////////////////////
       
    33     
       
    34     template< typename C >
       
    35     struct range_iterator
       
    36     {
       
    37         typedef BOOST_DEDUCED_TYPENAME C::iterator type;
       
    38     };
       
    39     
       
    40     //////////////////////////////////////////////////////////////////////////
       
    41     // pair
       
    42     //////////////////////////////////////////////////////////////////////////
       
    43 
       
    44     template< typename Iterator >
       
    45     struct range_iterator< std::pair<Iterator,Iterator> >
       
    46     {
       
    47         typedef Iterator type;
       
    48     };
       
    49     
       
    50     template< typename Iterator >
       
    51     struct range_iterator< const std::pair<Iterator,Iterator> >
       
    52     {
       
    53         typedef Iterator type;
       
    54     };
       
    55 
       
    56     //////////////////////////////////////////////////////////////////////////
       
    57     // array
       
    58     //////////////////////////////////////////////////////////////////////////
       
    59 
       
    60     template< typename T, std::size_t sz >
       
    61     struct range_iterator< T[sz] >
       
    62     {
       
    63         typedef T* type;
       
    64     };
       
    65 
       
    66     template< typename T, std::size_t sz >
       
    67     struct range_iterator< const T[sz] >
       
    68     {
       
    69         typedef const T* type;
       
    70     };
       
    71 
       
    72     //////////////////////////////////////////////////////////////////////////
       
    73     // string
       
    74     //////////////////////////////////////////////////////////////////////////
       
    75 
       
    76     template<>
       
    77     struct range_iterator< char* >
       
    78     {
       
    79         typedef char* type;
       
    80     };
       
    81 
       
    82     template<>
       
    83     struct range_iterator< wchar_t* >
       
    84     {
       
    85         typedef wchar_t* type;
       
    86     };
       
    87 
       
    88     template<>
       
    89     struct range_iterator< const char* >
       
    90     {
       
    91         typedef const char* type;
       
    92     };
       
    93 
       
    94     template<>
       
    95     struct range_iterator< const wchar_t* >
       
    96     {
       
    97         typedef const wchar_t* type;
       
    98     };
       
    99 
       
   100     template<>
       
   101     struct range_iterator< char* const >
       
   102     {
       
   103         typedef char* type;
       
   104     };
       
   105 
       
   106     template<>
       
   107     struct range_iterator< wchar_t* const >
       
   108     {
       
   109         typedef wchar_t* type;
       
   110     };
       
   111 
       
   112     template<>
       
   113     struct range_iterator< const char* const >
       
   114     {
       
   115         typedef const char* type;
       
   116     };
       
   117 
       
   118     template<>
       
   119     struct range_iterator< const wchar_t* const >
       
   120     {
       
   121         typedef const wchar_t* type;
       
   122     };
       
   123 
       
   124 } // namespace boost
       
   125 
       
   126 #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
       
   127 
       
   128 #endif