115 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // 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 BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP
 | |
| #define BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP
 | |
| 
 | |
| #include <boost/range/config.hpp>
 | |
| #include <boost/range/detail/common.hpp>
 | |
| #include <boost/type_traits/is_same.hpp>
 | |
| #include <cstddef>
 | |
| #include <string.h>
 | |
| 
 | |
| #ifndef BOOST_NO_CWCHAR
 | |
| #include <wchar.h>
 | |
| #endif
 | |
| 
 | |
| namespace boost
 | |
| {
 | |
|     namespace range_detail
 | |
|     {
 | |
|         template <typename T>
 | |
|         inline void boost_range_silence_warning( const T& ) { }
 | |
| 
 | |
|         /////////////////////////////////////////////////////////////////////
 | |
|         // end() help
 | |
|         /////////////////////////////////////////////////////////////////////
 | |
| 
 | |
|         inline const char* str_end( const char* s, const char* )
 | |
|         {
 | |
|             return s + strlen( s );
 | |
|         }
 | |
| 
 | |
| #ifndef BOOST_NO_CWCHAR
 | |
|         inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )
 | |
|         {
 | |
|             return s + wcslen( s );
 | |
|         }
 | |
| #else
 | |
|         inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )
 | |
|         {
 | |
|             if( s == 0 || s[0] == 0 )
 | |
|                 return s;
 | |
|             while( *++s != 0 )
 | |
|                 ;
 | |
|             return s;
 | |
|         }
 | |
| #endif
 | |
| 
 | |
|         template< class Char >
 | |
|         inline Char* str_end( Char* s )
 | |
|         {
 | |
|             return const_cast<Char*>( str_end( s, s ) );
 | |
|         }
 | |
| 
 | |
|         template< class T, std::size_t sz >
 | |
|         inline T* array_end( T BOOST_RANGE_ARRAY_REF()[sz] )
 | |
|         {
 | |
|             return boost_range_array + sz;
 | |
|         }
 | |
| 
 | |
|         template< class T, std::size_t sz >
 | |
|         inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz] )
 | |
|         {
 | |
|             return boost_range_array + sz;
 | |
|         }
 | |
| 
 | |
|         /////////////////////////////////////////////////////////////////////
 | |
|         // size() help
 | |
|         /////////////////////////////////////////////////////////////////////
 | |
| 
 | |
|         template< class Char >
 | |
|         inline std::size_t str_size( const Char* const& s )
 | |
|         {
 | |
|             return str_end( s ) - s;
 | |
|         }
 | |
| 
 | |
|         template< class T, std::size_t sz >
 | |
|         inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz] )
 | |
|         {
 | |
|             boost_range_silence_warning( boost_range_array );
 | |
|             return sz;
 | |
|         }
 | |
| 
 | |
|         template< class T, std::size_t sz >
 | |
|         inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz] )
 | |
|         {
 | |
|             boost_range_silence_warning( boost_range_array );
 | |
|             return sz;
 | |
|         }
 | |
| 
 | |
|         inline bool is_same_address(const void* l, const void* r)
 | |
|         {
 | |
|             return l == r;
 | |
|         }
 | |
| 
 | |
|         template<class T1, class T2>
 | |
|         inline bool is_same_object(const T1& l, const T2& r)
 | |
|         {
 | |
|             return range_detail::is_same_address(&l, &r);
 | |
|         }
 | |
| 
 | |
|     } // namespace 'range_detail'
 | |
| 
 | |
| } // namespace 'boost'
 | |
| 
 | |
| 
 | |
| #endif
 | 
