ossrv_pub/boost_apis/boost/iterator.hpp
changeset 31 ce057bb09d0b
parent 0 e4d67989cc36
equal deleted inserted replaced
30:e20de85af2ee 31:ce057bb09d0b
       
     1 //  interator.hpp workarounds for non-conforming standard libraries  ---------//
       
     2 
       
     3 //  (C) Copyright Beman Dawes 2000. Distributed under the Boost
       
     4 //  Software License, Version 1.0. (See accompanying file
       
     5 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       
     6 
       
     7 //  See http://www.boost.org/libs/utility for documentation.
       
     8 
       
     9 //  Revision History
       
    10 //  12 Jan 01 added <cstddef> for std::ptrdiff_t (Jens Maurer)
       
    11 //  28 Jun 00 Workarounds to deal with known MSVC bugs (David Abrahams)
       
    12 //  26 Jun 00 Initial version (Jeremy Siek)
       
    13 
       
    14 #ifndef BOOST_ITERATOR_HPP
       
    15 #define BOOST_ITERATOR_HPP
       
    16 
       
    17 #include <iterator>
       
    18 #include <cstddef>           // std::ptrdiff_t
       
    19 #include <boost/config.hpp>
       
    20 
       
    21 namespace boost
       
    22 {
       
    23 # if defined(BOOST_NO_STD_ITERATOR) && !defined(BOOST_MSVC_STD_ITERATOR)
       
    24   template <class Category, class T,
       
    25     class Distance = std::ptrdiff_t,
       
    26     class Pointer = T*, class Reference = T&>
       
    27   struct iterator
       
    28   {
       
    29     typedef T         value_type;
       
    30     typedef Distance  difference_type;
       
    31     typedef Pointer   pointer;
       
    32     typedef Reference reference;
       
    33     typedef Category  iterator_category;
       
    34   };
       
    35 # else
       
    36 
       
    37   // declare iterator_base in namespace detail to work around MSVC bugs which
       
    38   // prevent derivation from an identically-named class in a different namespace.
       
    39   namespace detail {
       
    40    template <class Category, class T, class Distance, class Pointer, class Reference>
       
    41 #  if !defined(BOOST_MSVC_STD_ITERATOR)
       
    42    struct iterator_base : std::iterator<Category, T, Distance, Pointer, Reference> {};
       
    43 #  else
       
    44    struct iterator_base : std::iterator<Category, T, Distance>
       
    45    {
       
    46      typedef Reference reference;
       
    47      typedef Pointer pointer;
       
    48      typedef Distance difference_type;
       
    49    };
       
    50 #  endif
       
    51   }
       
    52 
       
    53   template <class Category, class T, class Distance = std::ptrdiff_t,
       
    54             class Pointer = T*, class Reference = T&>
       
    55   struct iterator : boost::detail::iterator_base<Category, T, Distance, Pointer, Reference> {};
       
    56 # endif
       
    57 } // namespace boost
       
    58 
       
    59 #endif // BOOST_ITERATOR_HPP