clover/util: Define equality operators for a couple of compat classes.
This commit is contained in:
parent
1441a3c1bb
commit
e987fd5dc6
|
@ -36,6 +36,21 @@ namespace clover {
|
||||||
// source. Get rid of this as soon as everything can be
|
// source. Get rid of this as soon as everything can be
|
||||||
// compiled as C++11.
|
// 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>
|
template<typename T>
|
||||||
class vector {
|
class vector {
|
||||||
protected:
|
protected:
|
||||||
|
@ -101,6 +116,11 @@ namespace clover {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
operator==(const vector &v) const {
|
||||||
|
return detail::ranges_equal(*this, v);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
reserve(size_type n) {
|
reserve(size_type n) {
|
||||||
if (_capacity < n) {
|
if (_capacity < n) {
|
||||||
|
@ -199,6 +219,11 @@ namespace clover {
|
||||||
vector_ref(C &v) : p(&*v.begin()), n(v.size()) {
|
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_type
|
||||||
size() const {
|
size() const {
|
||||||
return n;
|
return n;
|
||||||
|
@ -306,6 +331,11 @@ namespace clover {
|
||||||
return std::string(v.begin(), v.end());
|
return std::string(v.begin(), v.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
operator==(const string &s) const {
|
||||||
|
return this->v == s.v;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
reserve(size_type n) {
|
reserve(size_type n) {
|
||||||
v.reserve(n);
|
v.reserve(n);
|
||||||
|
@ -382,19 +412,6 @@ namespace clover {
|
||||||
mutable vector<char> v;
|
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 {
|
class exception {
|
||||||
public:
|
public:
|
||||||
exception() {}
|
exception() {}
|
||||||
|
|
Loading…
Reference in New Issue