diff --git a/AK/ByteBuffer.h b/AK/ByteBuffer.h index 7f24872cad..61ebf051a6 100644 --- a/AK/ByteBuffer.h +++ b/AK/ByteBuffer.h @@ -332,6 +332,14 @@ struct Traits : public GenericTraits { { return Traits::hash(byte_buffer.span()); } + static bool equals(ByteBuffer const& byte_buffer, Bytes const& other) + { + return byte_buffer.bytes() == other; + } + static bool equals(ByteBuffer const& byte_buffer, ReadonlyBytes const& other) + { + return byte_buffer.bytes() == other; + } }; } diff --git a/Tests/AK/TestByteBuffer.cpp b/Tests/AK/TestByteBuffer.cpp index 29ed85d32f..7122b3264a 100644 --- a/Tests/AK/TestByteBuffer.cpp +++ b/Tests/AK/TestByteBuffer.cpp @@ -7,6 +7,7 @@ #include #include +#include TEST_CASE(equality_operator) { @@ -33,6 +34,18 @@ TEST_CASE(equality_operator) EXPECT_EQ(d == d, true); } +TEST_CASE(byte_buffer_vector_contains_slow_bytes) +{ + Vector vector; + ByteBuffer a = ByteBuffer::copy("Hello, friend", 13).release_value(); + vector.append(a); + + ReadonlyBytes b = "Hello, friend"sv.bytes(); + Bytes c = a.bytes(); + EXPECT_EQ(vector.contains_slow(b), true); + EXPECT_EQ(vector.contains_slow(c), true); +} + BENCHMARK_CASE(append) { ByteBuffer bb;