imgtools/imglib/boostlibrary/boost/range/end.hpp
changeset 0 044383f39525
equal deleted inserted replaced
-1:000000000000 0:044383f39525
       
     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_END_HPP
       
    12 #define BOOST_RANGE_END_HPP
       
    13 
       
    14 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
       
    15 # pragma once
       
    16 #endif
       
    17 
       
    18 #include <boost/range/config.hpp>
       
    19 
       
    20 #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
       
    21 #include <boost/range/detail/end.hpp>
       
    22 #else
       
    23 
       
    24 #include <boost/range/detail/implementation_help.hpp>
       
    25 #include <boost/range/iterator.hpp>
       
    26 #include <boost/range/const_iterator.hpp>
       
    27 
       
    28 namespace boost
       
    29 {
       
    30 
       
    31 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
       
    32     !BOOST_WORKAROUND(__GNUC__, < 3) \
       
    33     /**/
       
    34 namespace range_detail
       
    35 {
       
    36 #endif
       
    37 
       
    38         //////////////////////////////////////////////////////////////////////
       
    39         // primary template
       
    40         //////////////////////////////////////////////////////////////////////
       
    41         template< typename C >
       
    42         inline BOOST_DEDUCED_TYPENAME range_iterator<C>::type
       
    43         range_end( C& c )
       
    44         {
       
    45             //
       
    46             // If you get a compile-error here, it is most likely because
       
    47             // you have not implemented range_begin() properly in
       
    48             // the namespace of C
       
    49             //
       
    50             return c.end();
       
    51         }
       
    52 
       
    53         //////////////////////////////////////////////////////////////////////
       
    54         // pair
       
    55         //////////////////////////////////////////////////////////////////////
       
    56 
       
    57         template< typename Iterator >
       
    58         inline Iterator range_end( const std::pair<Iterator,Iterator>& p )
       
    59         {
       
    60             return p.second;
       
    61         }
       
    62 
       
    63         template< typename Iterator >
       
    64         inline Iterator range_end( std::pair<Iterator,Iterator>& p )
       
    65         {
       
    66             return p.second;
       
    67         }
       
    68 
       
    69         //////////////////////////////////////////////////////////////////////
       
    70         // array
       
    71         //////////////////////////////////////////////////////////////////////
       
    72 
       
    73         template< typename T, std::size_t sz >
       
    74         inline const T* range_end( const T (&a)[sz] )
       
    75         {
       
    76             return range_detail::array_end<T,sz>( a );
       
    77         }
       
    78 
       
    79         template< typename T, std::size_t sz >
       
    80         inline T* range_end( T (&a)[sz] )
       
    81         {
       
    82             return range_detail::array_end<T,sz>( a );
       
    83         }
       
    84 
       
    85 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
       
    86     !BOOST_WORKAROUND(__GNUC__, < 3) \
       
    87     /**/
       
    88 } // namespace 'range_detail'
       
    89 #endif
       
    90 
       
    91 template< class T >
       
    92 inline BOOST_DEDUCED_TYPENAME range_iterator<T>::type end( T& r )
       
    93 {
       
    94 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
       
    95     !BOOST_WORKAROUND(__GNUC__, < 3) \
       
    96     /**/
       
    97     using namespace range_detail;
       
    98 #endif
       
    99     return range_end( r );
       
   100 }
       
   101 
       
   102 template< class T >
       
   103 inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type end( const T& r )
       
   104 {
       
   105 #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
       
   106     !BOOST_WORKAROUND(__GNUC__, < 3) \
       
   107     /**/
       
   108     using namespace range_detail;
       
   109 #endif
       
   110     return range_end( r );
       
   111 }
       
   112 
       
   113 } // namespace 'boost'
       
   114 
       
   115 
       
   116 
       
   117 #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
       
   118 
       
   119 
       
   120 namespace boost
       
   121 {
       
   122     template< class T >
       
   123     inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type
       
   124     const_end( const T& r )
       
   125     {
       
   126         return boost::end( r );
       
   127     }
       
   128 }
       
   129 
       
   130 #endif
       
   131