| // Boost.Range library |
| // |
| // Copyright Thorsten Ottosen 2003-2004. Use, modification and |
| // distribution is subject to the Boost Software License, Version |
| // 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| // |
| // For more information, see http://www.boost.org/libs/range/ |
| // |
| |
| #ifndef NDNBOOST_RANGE_DETAIL_DETAIL_STR_HPP |
| #define NDNBOOST_RANGE_DETAIL_DETAIL_STR_HPP |
| |
| #include <ndnboost/config.hpp> // NDNBOOST_MSVC |
| #include <ndnboost/range/iterator.hpp> |
| |
| namespace ndnboost |
| { |
| |
| namespace range_detail |
| { |
| // |
| // iterator |
| // |
| |
| template<> |
| struct range_iterator_<char_array_> |
| { |
| template< typename T > |
| struct pts |
| { |
| typedef NDNBOOST_RANGE_DEDUCED_TYPENAME |
| remove_extent<T>::type* type; |
| }; |
| }; |
| |
| template<> |
| struct range_iterator_<char_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef char* type; |
| }; |
| }; |
| |
| template<> |
| struct range_iterator_<const_char_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef const char* type; |
| }; |
| }; |
| |
| template<> |
| struct range_iterator_<wchar_t_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef wchar_t* type; |
| }; |
| }; |
| |
| template<> |
| struct range_iterator_<const_wchar_t_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef const wchar_t* type; |
| }; |
| }; |
| |
| |
| // |
| // const iterator |
| // |
| |
| template<> |
| struct range_const_iterator_<char_array_> |
| { |
| template< typename T > |
| struct pts |
| { |
| typedef const NDNBOOST_RANGE_DEDUCED_TYPENAME |
| remove_extent<T>::type* type; |
| }; |
| }; |
| |
| template<> |
| struct range_const_iterator_<char_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef const char* type; |
| }; |
| }; |
| |
| template<> |
| struct range_const_iterator_<const_char_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef const char* type; |
| }; |
| }; |
| |
| template<> |
| struct range_const_iterator_<wchar_t_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef const wchar_t* type; |
| }; |
| }; |
| |
| template<> |
| struct range_const_iterator_<const_wchar_t_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef const wchar_t* type; |
| }; |
| }; |
| } |
| } |
| |
| #include <ndnboost/range/detail/begin.hpp> |
| #include <ndnboost/range/detail/end.hpp> |
| #include <ndnboost/range/detail/size_type.hpp> |
| #include <ndnboost/range/detail/value_type.hpp> |
| #include <ndnboost/range/detail/common.hpp> |
| |
| namespace ndnboost |
| { |
| |
| namespace range_detail |
| { |
| // |
| // str_begin() |
| // |
| template<> |
| struct range_begin<char_ptr_> |
| { |
| static char* fun( char* s ) |
| { |
| return s; |
| } |
| }; |
| |
| template<> |
| struct range_begin<const_char_ptr_> |
| { |
| static const char* fun( const char* s ) |
| { |
| return s; |
| } |
| }; |
| |
| template<> |
| struct range_begin<wchar_t_ptr_> |
| { |
| |
| static wchar_t* fun( wchar_t* s ) |
| { |
| return s; |
| } |
| }; |
| |
| template<> |
| struct range_begin<const_wchar_t_ptr_> |
| { |
| static const wchar_t* fun( const wchar_t* s ) |
| { |
| return s; |
| } |
| }; |
| |
| template< typename C > |
| inline NDNBOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type |
| str_begin( C& c ) |
| { |
| return range_detail::range_begin< NDNBOOST_RANGE_DEDUCED_TYPENAME |
| range_detail::range<C>::type >::fun( c ); |
| } |
| |
| // |
| // str_end() |
| // |
| |
| template<> |
| struct range_end<char_array_> |
| { |
| template< typename T, std::size_t sz > |
| static T* fun( T NDNBOOST_RANGE_ARRAY_REF()[sz] ) |
| { |
| return ndnboost::range_detail::array_end( boost_range_array ); |
| } |
| }; |
| |
| template<> |
| struct range_end<wchar_t_array_> |
| { |
| template< typename T, std::size_t sz > |
| static T* fun( T NDNBOOST_RANGE_ARRAY_REF()[sz] ) |
| { |
| return ndnboost::range_detail::array_end( boost_range_array ); |
| } |
| }; |
| |
| template<> |
| struct range_end<char_ptr_> |
| { |
| static char* fun( char* s ) |
| { |
| return ndnboost::range_detail::str_end( s ); |
| } |
| }; |
| |
| template<> |
| struct range_end<const_char_ptr_> |
| { |
| static const char* fun( const char* s ) |
| { |
| return ndnboost::range_detail::str_end( s ); |
| } |
| }; |
| |
| template<> |
| struct range_end<wchar_t_ptr_> |
| { |
| static wchar_t* fun( wchar_t* s ) |
| { |
| return ndnboost::range_detail::str_end( s ); |
| } |
| }; |
| |
| |
| template<> |
| struct range_end<const_wchar_t_ptr_> |
| { |
| static const wchar_t* fun( const wchar_t* s ) |
| { |
| return ndnboost::range_detail::str_end( s ); |
| } |
| }; |
| |
| template< typename C > |
| inline NDNBOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type |
| str_end( C& c ) |
| { |
| return range_detail::range_end< NDNBOOST_RANGE_DEDUCED_TYPENAME |
| range_detail::range<C>::type >::fun( c ); |
| } |
| |
| // |
| // size_type |
| // |
| |
| template<> |
| struct range_size_type_<char_array_> |
| { |
| template< typename A > |
| struct pts |
| { |
| typedef std::size_t type; |
| }; |
| }; |
| |
| template<> |
| struct range_size_type_<char_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef std::size_t type; |
| }; |
| }; |
| |
| template<> |
| struct range_size_type_<const_char_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef std::size_t type; |
| }; |
| }; |
| |
| template<> |
| struct range_size_type_<wchar_t_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef std::size_t type; |
| }; |
| }; |
| |
| template<> |
| struct range_size_type_<const_wchar_t_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef std::size_t type; |
| }; |
| }; |
| |
| // |
| // value_type |
| // |
| |
| template<> |
| struct range_value_type_<char_array_> |
| { |
| template< typename T > |
| struct pts |
| { |
| typedef char type; |
| }; |
| }; |
| |
| template<> |
| struct range_value_type_<char_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef char type; |
| }; |
| }; |
| |
| template<> |
| struct range_value_type_<const_char_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef const char type; |
| }; |
| }; |
| |
| template<> |
| struct range_value_type_<wchar_t_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef wchar_t type; |
| }; |
| }; |
| |
| template<> |
| struct range_value_type_<const_wchar_t_ptr_> |
| { |
| template< typename S > |
| struct pts |
| { |
| typedef const wchar_t type; |
| }; |
| }; |
| |
| } // namespace 'range_detail' |
| |
| } // namespace 'boost' |
| |
| |
| #endif |