Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:51:16

0001 // Boost.Range library
0002 //
0003 //  Copyright Thorsten Ottosen 2003-2004. Use, modification and
0004 //  distribution is subject to the Boost Software License, Version
0005 //  1.0. (See accompanying file LICENSE_1_0.txt or copy at
0006 //  http://www.boost.org/LICENSE_1_0.txt)
0007 //
0008 // For more information, see http://www.boost.org/libs/range/
0009 //
0010 
0011 #ifndef BOOST_RANGE_DETAIL_EMPTY_HPP
0012 #define BOOST_RANGE_DETAIL_EMPTY_HPP
0013 
0014 #include <boost/range/detail/common.hpp>
0015 
0016 namespace boost 
0017 {
0018     namespace range_detail
0019     {
0020         template< typename T >
0021         struct range_empty;
0022 
0023         //////////////////////////////////////////////////////////////////////
0024         // default
0025         //////////////////////////////////////////////////////////////////////
0026         
0027         template<>
0028         struct range_empty<std_container_>
0029         {
0030             template< typename C >
0031             static bool fun( C& c )
0032             {
0033                 return c.empty();
0034             };
0035         };
0036                     
0037         //////////////////////////////////////////////////////////////////////
0038         // pair
0039         //////////////////////////////////////////////////////////////////////
0040         
0041         template<>
0042         struct range_empty<std_pair_>
0043         {
0044             template< typename P >
0045             static bool fun( const P& p )
0046             {
0047                 return p.first == p.second;
0048             }
0049         };
0050  
0051         //////////////////////////////////////////////////////////////////////
0052         // array
0053         //////////////////////////////////////////////////////////////////////
0054         
0055         template<>
0056         struct range_empty<array_>
0057         {
0058             template< typename T, std::size_t sz >
0059             static bool fun( T BOOST_ARRAY_REF[sz] )
0060             {
0061                 if( boost_range_array == 0 )
0062                     return true;
0063                 return false;
0064             }
0065         };
0066 
0067         //////////////////////////////////////////////////////////////////////
0068         // string
0069         //////////////////////////////////////////////////////////////////////
0070         
0071         template<>
0072         struct range_empty<char_ptr_>
0073         {
0074             static bool fun( const char* s )
0075             {
0076                 return s == 0 || s[0] == 0;
0077             }
0078         };
0079 
0080         template<>
0081         struct range_empty<const_char_ptr_>
0082         {
0083             static bool fun( const char* s )
0084             {
0085                 return  s == 0 || s[0] == 0;
0086             }
0087         };
0088 
0089         template<>
0090         struct range_empty<wchar_t_ptr_>
0091         {
0092             static bool fun( const wchar_t* s )
0093             {
0094                 return  s == 0 || s[0] == 0;
0095             }
0096         };
0097         
0098         template<>
0099         struct range_empty<const_wchar_t_ptr_>
0100         {
0101             static bool fun( const wchar_t* s )
0102             {
0103                 return  s == 0 || s[0] == 0;
0104             }
0105         };
0106 
0107     } // namespace 'range_detail'
0108     
0109         
0110     template< typename C >
0111     inline bool 
0112     empty( const C& c )
0113     {
0114         return range_detail::range_empty<  BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );
0115     }
0116 
0117 } // namespace 'boost'
0118 
0119 
0120 #endif