Line data Source code
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_RBEGIN_HPP 12 : #define BOOST_RANGE_RBEGIN_HPP 13 : 14 : #if defined(_MSC_VER) 15 : # pragma once 16 : #endif 17 : 18 : #include <boost/range/end.hpp> 19 : #include <boost/range/reverse_iterator.hpp> 20 : 21 : namespace boost 22 : { 23 : 24 : #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING 25 : 26 : template< class C > 27 : inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type 28 : rbegin( C& c ) 29 : { 30 : return BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type( boost::end( c ) ); 31 : } 32 : 33 : #else 34 : 35 : template< class C > 36 : inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type 37 0 : rbegin( C& c ) 38 : { 39 : typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type 40 : iter_type; 41 0 : return iter_type( boost::end( c ) ); 42 : } 43 : 44 : template< class C > 45 : inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type 46 0 : rbegin( const C& c ) 47 : { 48 : typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type 49 : iter_type; 50 0 : return iter_type( boost::end( c ) ); 51 : } 52 : 53 : #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING 54 : 55 : template< class T > 56 : inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const T>::type 57 : const_rbegin( const T& r ) 58 : { 59 : return boost::rbegin( r ); 60 : } 61 : 62 : } // namespace 'boost' 63 : 64 : #endif 65 :