imgtools/imglib/boostlibrary/boost/regex/v4/iterator_traits.hpp
changeset 600 6d08f4a05d93
equal deleted inserted replaced
599:fa7a3cc6effd 600:6d08f4a05d93
       
     1 /*
       
     2  *
       
     3  * Copyright (c) 1998-2002
       
     4  * John Maddock
       
     5  *
       
     6  * Use, modification and distribution are subject to the 
       
     7  * Boost Software License, Version 1.0. (See accompanying file 
       
     8  * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       
     9  *
       
    10  */
       
    11 
       
    12  /*
       
    13   *   LOCATION:    see http://www.boost.org for most recent version.
       
    14   *   FILE         iterator_traits.cpp
       
    15   *   VERSION      see <boost/version.hpp>
       
    16   *   DESCRIPTION: Declares iterator traits workarounds.
       
    17   */
       
    18 
       
    19 #ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP
       
    20 #define BOOST_REGEX_V4_ITERATOR_TRAITS_HPP
       
    21 
       
    22 #ifdef BOOST_MSVC
       
    23 #pragma warning(push)
       
    24 #pragma warning(disable: 4103)
       
    25 #endif
       
    26 #ifdef BOOST_HAS_ABI_HEADERS
       
    27 #  include BOOST_ABI_PREFIX
       
    28 #endif
       
    29 #ifdef BOOST_MSVC
       
    30 #pragma warning(pop)
       
    31 #endif
       
    32 
       
    33 namespace boost{
       
    34 namespace re_detail{
       
    35 
       
    36 #if defined(BOOST_NO_STD_ITERATOR_TRAITS) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
       
    37 
       
    38 template <class T>
       
    39 struct regex_iterator_traits 
       
    40 {
       
    41   typedef typename T::iterator_category iterator_category;
       
    42   typedef typename T::value_type        value_type;
       
    43 #if !defined(BOOST_NO_STD_ITERATOR)
       
    44   typedef typename T::difference_type   difference_type;
       
    45   typedef typename T::pointer           pointer;
       
    46   typedef typename T::reference         reference;
       
    47 #else
       
    48   typedef std::ptrdiff_t                difference_type;
       
    49   typedef value_type*                   pointer;
       
    50   typedef value_type&                   reference;
       
    51 #endif
       
    52 };
       
    53 
       
    54 template <class T>
       
    55 struct pointer_iterator_traits
       
    56 {
       
    57    typedef std::ptrdiff_t difference_type;
       
    58    typedef T value_type;
       
    59    typedef T* pointer;
       
    60    typedef T& reference;
       
    61    typedef std::random_access_iterator_tag iterator_category;
       
    62 };
       
    63 template <class T>
       
    64 struct const_pointer_iterator_traits
       
    65 {
       
    66    typedef std::ptrdiff_t difference_type;
       
    67    typedef T value_type;
       
    68    typedef const T* pointer;
       
    69    typedef const T& reference;
       
    70    typedef std::random_access_iterator_tag iterator_category;
       
    71 };
       
    72 
       
    73 template<>
       
    74 struct regex_iterator_traits<char*> : pointer_iterator_traits<char>{};
       
    75 template<>
       
    76 struct regex_iterator_traits<const char*> : const_pointer_iterator_traits<char>{};
       
    77 template<>
       
    78 struct regex_iterator_traits<wchar_t*> : pointer_iterator_traits<wchar_t>{};
       
    79 template<>
       
    80 struct regex_iterator_traits<const wchar_t*> : const_pointer_iterator_traits<wchar_t>{};
       
    81 //
       
    82 // the follwoing are needed for ICU support:
       
    83 //
       
    84 template<>
       
    85 struct regex_iterator_traits<unsigned char*> : pointer_iterator_traits<char>{};
       
    86 template<>
       
    87 struct regex_iterator_traits<const unsigned char*> : const_pointer_iterator_traits<char>{};
       
    88 template<>
       
    89 struct regex_iterator_traits<int*> : pointer_iterator_traits<int>{};
       
    90 template<>
       
    91 struct regex_iterator_traits<const int*> : const_pointer_iterator_traits<int>{};
       
    92 
       
    93 #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
       
    94 template<>
       
    95 struct regex_iterator_traits<unsigned short*> : pointer_iterator_traits<unsigned short>{};
       
    96 template<>
       
    97 struct regex_iterator_traits<const unsigned short*> : const_pointer_iterator_traits<unsigned short>{};
       
    98 #endif
       
    99 
       
   100 #if defined(__SGI_STL_PORT) && defined(__STL_DEBUG)
       
   101 template<>
       
   102 struct regex_iterator_traits<std::string::iterator> : pointer_iterator_traits<char>{};
       
   103 template<>
       
   104 struct regex_iterator_traits<std::string::const_iterator> : const_pointer_iterator_traits<char>{};
       
   105 #ifndef BOOST_NO_STD_WSTRING
       
   106 template<>
       
   107 struct regex_iterator_traits<std::wstring::iterator> : pointer_iterator_traits<wchar_t>{};
       
   108 template<>
       
   109 struct regex_iterator_traits<std::wstring::const_iterator> : const_pointer_iterator_traits<wchar_t>{};
       
   110 #endif // BOOST_NO_WSTRING
       
   111 #endif // stport
       
   112 
       
   113 #else
       
   114 
       
   115 template <class T>
       
   116 struct regex_iterator_traits : public std::iterator_traits<T> {};
       
   117 
       
   118 #endif
       
   119 
       
   120 } // namespace re_detail
       
   121 } // namespace boost
       
   122 
       
   123 #ifdef BOOST_MSVC
       
   124 #pragma warning(push)
       
   125 #pragma warning(disable: 4103)
       
   126 #endif
       
   127 #ifdef BOOST_HAS_ABI_HEADERS
       
   128 #  include BOOST_ABI_SUFFIX
       
   129 #endif
       
   130 #ifdef BOOST_MSVC
       
   131 #pragma warning(pop)
       
   132 #endif
       
   133 
       
   134 #endif
       
   135