Add CopyOnWriteBuffer::empty accessor

CopyOnWriteBuffer is a container-like type,
lack of empty accessor is often surprising.

Bug: None
Change-Id: I9db1e3837aa596810729e9bf92e366fbce3908d3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/328382
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Auto-Submit: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41234}
This commit is contained in:
Danil Chapovalov 2023-11-23 14:36:33 +01:00 committed by WebRTC LUCI CQ
parent 01859d41bf
commit e0ec125dae
2 changed files with 14 additions and 0 deletions

View file

@ -132,6 +132,8 @@ class RTC_EXPORT CopyOnWriteBuffer {
return buffer_->data<T>() + offset_;
}
bool empty() const { return size_ == 0; }
size_t size() const {
RTC_DCHECK(IsConsistent());
return size_;

View file

@ -46,11 +46,20 @@ void EnsureBuffersDontShareData(const CopyOnWriteBuffer& buf1,
TEST(CopyOnWriteBufferTest, TestCreateEmptyData) {
CopyOnWriteBuffer buf(static_cast<const uint8_t*>(nullptr), 0);
EXPECT_TRUE(buf.empty());
EXPECT_EQ(buf.size(), 0u);
EXPECT_EQ(buf.capacity(), 0u);
EXPECT_EQ(buf.data(), nullptr);
}
TEST(CopyOnWriteBufferTest, CreateEmptyDataWithCapacity) {
CopyOnWriteBuffer buf(0, 16);
EXPECT_TRUE(buf.empty());
EXPECT_EQ(buf.size(), 0u);
EXPECT_EQ(buf.capacity(), 16u);
EXPECT_NE(buf.MutableData(), nullptr);
}
TEST(CopyOnWriteBufferTest, TestMoveConstruct) {
EXPECT_TRUE(std::is_nothrow_move_constructible_v<CopyOnWriteBuffer>);
@ -60,9 +69,11 @@ TEST(CopyOnWriteBufferTest, TestMoveConstruct) {
const uint8_t* buf1_data = buf1.cdata();
CopyOnWriteBuffer buf2(std::move(buf1));
EXPECT_TRUE(buf1.empty());
EXPECT_EQ(buf1.size(), 0u);
EXPECT_EQ(buf1.capacity(), 0u);
EXPECT_EQ(buf1.data(), nullptr);
EXPECT_FALSE(buf2.empty());
EXPECT_EQ(buf2.size(), buf1_size);
EXPECT_EQ(buf2.capacity(), buf1_capacity);
EXPECT_EQ(buf2.data(), buf1_data);
@ -127,6 +138,7 @@ TEST(CopyOnWriteBufferTest, SetEmptyData) {
buf.SetData<uint8_t>(nullptr, 0);
EXPECT_EQ(0u, buf.size());
EXPECT_TRUE(buf.empty());
}
TEST(CopyOnWriteBufferTest, SetDataNoMoreThanCapacityDoesntCauseReallocation) {