Chris@16: /* Chris@16: * Chris@16: * Copyright (c) 1998-2002 Chris@16: * John Maddock Chris@16: * Chris@16: * Use, modification and distribution are subject to the Chris@16: * Boost Software License, Version 1.0. (See accompanying file Chris@16: * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: * Chris@16: */ Chris@16: Chris@16: /* Chris@16: * LOCATION: see http://www.boost.org for most recent version. Chris@16: * FILE iterator_traits.cpp Chris@16: * VERSION see Chris@16: * DESCRIPTION: Declares iterator traits workarounds. Chris@16: */ Chris@16: Chris@16: #ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP Chris@16: #define BOOST_REGEX_V4_ITERATOR_TRAITS_HPP Chris@16: Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(push) Chris@16: #pragma warning(disable: 4103) Chris@16: #endif Chris@16: #ifdef BOOST_HAS_ABI_HEADERS Chris@16: # include BOOST_ABI_PREFIX Chris@16: #endif Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(pop) Chris@16: #endif Chris@16: Chris@16: namespace boost{ Chris@16: namespace re_detail{ Chris@16: Chris@101: #if defined(BOOST_NO_STD_ITERATOR_TRAITS) Chris@16: Chris@16: template Chris@16: struct regex_iterator_traits Chris@16: { Chris@16: typedef typename T::iterator_category iterator_category; Chris@16: typedef typename T::value_type value_type; Chris@16: #if !defined(BOOST_NO_STD_ITERATOR) Chris@16: typedef typename T::difference_type difference_type; Chris@16: typedef typename T::pointer pointer; Chris@16: typedef typename T::reference reference; Chris@16: #else Chris@16: typedef std::ptrdiff_t difference_type; Chris@16: typedef value_type* pointer; Chris@16: typedef value_type& reference; Chris@16: #endif Chris@16: }; Chris@16: Chris@16: template Chris@16: struct pointer_iterator_traits Chris@16: { Chris@16: typedef std::ptrdiff_t difference_type; Chris@16: typedef T value_type; Chris@16: typedef T* pointer; Chris@16: typedef T& reference; Chris@16: typedef std::random_access_iterator_tag iterator_category; Chris@16: }; Chris@16: template Chris@16: struct const_pointer_iterator_traits Chris@16: { Chris@16: typedef std::ptrdiff_t difference_type; Chris@16: typedef T value_type; Chris@16: typedef const T* pointer; Chris@16: typedef const T& reference; Chris@16: typedef std::random_access_iterator_tag iterator_category; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct regex_iterator_traits : pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : const_pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : const_pointer_iterator_traits{}; Chris@16: // Chris@16: // the follwoing are needed for ICU support: Chris@16: // Chris@16: template<> Chris@16: struct regex_iterator_traits : pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : const_pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : const_pointer_iterator_traits{}; Chris@16: Chris@16: #ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T Chris@16: template<> Chris@16: struct regex_iterator_traits : pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : const_pointer_iterator_traits{}; Chris@16: #endif Chris@16: Chris@16: #if defined(__SGI_STL_PORT) && defined(__STL_DEBUG) Chris@16: template<> Chris@16: struct regex_iterator_traits : pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : const_pointer_iterator_traits{}; Chris@16: #ifndef BOOST_NO_STD_WSTRING Chris@16: template<> Chris@16: struct regex_iterator_traits : pointer_iterator_traits{}; Chris@16: template<> Chris@16: struct regex_iterator_traits : const_pointer_iterator_traits{}; Chris@16: #endif // BOOST_NO_WSTRING Chris@16: #endif // stport Chris@16: Chris@16: #else Chris@16: Chris@16: template Chris@16: struct regex_iterator_traits : public std::iterator_traits {}; Chris@16: Chris@16: #endif Chris@16: Chris@16: } // namespace re_detail Chris@16: } // namespace boost Chris@16: Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(push) Chris@16: #pragma warning(disable: 4103) Chris@16: #endif Chris@16: #ifdef BOOST_HAS_ABI_HEADERS Chris@16: # include BOOST_ABI_SUFFIX Chris@16: #endif Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(pop) Chris@16: #endif Chris@16: Chris@16: #endif Chris@16: