Chris@16: // Boost.Range library Chris@16: // Chris@16: // Copyright Thorsten Ottosen 2003-2004. Use, modification and Chris@16: // distribution is subject to the Boost Software License, Version Chris@16: // 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // For more information, see http://www.boost.org/libs/range/ Chris@16: // Chris@16: Chris@16: #ifndef BOOST_RANGE_DETAIL_DETAIL_STR_HPP Chris@16: #define BOOST_RANGE_DETAIL_DETAIL_STR_HPP Chris@16: Chris@16: #include // BOOST_MSVC Chris@16: #include Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: Chris@16: namespace range_detail Chris@16: { Chris@16: // Chris@16: // iterator Chris@16: // Chris@16: Chris@16: template<> Chris@16: struct range_iterator_ Chris@16: { Chris@16: template< typename T > Chris@16: struct pts Chris@16: { Chris@16: typedef BOOST_RANGE_DEDUCED_TYPENAME Chris@16: remove_extent::type* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_iterator_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef char* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_iterator_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef const char* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_iterator_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef wchar_t* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_iterator_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef const wchar_t* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: Chris@16: // Chris@16: // const iterator Chris@16: // Chris@16: Chris@16: template<> Chris@16: struct range_const_iterator_ Chris@16: { Chris@16: template< typename T > Chris@16: struct pts Chris@16: { Chris@16: typedef const BOOST_RANGE_DEDUCED_TYPENAME Chris@16: remove_extent::type* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_const_iterator_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef const char* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_const_iterator_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef const char* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_const_iterator_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef const wchar_t* type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_const_iterator_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef const wchar_t* type; Chris@16: }; Chris@16: }; Chris@16: } Chris@16: } Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: Chris@16: namespace range_detail Chris@16: { Chris@16: // Chris@16: // str_begin() Chris@16: // Chris@16: template<> Chris@16: struct range_begin Chris@16: { Chris@16: static char* fun( char* s ) Chris@16: { Chris@16: return s; Chris@16: } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_begin Chris@16: { Chris@16: static const char* fun( const char* s ) Chris@16: { Chris@16: return s; Chris@16: } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_begin Chris@16: { Chris@16: Chris@16: static wchar_t* fun( wchar_t* s ) Chris@16: { Chris@16: return s; Chris@16: } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_begin Chris@16: { Chris@16: static const wchar_t* fun( const wchar_t* s ) Chris@16: { Chris@16: return s; Chris@16: } Chris@16: }; Chris@16: Chris@16: template< typename C > Chris@16: inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator::type Chris@16: str_begin( C& c ) Chris@16: { Chris@16: return range_detail::range_begin< BOOST_RANGE_DEDUCED_TYPENAME Chris@16: range_detail::range::type >::fun( c ); Chris@16: } Chris@16: Chris@16: // Chris@16: // str_end() Chris@16: // Chris@16: Chris@16: template<> Chris@16: struct range_end Chris@16: { Chris@16: template< typename T, std::size_t sz > Chris@16: static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] ) Chris@16: { Chris@16: return boost::range_detail::array_end( boost_range_array ); Chris@16: } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_end Chris@16: { Chris@16: template< typename T, std::size_t sz > Chris@16: static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] ) Chris@16: { Chris@16: return boost::range_detail::array_end( boost_range_array ); Chris@16: } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_end Chris@16: { Chris@16: static char* fun( char* s ) Chris@16: { Chris@16: return boost::range_detail::str_end( s ); Chris@16: } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_end Chris@16: { Chris@16: static const char* fun( const char* s ) Chris@16: { Chris@16: return boost::range_detail::str_end( s ); Chris@16: } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_end Chris@16: { Chris@16: static wchar_t* fun( wchar_t* s ) Chris@16: { Chris@16: return boost::range_detail::str_end( s ); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template<> Chris@16: struct range_end Chris@16: { Chris@16: static const wchar_t* fun( const wchar_t* s ) Chris@16: { Chris@16: return boost::range_detail::str_end( s ); Chris@16: } Chris@16: }; Chris@16: Chris@16: template< typename C > Chris@16: inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator::type Chris@16: str_end( C& c ) Chris@16: { Chris@16: return range_detail::range_end< BOOST_RANGE_DEDUCED_TYPENAME Chris@16: range_detail::range::type >::fun( c ); Chris@16: } Chris@16: Chris@16: // Chris@16: // size_type Chris@16: // Chris@16: Chris@16: template<> Chris@16: struct range_size_type_ Chris@16: { Chris@16: template< typename A > Chris@16: struct pts Chris@16: { Chris@16: typedef std::size_t type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_size_type_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef std::size_t type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_size_type_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef std::size_t type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_size_type_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef std::size_t type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_size_type_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef std::size_t type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: // Chris@16: // value_type Chris@16: // Chris@16: Chris@16: template<> Chris@16: struct range_value_type_ Chris@16: { Chris@16: template< typename T > Chris@16: struct pts Chris@16: { Chris@16: typedef char type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_value_type_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef char type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_value_type_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef const char type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_value_type_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef wchar_t type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct range_value_type_ Chris@16: { Chris@16: template< typename S > Chris@16: struct pts Chris@16: { Chris@16: typedef const wchar_t type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: } // namespace 'range_detail' Chris@16: Chris@16: } // namespace 'boost' Chris@16: Chris@16: Chris@16: #endif