3 * Copyright (c) 1998-2002
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)
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.
19 #ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP
20 #define BOOST_REGEX_V4_ITERATOR_TRAITS_HPP
22 #ifdef BOOST_HAS_ABI_HEADERS
23 # include BOOST_ABI_PREFIX
29 #if defined(BOOST_NO_STD_ITERATOR_TRAITS) || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
32 struct regex_iterator_traits
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;
41 typedef std::ptrdiff_t difference_type;
42 typedef value_type* pointer;
43 typedef value_type& reference;
48 struct pointer_iterator_traits
50 typedef std::ptrdiff_t difference_type;
54 typedef std::random_access_iterator_tag iterator_category;
57 struct const_pointer_iterator_traits
59 typedef std::ptrdiff_t difference_type;
61 typedef const T* pointer;
62 typedef const T& reference;
63 typedef std::random_access_iterator_tag iterator_category;
67 struct regex_iterator_traits<char*> : pointer_iterator_traits<char>{};
69 struct regex_iterator_traits<const char*> : const_pointer_iterator_traits<char>{};
71 struct regex_iterator_traits<wchar_t*> : pointer_iterator_traits<wchar_t>{};
73 struct regex_iterator_traits<const wchar_t*> : const_pointer_iterator_traits<wchar_t>{};
75 // the follwoing are needed for ICU support:
78 struct regex_iterator_traits<unsigned char*> : pointer_iterator_traits<char>{};
80 struct regex_iterator_traits<const unsigned char*> : const_pointer_iterator_traits<char>{};
82 struct regex_iterator_traits<int*> : pointer_iterator_traits<int>{};
84 struct regex_iterator_traits<const int*> : const_pointer_iterator_traits<int>{};
86 #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
88 struct regex_iterator_traits<unsigned short*> : pointer_iterator_traits<unsigned short>{};
90 struct regex_iterator_traits<const unsigned short*> : const_pointer_iterator_traits<unsigned short>{};
93 #if defined(__SGI_STL_PORT) && defined(__STL_DEBUG)
95 struct regex_iterator_traits<std::string::iterator> : pointer_iterator_traits<char>{};
97 struct regex_iterator_traits<std::string::const_iterator> : const_pointer_iterator_traits<char>{};
98 #ifndef BOOST_NO_STD_WSTRING
100 struct regex_iterator_traits<std::wstring::iterator> : pointer_iterator_traits<wchar_t>{};
102 struct regex_iterator_traits<std::wstring::const_iterator> : const_pointer_iterator_traits<wchar_t>{};
103 #endif // BOOST_NO_WSTRING
109 struct regex_iterator_traits : public std::iterator_traits<T> {};
113 } // namespace re_detail
116 #ifdef BOOST_HAS_ABI_HEADERS
117 # include BOOST_ABI_SUFFIX