fix breakage of string_ref logical ops, detabify, remove trailing whitespace

[SVN r83147]
This commit is contained in:
Eric Niebler 2013-02-25 06:30:00 +00:00
parent 9284a64936
commit e0e16be802
3 changed files with 234 additions and 169 deletions

View File

@ -34,8 +34,6 @@ namespace boost {
bool operator () ( charT val ) const { return traits::eq ( ch_, val ); } bool operator () ( charT val ) const { return traits::eq ( ch_, val ); }
charT ch_; charT ch_;
}; };
template<typename T> struct __identity { typedef T type; };
} }
template<typename charT, typename traits> class basic_string_ref; template<typename charT, typename traits> class basic_string_ref;
@ -259,22 +257,32 @@ namespace boost {
}; };
// Comparison operators (3 for each operation) // Comparison operators
// Equality // Equality
template<typename charT, typename traits> template<typename charT, typename traits>
bool operator==(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) { bool operator==(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {
if ( x.size () != y.size ()) return false; if ( x.size () != y.size ()) return false;
return x.compare(y) == 0; return x.compare(y) == 0;
} }
template<typename charT, typename traits>
bool operator==(basic_string_ref<charT, traits> x, typename detail::__identity<basic_string_ref<charT, traits> >::type y) { template<typename charT, typename traits, typename Allocator>
if ( x.size () != y.size ()) return false; bool operator==(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {
return x.compare(y) == 0; return x == basic_string_ref<charT, traits>(y);
} }
template<typename charT, typename traits, typename Allocator>
bool operator==(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) == y;
}
template<typename charT, typename traits> template<typename charT, typename traits>
bool operator==(typename detail::__identity<basic_string_ref<charT, traits> >::type x, basic_string_ref<charT, traits> y) { bool operator==(basic_string_ref<charT, traits> x, const charT * y) {
if ( x.size () != y.size ()) return false; return x == basic_string_ref<charT, traits>(y);
return x.compare(y) == 0; }
template<typename charT, typename traits>
bool operator==(const charT * x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) == y;
} }
// Inequality // Inequality
@ -283,15 +291,25 @@ namespace boost {
if ( x.size () != y.size ()) return true; if ( x.size () != y.size ()) return true;
return x.compare(y) != 0; return x.compare(y) != 0;
} }
template<typename charT, typename traits>
bool operator!=(basic_string_ref<charT, traits> x, typename detail::__identity<basic_string_ref<charT, traits> >::type y) { template<typename charT, typename traits, typename Allocator>
if ( x.size () != y.size ()) return true; bool operator!=(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {
return x.compare(y) != 0; return x != basic_string_ref<charT, traits>(y);
} }
template<typename charT, typename traits, typename Allocator>
bool operator!=(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) != y;
}
template<typename charT, typename traits> template<typename charT, typename traits>
bool operator!=(typename detail::__identity<basic_string_ref<charT, traits> >::type x, basic_string_ref<charT, traits> y) { bool operator!=(basic_string_ref<charT, traits> x, const charT * y) {
if ( x.size () != y.size ()) return true; return x != basic_string_ref<charT, traits>(y);
return x.compare(y) != 0; }
template<typename charT, typename traits>
bool operator!=(const charT * x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) != y;
} }
// Less than // Less than
@ -299,13 +317,25 @@ namespace boost {
bool operator<(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) { bool operator<(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {
return x.compare(y) < 0; return x.compare(y) < 0;
} }
template<typename charT, typename traits>
bool operator<(basic_string_ref<charT, traits> x, typename detail::__identity<basic_string_ref<charT, traits> >::type y) { template<typename charT, typename traits, typename Allocator>
return x.compare(y) < 0; bool operator<(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {
return x < basic_string_ref<charT, traits>(y);
} }
template<typename charT, typename traits, typename Allocator>
bool operator<(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) < y;
}
template<typename charT, typename traits> template<typename charT, typename traits>
bool operator<(typename detail::__identity<basic_string_ref<charT, traits> >::type x, basic_string_ref<charT, traits> y) { bool operator<(basic_string_ref<charT, traits> x, const charT * y) {
return x.compare(y) < 0; return x < basic_string_ref<charT, traits>(y);
}
template<typename charT, typename traits>
bool operator<(const charT * x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) < y;
} }
// Greater than // Greater than
@ -313,13 +343,25 @@ namespace boost {
bool operator>(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) { bool operator>(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {
return x.compare(y) > 0; return x.compare(y) > 0;
} }
template<typename charT, typename traits>
bool operator>(basic_string_ref<charT, traits> x, typename detail::__identity<basic_string_ref<charT, traits> >::type y) { template<typename charT, typename traits, typename Allocator>
return x.compare(y) > 0; bool operator>(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {
return x > basic_string_ref<charT, traits>(y);
} }
template<typename charT, typename traits, typename Allocator>
bool operator>(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) > y;
}
template<typename charT, typename traits> template<typename charT, typename traits>
bool operator>(typename detail::__identity<basic_string_ref<charT, traits> >::type x, basic_string_ref<charT, traits> y) { bool operator>(basic_string_ref<charT, traits> x, const charT * y) {
return x.compare(y) > 0; return x > basic_string_ref<charT, traits>(y);
}
template<typename charT, typename traits>
bool operator>(const charT * x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) > y;
} }
// Less than or equal to // Less than or equal to
@ -327,13 +369,25 @@ namespace boost {
bool operator<=(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) { bool operator<=(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {
return x.compare(y) <= 0; return x.compare(y) <= 0;
} }
template<typename charT, typename traits>
bool operator<=(basic_string_ref<charT, traits> x, typename detail::__identity<basic_string_ref<charT, traits> >::type y) { template<typename charT, typename traits, typename Allocator>
return x.compare(y) <= 0; bool operator<=(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {
return x <= basic_string_ref<charT, traits>(y);
} }
template<typename charT, typename traits, typename Allocator>
bool operator<=(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) <= y;
}
template<typename charT, typename traits> template<typename charT, typename traits>
bool operator<=(typename detail::__identity<basic_string_ref<charT, traits> >::type x, basic_string_ref<charT, traits> y) { bool operator<=(basic_string_ref<charT, traits> x, const charT * y) {
return x.compare(y) <= 0; return x <= basic_string_ref<charT, traits>(y);
}
template<typename charT, typename traits>
bool operator<=(const charT * x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) <= y;
} }
// Greater than or equal to // Greater than or equal to
@ -341,16 +395,26 @@ namespace boost {
bool operator>=(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) { bool operator>=(basic_string_ref<charT, traits> x, basic_string_ref<charT, traits> y) {
return x.compare(y) >= 0; return x.compare(y) >= 0;
} }
template<typename charT, typename traits>
bool operator>=(basic_string_ref<charT, traits> x, typename detail::__identity<basic_string_ref<charT, traits> >::type y) { template<typename charT, typename traits, typename Allocator>
return x.compare(y) >= 0; bool operator>=(basic_string_ref<charT, traits> x, const std::basic_string<charT, traits, Allocator> & y) {
} return x >= basic_string_ref<charT, traits>(y);
template<typename charT, typename traits>
bool operator>=(typename detail::__identity<basic_string_ref<charT, traits> >::type x, basic_string_ref<charT, traits> y) {
return x.compare(y) >= 0;
} }
template<typename charT, typename traits, typename Allocator>
bool operator>=(const std::basic_string<charT, traits, Allocator> & x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) >= y;
}
template<typename charT, typename traits>
bool operator>=(basic_string_ref<charT, traits> x, const charT * y) {
return x >= basic_string_ref<charT, traits>(y);
}
template<typename charT, typename traits>
bool operator>=(const charT * x, basic_string_ref<charT, traits> y) {
return basic_string_ref<charT, traits>(x) >= y;
}
// Inserter // Inserter
template<class charT, class traits> template<class charT, class traits>

View File

@ -266,6 +266,7 @@ void compare ( const char *arg ) {
str1.assign ( arg ); str1.assign ( arg );
sr1 = arg; sr1 = arg;
BOOST_CHECK ( sr1 == sr1); // compare string_ref and string_ref
BOOST_CHECK ( sr1 == str1); // compare string and string_ref BOOST_CHECK ( sr1 == str1); // compare string and string_ref
BOOST_CHECK ( str1 == sr1 ); // compare string_ref and string BOOST_CHECK ( str1 == sr1 ); // compare string_ref and string
BOOST_CHECK ( sr1 == arg ); // compare string_ref and pointer BOOST_CHECK ( sr1 == arg ); // compare string_ref and pointer