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 <danilchap@webrtc.org>
Auto-Submit: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40403}
This commit is contained in:
Danil Chapovalov 2023-07-06 11:06:36 +02:00 committed by WebRTC LUCI CQ
parent cc6042d876
commit 26f72901c6
3 changed files with 4 additions and 2 deletions

View file

@ -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;

View file

@ -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);

View file

@ -52,6 +52,8 @@ TEST(CopyOnWriteBufferTest, TestCreateEmptyData) {
}
TEST(CopyOnWriteBufferTest, TestMoveConstruct) {
EXPECT_TRUE(std::is_nothrow_move_constructible_v<CopyOnWriteBuffer>);
CopyOnWriteBuffer buf1(kTestData, 3, 10);
size_t buf1_size = buf1.size();
size_t buf1_capacity = buf1.capacity();