File indexing completed on 2025-01-18 09:51:16
0001
0002
0003
0004
0005
0006
0007
0008
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
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
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
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
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 }
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 }
0118
0119
0120 #endif