From 26f72901c62c55c4bee627d9f52093d9e31d1783 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Thu, 6 Jul 2023 11:06:36 +0200 Subject: [PATCH] Mark rtc::CopyOnWriteBuffer move constructor noexcept To allow use more efficient move instead of copy when wrapped into std::vector Bug: webrtc:15263 Change-Id: Ie085e3ae41fc4e49b350e430a6dea4767777bbf4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/311460 Commit-Queue: Danil Chapovalov Auto-Submit: Danil Chapovalov Reviewed-by: Tomas Gunnarsson Commit-Queue: Tomas Gunnarsson Cr-Commit-Position: refs/heads/main@{#40403} --- rtc_base/copy_on_write_buffer.cc | 2 +- rtc_base/copy_on_write_buffer.h | 2 +- rtc_base/copy_on_write_buffer_unittest.cc | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/rtc_base/copy_on_write_buffer.cc b/rtc_base/copy_on_write_buffer.cc index 850327b088..d8ab53cb24 100644 --- a/rtc_base/copy_on_write_buffer.cc +++ b/rtc_base/copy_on_write_buffer.cc @@ -23,7 +23,7 @@ CopyOnWriteBuffer::CopyOnWriteBuffer() : offset_(0), size_(0) { CopyOnWriteBuffer::CopyOnWriteBuffer(const CopyOnWriteBuffer& buf) : buffer_(buf.buffer_), offset_(buf.offset_), size_(buf.size_) {} -CopyOnWriteBuffer::CopyOnWriteBuffer(CopyOnWriteBuffer&& buf) +CopyOnWriteBuffer::CopyOnWriteBuffer(CopyOnWriteBuffer&& buf) noexcept : buffer_(std::move(buf.buffer_)), offset_(buf.offset_), size_(buf.size_) { buf.offset_ = 0; buf.size_ = 0; diff --git a/rtc_base/copy_on_write_buffer.h b/rtc_base/copy_on_write_buffer.h index 849f5f5df2..af6e868d7d 100644 --- a/rtc_base/copy_on_write_buffer.h +++ b/rtc_base/copy_on_write_buffer.h @@ -36,7 +36,7 @@ class RTC_EXPORT CopyOnWriteBuffer { // Share the data with an existing buffer. CopyOnWriteBuffer(const CopyOnWriteBuffer& buf); // Move contents from an existing buffer. - CopyOnWriteBuffer(CopyOnWriteBuffer&& buf); + CopyOnWriteBuffer(CopyOnWriteBuffer&& buf) noexcept; // Construct a buffer from a string, convenient for unittests. explicit CopyOnWriteBuffer(absl::string_view s); diff --git a/rtc_base/copy_on_write_buffer_unittest.cc b/rtc_base/copy_on_write_buffer_unittest.cc index ad2c4e0fba..8a9fc4e2f4 100644 --- a/rtc_base/copy_on_write_buffer_unittest.cc +++ b/rtc_base/copy_on_write_buffer_unittest.cc @@ -52,6 +52,8 @@ TEST(CopyOnWriteBufferTest, TestCreateEmptyData) { } TEST(CopyOnWriteBufferTest, TestMoveConstruct) { + EXPECT_TRUE(std::is_nothrow_move_constructible_v); + CopyOnWriteBuffer buf1(kTestData, 3, 10); size_t buf1_size = buf1.size(); size_t buf1_capacity = buf1.capacity();