clover/util: Define equality operators for a couple of compat classes.

This commit is contained in:
Francisco Jerez 2014-10-09 01:06:21 +03:00
parent 1441a3c1bb
commit e987fd5dc6
1 changed files with 30 additions and 13 deletions

View File

@ -36,6 +36,21 @@ namespace clover {
// source. Get rid of this as soon as everything can be
// compiled as C++11.
namespace detail {
template<typename R, typename S>
bool
ranges_equal(const R &a, const S &b) {
if (a.size() != b.size())
return false;
for (size_t i = 0; i < a.size(); ++i)
if (a[i] != b[i])
return false;
return true;
}
}
template<typename T>
class vector {
protected:
@ -101,6 +116,11 @@ namespace clover {
return *this;
}
bool
operator==(const vector &v) const {
return detail::ranges_equal(*this, v);
}
void
reserve(size_type n) {
if (_capacity < n) {
@ -199,6 +219,11 @@ namespace clover {
vector_ref(C &v) : p(&*v.begin()), n(v.size()) {
}
bool
operator==(const vector_ref &v) const {
return detail::ranges_equal(*this, v);
}
size_type
size() const {
return n;
@ -306,6 +331,11 @@ namespace clover {
return std::string(v.begin(), v.end());
}
bool
operator==(const string &s) const {
return this->v == s.v;
}
void
reserve(size_type n) {
v.reserve(n);
@ -382,19 +412,6 @@ namespace clover {
mutable vector<char> v;
};
template<typename T>
bool
operator==(const vector_ref<T> &a, const vector_ref<T> &b) {
if (a.size() != b.size())
return false;
for (size_t i = 0; i < a.size(); ++i)
if (a[i] != b[i])
return false;
return true;
}
class exception {
public:
exception() {}