source: NonGTP/Boost/boost/regex/v4/iterator_traits.hpp @ 857

Revision 857, 3.6 KB checked in by igarcia, 18 years ago (diff)
Line 
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_HAS_ABI_HEADERS
23#  include BOOST_ABI_PREFIX
24#endif
25
26namespace boost{
27namespace re_detail{
28
29#if defined(BOOST_NO_STD_ITERATOR_TRAITS) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
30
31template <class T>
32struct regex_iterator_traits
33{
34  typedef typename T::iterator_category iterator_category;
35  typedef typename T::value_type        value_type;
36#if !defined(BOOST_NO_STD_ITERATOR)
37  typedef typename T::difference_type   difference_type;
38  typedef typename T::pointer           pointer;
39  typedef typename T::reference         reference;
40#else
41  typedef std::ptrdiff_t                difference_type;
42  typedef value_type*                   pointer;
43  typedef value_type&                   reference;
44#endif
45};
46
47template <class T>
48struct pointer_iterator_traits
49{
50   typedef std::ptrdiff_t difference_type;
51   typedef T value_type;
52   typedef T* pointer;
53   typedef T& reference;
54   typedef std::random_access_iterator_tag iterator_category;
55};
56template <class T>
57struct const_pointer_iterator_traits
58{
59   typedef std::ptrdiff_t difference_type;
60   typedef T value_type;
61   typedef const T* pointer;
62   typedef const T& reference;
63   typedef std::random_access_iterator_tag iterator_category;
64};
65
66template<>
67struct regex_iterator_traits<char*> : pointer_iterator_traits<char>{};
68template<>
69struct regex_iterator_traits<const char*> : const_pointer_iterator_traits<char>{};
70template<>
71struct regex_iterator_traits<wchar_t*> : pointer_iterator_traits<wchar_t>{};
72template<>
73struct regex_iterator_traits<const wchar_t*> : const_pointer_iterator_traits<wchar_t>{};
74//
75// the follwoing are needed for ICU support:
76//
77template<>
78struct regex_iterator_traits<unsigned char*> : pointer_iterator_traits<char>{};
79template<>
80struct regex_iterator_traits<const unsigned char*> : const_pointer_iterator_traits<char>{};
81template<>
82struct regex_iterator_traits<int*> : pointer_iterator_traits<int>{};
83template<>
84struct regex_iterator_traits<const int*> : const_pointer_iterator_traits<int>{};
85
86#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
87template<>
88struct regex_iterator_traits<unsigned short*> : pointer_iterator_traits<unsigned short>{};
89template<>
90struct regex_iterator_traits<const unsigned short*> : const_pointer_iterator_traits<unsigned short>{};
91#endif
92
93#if defined(__SGI_STL_PORT) && defined(__STL_DEBUG)
94template<>
95struct regex_iterator_traits<std::string::iterator> : pointer_iterator_traits<char>{};
96template<>
97struct regex_iterator_traits<std::string::const_iterator> : const_pointer_iterator_traits<char>{};
98#ifndef BOOST_NO_STD_WSTRING
99template<>
100struct regex_iterator_traits<std::wstring::iterator> : pointer_iterator_traits<wchar_t>{};
101template<>
102struct regex_iterator_traits<std::wstring::const_iterator> : const_pointer_iterator_traits<wchar_t>{};
103#endif // BOOST_NO_WSTRING
104#endif // stport
105
106#else
107
108template <class T>
109struct regex_iterator_traits : public std::iterator_traits<T> {};
110
111#endif
112
113} // namespace re_detail
114} // namespace boost
115
116#ifdef BOOST_HAS_ABI_HEADERS
117#  include BOOST_ABI_SUFFIX
118#endif
119
120#endif
121
Note: See TracBrowser for help on using the repository browser.