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) {