/extlibs/Boost/include/boost/range/detail/const_iterator.hpp
C++ Header | 71 lines | 48 code | 11 blank | 12 comment | 0 complexity | c0083daf1e676a2a2a919dd97704bd82 MD5 | raw file
1// Boost.Range library 2// 3// Copyright Thorsten Ottosen 2003-2004. Use, modification and 4// distribution is subject to the Boost Software License, Version 5// 1.0. (See accompanying file LICENSE_1_0.txt or copy at 6// http://www.boost.org/LICENSE_1_0.txt) 7// 8// For more information, see http://www.boost.org/libs/range/ 9// 10 11#ifndef BOOST_RANGE_DETAIL_CONST_ITERATOR_HPP 12#define BOOST_RANGE_DETAIL_CONST_ITERATOR_HPP 13 14#include <boost/range/detail/common.hpp> 15#include <boost/range/detail/remove_extent.hpp> 16 17////////////////////////////////////////////////////////////////////////////// 18// missing partial specialization workaround. 19////////////////////////////////////////////////////////////////////////////// 20 21namespace boost 22{ 23 namespace range_detail 24 { 25 template< typename T > 26 struct range_const_iterator_; 27 28 template<> 29 struct range_const_iterator_<std_container_> 30 { 31 template< typename C > 32 struct pts 33 { 34 typedef BOOST_RANGE_DEDUCED_TYPENAME C::const_iterator type; 35 }; 36 }; 37 38 template<> 39 struct range_const_iterator_<std_pair_> 40 { 41 template< typename P > 42 struct pts 43 { 44 typedef BOOST_RANGE_DEDUCED_TYPENAME P::first_type type; 45 }; 46 }; 47 48 49 template<> 50 struct range_const_iterator_<array_> 51 { 52 template< typename T > 53 struct pts 54 { 55 typedef const BOOST_RANGE_DEDUCED_TYPENAME 56 remove_extent<T>::type* type; 57 }; 58 }; 59 } 60 61 template< typename C > 62 class range_const_iterator 63 { 64 typedef BOOST_DEDUCED_TYPENAME range_detail::range<C>::type c_type; 65 public: 66 typedef BOOST_DEDUCED_TYPENAME range_detail::range_const_iterator_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type; 67 }; 68 69} 70 71#endif