From e0ec125daef95b4f43a78a69942766ccde5769aa Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Thu, 23 Nov 2023 14:36:33 +0100 Subject: [PATCH] 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 Auto-Submit: Danil Chapovalov Commit-Queue: Mirko Bonadei Cr-Commit-Position: refs/heads/main@{#41234} --- rtc_base/copy_on_write_buffer.h | 2 ++ rtc_base/copy_on_write_buffer_unittest.cc | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/rtc_base/copy_on_write_buffer.h b/rtc_base/copy_on_write_buffer.h index 8332ee6f62..bc5e82f89f 100644 --- a/rtc_base/copy_on_write_buffer.h +++ b/rtc_base/copy_on_write_buffer.h @@ -132,6 +132,8 @@ class RTC_EXPORT CopyOnWriteBuffer { return buffer_->data() + offset_; } + bool empty() const { return size_ == 0; } + size_t size() const { RTC_DCHECK(IsConsistent()); return size_; diff --git a/rtc_base/copy_on_write_buffer_unittest.cc b/rtc_base/copy_on_write_buffer_unittest.cc index 8a9fc4e2f4..8bf53c4d4c 100644 --- a/rtc_base/copy_on_write_buffer_unittest.cc +++ b/rtc_base/copy_on_write_buffer_unittest.cc @@ -46,11 +46,20 @@ void EnsureBuffersDontShareData(const CopyOnWriteBuffer& buf1, TEST(CopyOnWriteBufferTest, TestCreateEmptyData) { CopyOnWriteBuffer buf(static_cast(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); @@ -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(nullptr, 0); EXPECT_EQ(0u, buf.size()); + EXPECT_TRUE(buf.empty()); } TEST(CopyOnWriteBufferTest, SetDataNoMoreThanCapacityDoesntCauseReallocation) {