epoc32/include/stdapis/boost/iterator/iterator_traits.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 // Copyright David Abrahams 2003.
     2 // Distributed under the Boost Software License, Version 1.0. (See
     3 // accompanying file LICENSE_1_0.txt or copy at
     4 // http://www.boost.org/LICENSE_1_0.txt)
     5 #ifndef ITERATOR_TRAITS_DWA200347_HPP
     6 # define ITERATOR_TRAITS_DWA200347_HPP
     7 
     8 # include <boost/detail/iterator.hpp>
     9 # include <boost/detail/workaround.hpp>
    10 
    11 namespace boost { 
    12 
    13 // Unfortunately, g++ 2.95.x chokes when we define a class template
    14 // iterator_category which has the same name as its
    15 // std::iterator_category() function, probably due in part to the
    16 // "std:: is visible globally" hack it uses.  Use
    17 // BOOST_ITERATOR_CATEGORY to write code that's portable to older
    18 // GCCs.
    19 
    20 # if BOOST_WORKAROUND(__GNUC__, <= 2)
    21 #  define BOOST_ITERATOR_CATEGORY iterator_category_
    22 # else
    23 #  define BOOST_ITERATOR_CATEGORY iterator_category
    24 # endif
    25 
    26 
    27 template <class Iterator>
    28 struct iterator_value
    29 {
    30     typedef typename detail::iterator_traits<Iterator>::value_type type;
    31 };
    32   
    33 template <class Iterator>
    34 struct iterator_reference
    35 {
    36     typedef typename detail::iterator_traits<Iterator>::reference type;
    37 };
    38   
    39   
    40 template <class Iterator>
    41 struct iterator_pointer
    42 {
    43     typedef typename detail::iterator_traits<Iterator>::pointer type;
    44 };
    45   
    46 template <class Iterator>
    47 struct iterator_difference
    48 {
    49     typedef typename detail::iterator_traits<Iterator>::difference_type type;
    50 };
    51 
    52 template <class Iterator>
    53 struct BOOST_ITERATOR_CATEGORY
    54 {
    55     typedef typename detail::iterator_traits<Iterator>::iterator_category type;
    56 };
    57 
    58 # if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
    59 template <>
    60 struct iterator_value<int>
    61 {
    62     typedef void type;
    63 };
    64   
    65 template <>
    66 struct iterator_reference<int>
    67 {
    68     typedef void type;
    69 };
    70 
    71 template <>
    72 struct iterator_pointer<int>
    73 {
    74     typedef void type;
    75 };
    76   
    77 template <>
    78 struct iterator_difference<int>
    79 {
    80     typedef void type;
    81 };
    82   
    83 template <>
    84 struct BOOST_ITERATOR_CATEGORY<int>
    85 {
    86     typedef void type;
    87 };
    88 # endif
    89 
    90 } // namespace boost::iterator
    91 
    92 #endif // ITERATOR_TRAITS_DWA200347_HPP