BLI: support equality operator on Span and Vector
This is quite convenient sometimes and is available for `std::vector` as well.
This commit is contained in:
parent
bf620020f1
commit
e9eb08fea1
|
@ -417,6 +417,19 @@ template<typename T> class Span {
|
|||
return Span<NewT>(reinterpret_cast<const NewT *>(data_), new_size);
|
||||
}
|
||||
|
||||
friend bool operator==(const Span<T> a, const Span<T> b)
|
||||
{
|
||||
if (a.size() != b.size()) {
|
||||
return false;
|
||||
}
|
||||
return std::equal(a.begin(), a.end(), b.begin());
|
||||
}
|
||||
|
||||
friend bool operator!=(const Span<T> a, const Span<T> b)
|
||||
{
|
||||
return !(a == b);
|
||||
}
|
||||
|
||||
/**
|
||||
* A debug utility to print the content of the Span. Every element will be printed on a
|
||||
* separate line using the given callback.
|
||||
|
|
|
@ -879,6 +879,16 @@ class Vector {
|
|||
return IndexRange(this->size());
|
||||
}
|
||||
|
||||
friend bool operator==(const Vector &a, const Vector &b)
|
||||
{
|
||||
return a.as_span() == b.as_span();
|
||||
}
|
||||
|
||||
friend bool operator!=(const Vector &a, const Vector &b)
|
||||
{
|
||||
return !(a == b);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print some debug information about the vector.
|
||||
*/
|
||||
|
|
|
@ -404,4 +404,21 @@ TEST(span, ImplicitConversions)
|
|||
BLI_STATIC_ASSERT((!std::is_convertible_v<Span<int *>, MutableSpan<const int *>>), "");
|
||||
}
|
||||
|
||||
TEST(span, Comparison)
|
||||
{
|
||||
std::array<int, 3> a = {3, 4, 5};
|
||||
std::array<int, 4> b = {3, 4, 5, 6};
|
||||
|
||||
EXPECT_FALSE(Span(a) == Span(b));
|
||||
EXPECT_FALSE(Span(b) == Span(a));
|
||||
EXPECT_TRUE(Span(a) == Span(b).take_front(3));
|
||||
EXPECT_TRUE(Span(a) == Span(a));
|
||||
EXPECT_TRUE(Span(b) == Span(b));
|
||||
|
||||
EXPECT_TRUE(Span(a) != Span(b));
|
||||
EXPECT_TRUE(Span(b) != Span(a));
|
||||
EXPECT_FALSE(Span(a) != Span(b).take_front(3));
|
||||
EXPECT_FALSE(Span(a) != Span(a));
|
||||
}
|
||||
|
||||
} // namespace blender::tests
|
||||
|
|
Loading…
Reference in New Issue