Replace ArrayView with std::span in rtc_base/ Search&Replace MakeArrayView and ArrayView with std::span Search&Replace include "api/array_view.h" with include <span> Remove build dependencies on array_view target Rename tests that were named PrefixArrayView from "Prefixstd::span" to "PrefixSpan" Bug: webrtc:439801349 Change-Id: Iad951423733c8676c7356047f115eb3fcf2e885d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/454241 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47107}
diff --git a/modules/audio_device/mac/audio_device_mac.cc b/modules/audio_device/mac/audio_device_mac.cc index 1ff98af..e6e97bf 100644 --- a/modules/audio_device/mac/audio_device_mac.cc +++ b/modules/audio_device/mac/audio_device_mac.cc
@@ -15,6 +15,7 @@ #include <sys/sysctl.h> // sysctlbyname() #include <memory> +#include <span> #include <vector> #include "modules/third_party/portaudio/pa_ringbuffer.h" @@ -834,7 +835,7 @@ } return GetDeviceName(kAudioDevicePropertyScopeOutput, index, - ArrayView<char>(name, kAdmMaxDeviceNameSize)); + std::span<char>(name, kAdmMaxDeviceNameSize)); } int32_t AudioDeviceMac::RecordingDeviceName(uint16_t index, @@ -853,7 +854,7 @@ } return GetDeviceName(kAudioDevicePropertyScopeInput, index, - ArrayView<char>(name, kAdmMaxDeviceNameSize)); + std::span<char>(name, kAdmMaxDeviceNameSize)); } int16_t AudioDeviceMac::RecordingDevices() { @@ -1644,7 +1645,7 @@ int32_t AudioDeviceMac::GetDeviceName(const AudioObjectPropertyScope scope, const uint16_t index, - ArrayView<char> name) { + std::span<char> name) { OSStatus err = noErr; AudioDeviceID deviceIds[MaxNumberDevices];
diff --git a/modules/audio_device/mac/audio_device_mac.h b/modules/audio_device/mac/audio_device_mac.h index c80de22..4598e1a 100644 --- a/modules/audio_device/mac/audio_device_mac.h +++ b/modules/audio_device/mac/audio_device_mac.h
@@ -17,6 +17,7 @@ #include <atomic> #include <memory> +#include <span> #include "absl/strings/string_view.h" #include "modules/audio_device/audio_device_generic.h" @@ -178,7 +179,7 @@ int32_t GetDeviceName(AudioObjectPropertyScope scope, uint16_t index, - ArrayView<char> name); + std::span<char> name); int32_t InitDevice(uint16_t userDeviceIndex, AudioDeviceID& deviceId,
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn index 89498c5..59fea18 100644 --- a/rtc_base/BUILD.gn +++ b/rtc_base/BUILD.gn
@@ -29,7 +29,6 @@ deps = [ ":checks", ":safe_conversions", - "../api:array_view", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/numeric:bits", "//third_party/abseil-cpp/absl/strings:string_view", @@ -80,7 +79,6 @@ ":checks", ":type_traits", ":zero_memory", - "../api:array_view", "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/strings:string_view", @@ -92,7 +90,6 @@ sources = [ "byte_order.h" ] deps = [ ":checks", - "../api:array_view", "system:arch", "//third_party/abseil-cpp/absl/base:core_headers", ] @@ -143,7 +140,6 @@ ] deps = [ ":checks", - "../api:array_view", "../api/units:data_size", "//third_party/abseil-cpp/absl/numeric:bits", "//third_party/abseil-cpp/absl/strings:string_view", @@ -159,7 +155,6 @@ deps = [ ":buffer", ":byte_order", - "../api:array_view", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/strings:string_view", ] @@ -190,7 +185,6 @@ ":checks", ":refcount", ":type_traits", - "../api:array_view", "../api:make_ref_counted", "../api:scoped_refptr", "system:rtc_export", @@ -385,10 +379,7 @@ "zero_memory.cc", "zero_memory.h", ] - deps = [ - ":checks", - "../api:array_view", - ] + deps = [ ":checks" ] } rtc_library("platform_thread_types") { @@ -643,7 +634,6 @@ deps = [ ":checks", ":safe_minmax", - "../api:array_view", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", @@ -660,7 +650,6 @@ ":logging", ":stringutils", ":timeutils", - "../api:array_view", "system:rtc_export", "//third_party/abseil-cpp/absl/strings:string_view", ] @@ -1056,7 +1045,6 @@ ":socket_address", ":socket_server", ":timeutils", - "../api:array_view", "../api:async_dns_resolver", "../api:function_view", "../api:location", @@ -1124,7 +1112,6 @@ ":ip_address", ":net_helpers", ":socket_address", - "../api:array_view", "../api/transport:ecn_marking", "../api/units:timestamp", "system:rtc_export", @@ -1273,7 +1260,6 @@ ":socket_factory", ":stringutils", ":threading", - "../api:array_view", "../api:field_trials_view", "../api:scoped_refptr", "../api:sequence_checker", @@ -1332,7 +1318,6 @@ ":socket_address", ":stringutils", ":zero_memory", - "../api:array_view", "//third_party/abseil-cpp/absl/functional:any_invocable", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", @@ -1365,7 +1350,6 @@ ":socket", ":socket_address", ":timeutils", - "../api:array_view", "../api/environment", "../api/units:timestamp", "network:received_packet", @@ -1522,7 +1506,6 @@ ":crypto_random", ":macromagic", ":stringutils", - "../api:array_view", "../api:sequence_checker", "synchronization:mutex", "system:no_unique_address", @@ -1551,7 +1534,6 @@ ":logging", ":macromagic", ":threading", - "../api:array_view", "../api:sequence_checker", "system:no_unique_address", "system:rtc_export", @@ -1657,7 +1639,6 @@ ":ssl_header", ":stringutils", ":timeutils", - "../api:array_view", "../api:refcountedbase", "../api:scoped_refptr", "system:rtc_export", @@ -1733,7 +1714,6 @@ ":stringutils", ":threading", ":timeutils", - "../api:array_view", "../api:field_trials_view", "../api:sequence_checker", "../api/task_queue", @@ -1869,7 +1849,6 @@ ":stringutils", ":threading", ":timeutils", - "../api:array_view", "../api:make_ref_counted", "../api:refcountedbase", "../api:scoped_refptr", @@ -1942,7 +1921,6 @@ "base64.h", ] deps = [ - "../api:array_view", "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", @@ -1968,7 +1946,6 @@ ] deps = [ ":base64_rust_bridge", - "../api:array_view", "//build/rust:cxx_cppdeps", "//third_party/abseil-cpp/absl/strings:string_view", ] @@ -2185,7 +2162,6 @@ ":timestamp_aligner", ":timeutils", ":zero_memory", - "../api:array_view", "../api:make_ref_counted", "../api:ref_count", "../api:scoped_refptr", @@ -2359,7 +2335,6 @@ ":threading", ":timeutils", ":unique_id_generator", - "../api:array_view", "../api:field_trials", "../api:field_trials_view", "../api:location",
diff --git a/rtc_base/async_tcp_socket.cc b/rtc_base/async_tcp_socket.cc index ad2867e..02aa98f 100644 --- a/rtc_base/async_tcp_socket.cc +++ b/rtc_base/async_tcp_socket.cc
@@ -15,11 +15,11 @@ #include <cstdint> #include <cstring> #include <memory> +#include <span> #include <utility> #include "absl/base/nullability.h" #include "absl/memory/memory.h" -#include "api/array_view.h" #include "api/environment/environment.h" #include "rtc_base/async_packet_socket.h" #include "rtc_base/byte_order.h" @@ -127,7 +127,7 @@ int AsyncTCPSocketBase::FlushOutBuffer() { RTC_DCHECK_GT(outbuf_.size(), 0); - ArrayView<uint8_t> view = outbuf_; + std::span<uint8_t> view = outbuf_; int res; while (!view.empty()) { res = socket_->Send(view.data(), view.size()); @@ -212,7 +212,7 @@ } else { if (bytes_remaining > 0) { // Move remaining bytes to beginning of buffer. - inbuf_.SetData(ArrayView<uint8_t>(inbuf_).subspan(processed)); + inbuf_.SetData(std::span<uint8_t>(inbuf_).subspan(processed)); } else { inbuf_.Clear(); } @@ -272,7 +272,7 @@ return static_cast<int>(cb); } -size_t AsyncTCPSocket::ProcessInput(ArrayView<const uint8_t> data) { +size_t AsyncTCPSocket::ProcessInput(std::span<const uint8_t> data) { SocketAddress remote_addr(GetRemoteAddress()); size_t processed_bytes = 0;
diff --git a/rtc_base/async_tcp_socket.h b/rtc_base/async_tcp_socket.h index fdd5e3a..c937fdd 100644 --- a/rtc_base/async_tcp_socket.h +++ b/rtc_base/async_tcp_socket.h
@@ -14,9 +14,9 @@ #include <cstddef> #include <cstdint> #include <memory> +#include <span> #include "absl/base/nullability.h" -#include "api/array_view.h" #include "api/environment/environment.h" #include "rtc_base/async_packet_socket.h" #include "rtc_base/buffer.h" @@ -42,7 +42,7 @@ size_t cb, const AsyncSocketPacketOptions& options) override = 0; // Must return the number of bytes processed. - virtual size_t ProcessInput(ArrayView<const uint8_t> data) = 0; + virtual size_t ProcessInput(std::span<const uint8_t> data) = 0; SocketAddress GetLocalAddress() const override; SocketAddress GetRemoteAddress() const override; @@ -92,7 +92,7 @@ int Send(const void* pv, size_t cb, const AsyncSocketPacketOptions& options) override; - size_t ProcessInput(ArrayView<const uint8_t>) override; + size_t ProcessInput(std::span<const uint8_t>) override; private: const Environment env_;
diff --git a/rtc_base/base64.h b/rtc_base/base64.h index 9a83d8b..540fc9a 100644 --- a/rtc_base/base64.h +++ b/rtc_base/base64.h
@@ -13,16 +13,16 @@ #include <cstdint> #include <optional> +#include <span> #include <string> #include "absl/strings/string_view.h" -#include "api/array_view.h" namespace webrtc { std::string Base64Encode(absl::string_view data); -inline std::string Base64Encode(ArrayView<const uint8_t> data) { +inline std::string Base64Encode(std::span<const uint8_t> data) { return Base64Encode(absl::string_view( reinterpret_cast<const char*>(data.data()), data.size())); }
diff --git a/rtc_base/bit_buffer.cc b/rtc_base/bit_buffer.cc index 1b862e7..ab2be82 100644 --- a/rtc_base/bit_buffer.cc +++ b/rtc_base/bit_buffer.cc
@@ -15,10 +15,10 @@ #include <cstdint> #include <cstring> #include <limits> +#include <span> #include "absl/numeric/bits.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" namespace webrtc { @@ -54,7 +54,7 @@ } // namespace -BitBufferWriter::BitBufferWriter(ArrayView<uint8_t> bytes) +BitBufferWriter::BitBufferWriter(std::span<uint8_t> bytes) : BitBufferWriter(bytes.data(), bytes.size()) {} BitBufferWriter::BitBufferWriter(uint8_t* bytes, size_t byte_count)
diff --git a/rtc_base/bit_buffer.h b/rtc_base/bit_buffer.h index 1c78662..575a7ef 100644 --- a/rtc_base/bit_buffer.h +++ b/rtc_base/bit_buffer.h
@@ -14,8 +14,9 @@ #include <stddef.h> // For size_t. #include <stdint.h> // For integer types. +#include <span> + #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/units/data_size.h" namespace webrtc { @@ -29,7 +30,7 @@ static constexpr DataSize kMaxLeb128Length = DataSize::Bytes(10); // Constructs a bit buffer for the writable buffer of `bytes`. - explicit BitBufferWriter(ArrayView<uint8_t> bytes); + explicit BitBufferWriter(std::span<uint8_t> bytes); BitBufferWriter(uint8_t* bytes, size_t byte_count); BitBufferWriter(const BitBufferWriter&) = delete;
diff --git a/rtc_base/bit_buffer_unittest.cc b/rtc_base/bit_buffer_unittest.cc index bca818c..b607c40 100644 --- a/rtc_base/bit_buffer_unittest.cc +++ b/rtc_base/bit_buffer_unittest.cc
@@ -13,8 +13,8 @@ #include <cstddef> #include <cstdint> #include <limits> +#include <span> -#include "api/array_view.h" #include "rtc_base/bitstream_reader.h" #include "test/gmock.h" #include "test/gtest.h" @@ -166,7 +166,7 @@ // That should be all that fits in the buffer. EXPECT_FALSE(buffer.WriteBits(1, 1)); - BitstreamReader reader(MakeArrayView(bytes, 4)); + BitstreamReader reader(std::span(bytes, 4)); EXPECT_EQ(reader.ReadBits(3), 0x2u); EXPECT_EQ(reader.ReadBits(2), 0x1u); EXPECT_EQ(reader.ReadBits(7), 0x53u);
diff --git a/rtc_base/bitstream_reader.h b/rtc_base/bitstream_reader.h index 622534e..5b9ee98 100644 --- a/rtc_base/bitstream_reader.h +++ b/rtc_base/bitstream_reader.h
@@ -13,12 +13,12 @@ #include <stdint.h> +#include <span> #include <string> #include <type_traits> #include "absl/base/attributes.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" #include "rtc_base/numerics/safe_conversions.h" @@ -33,7 +33,7 @@ class BitstreamReader { public: explicit BitstreamReader( - ArrayView<const uint8_t> bytes ABSL_ATTRIBUTE_LIFETIME_BOUND); + std::span<const uint8_t> bytes ABSL_ATTRIBUTE_LIFETIME_BOUND); explicit BitstreamReader( absl::string_view bytes ABSL_ATTRIBUTE_LIFETIME_BOUND); BitstreamReader(const BitstreamReader&) = default; @@ -126,7 +126,7 @@ mutable bool last_read_is_verified_ = true; }; -inline BitstreamReader::BitstreamReader(ArrayView<const uint8_t> bytes) +inline BitstreamReader::BitstreamReader(std::span<const uint8_t> bytes) : bytes_(bytes.data()), remaining_bits_(checked_cast<int>(bytes.size() * 8)) {}
diff --git a/rtc_base/bitstream_reader_unittest.cc b/rtc_base/bitstream_reader_unittest.cc index 4ad6624..f3f8f9a 100644 --- a/rtc_base/bitstream_reader_unittest.cc +++ b/rtc_base/bitstream_reader_unittest.cc
@@ -15,10 +15,10 @@ #include <cstdint> #include <limits> #include <optional> +#include <span> #include <utility> #include "absl/numeric/bits.h" -#include "api/array_view.h" #include "rtc_base/checks.h" #include "test/gtest.h" @@ -197,14 +197,14 @@ } TEST(BitstreamReaderTest, ReadZeroBits) { - BitstreamReader reader(ArrayView<const uint8_t>{}); + BitstreamReader reader(std::span<const uint8_t>{}); EXPECT_EQ(reader.ReadBits(0), 0u); EXPECT_TRUE(reader.Ok()); } TEST(BitstreamReaderTest, ReadBitFromEmptyArray) { - BitstreamReader reader(ArrayView<const uint8_t>{}); + BitstreamReader reader(std::span<const uint8_t>{}); // Trying to read from the empty array shouldn't dereference the pointer, // i.e. shouldn't crash. @@ -213,7 +213,7 @@ } TEST(BitstreamReaderTest, ReadBitsFromEmptyArray) { - BitstreamReader reader(ArrayView<const uint8_t>{}); + BitstreamReader reader(std::span<const uint8_t>{}); // Trying to read from the empty array shouldn't dereference the pointer, // i.e. shouldn't crash. @@ -324,12 +324,12 @@ const uint8_t bytes[] = {0x00, 0xFF, 0xFF}; // Make sure the bit buffer correctly enforces byte length on golomb reads. // If it didn't, the above buffer would be valid at 3 bytes. - BitstreamReader reader1(MakeArrayView(bytes, 1)); + BitstreamReader reader1(std::span(bytes, 1)); // When parse fails, `ReadExponentialGolomb` may return any number. reader1.ReadExponentialGolomb(); EXPECT_FALSE(reader1.Ok()); - BitstreamReader reader2(MakeArrayView(bytes, 2)); + BitstreamReader reader2(std::span(bytes, 2)); reader2.ReadExponentialGolomb(); EXPECT_FALSE(reader2.Ok());
diff --git a/rtc_base/buffer.h b/rtc_base/buffer.h index f030f6b..88b2ff7 100644 --- a/rtc_base/buffer.h +++ b/rtc_base/buffer.h
@@ -22,7 +22,6 @@ #include "absl/algorithm/container.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" #include "rtc_base/type_traits.h" #include "rtc_base/zero_memory.h" @@ -215,12 +214,12 @@ T& operator[](size_t index) { RTC_DCHECK_LT(index, size_); - return ArrayView<T>(*this)[index]; + return std::span<T>(*this)[index]; } T operator[](size_t index) const { RTC_DCHECK_LT(index, size_); - return ArrayView<const T>(*this)[index]; + return std::span<const T>(*this)[index]; } iterator begin() { return std::span(*this).begin(); } @@ -263,12 +262,12 @@ // Replaces the data in the buffer with at most `max_elements` of data, using // the function `setter`, which should have the following signature: // - // size_t setter(ArrayView<U> view) + // size_t setter(std::span<U> view) // - // `setter` is given an appropriately typed ArrayView of length exactly + // `setter` is given an appropriately typed std::span of length exactly // `max_elements` that describes the area where it should write the data; it // should return the number of elements actually written. (If it doesn't fill - // the whole ArrayView, it should leave the unused space at the end.) + // the whole std::span, it should leave the unused space at the end.) template <typename U = T, typename F, typename std::enable_if< @@ -298,9 +297,9 @@ const size_t new_size = size_ + size; EnsureCapacityWithHeadroom(new_size, true); static_assert(sizeof(T) == sizeof(U), ""); - ArrayView<const U> source(data, size); - ArrayView<T> destination = - ArrayView<T>(data_.get(), capacity_).subspan(size_, size); + std::span<const U> source(data, size); + std::span<T> destination = + std::span<T>(data_.get(), capacity_).subspan(size_, size); absl::c_copy(source, destination.begin()); size_ = new_size; RTC_DCHECK(IsConsistent()); @@ -331,12 +330,12 @@ // Appends at most `max_elements` to the end of the buffer, using the function // `setter`, which should have the following signature: // - // size_t setter(ArrayView<U> view) + // size_t setter(std::span<U> view) // - // `setter` is given an appropriately typed ArrayView of length exactly + // `setter` is given an appropriately typed std::span of length exactly // `max_elements` that describes the area where it should write the data; it // should return the number of elements actually written. (If it doesn't fill - // the whole ArrayView, it should leave the unused space at the end.) + // the whole std::span, it should leave the unused space at the end.) template <typename U = T, typename F, typename std::enable_if< @@ -346,7 +345,7 @@ const size_t old_size = size_; SetSizeInternal(old_size + max_elements); size_t written_elements = - setter(ArrayView<U>(data<U>(), size()).subspan(old_size)); + setter(std::span<U>(data<U>(), size()).subspan(old_size)); RTC_CHECK_LE(written_elements, max_elements); size_ = old_size + written_elements; @@ -448,7 +447,7 @@ // It would be sufficient to only zero "size_" elements, as all other // methods already ensure that the unused capacity contains no sensitive // data---but better safe than sorry. - ExplicitZeroMemory(ArrayView<T>(data_.get(), capacity_)); + ExplicitZeroMemory(std::span<T>(data_.get(), capacity_)); } } @@ -456,7 +455,7 @@ void ZeroTrailingData(size_t count) { RTC_DCHECK(IsConsistent()); RTC_DCHECK_LE(count, capacity_ - size_); - ExplicitZeroMemory(MakeArrayView(data(), capacity_).subspan(size_)); + ExplicitZeroMemory(std::span(data(), capacity_).subspan(size_)); } // Precondition for all methods except Clear, operator= and the destructor.
diff --git a/rtc_base/buffer_unittest.cc b/rtc_base/buffer_unittest.cc index 58857f4..4c22667 100644 --- a/rtc_base/buffer_unittest.cc +++ b/rtc_base/buffer_unittest.cc
@@ -14,10 +14,10 @@ #include <cstddef> #include <cstdint> #include <cstring> +#include <span> #include <utility> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" #include "test/gmock.h" #include "test/gtest.h" @@ -36,7 +36,7 @@ 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}); uint8_t* TestDataAtIndex(int index) { - return ArrayView<uint8_t>(kTestData).subspan(index).data(); + return std::span<uint8_t>(kTestData).subspan(index).data(); } void TestBuf(const Buffer& b1, size_t size, size_t capacity) { @@ -109,7 +109,7 @@ EXPECT_EQ(buf, Buffer(exp)); Buffer buf2; buf2.AppendData(buf); - buf2.AppendData(ArrayView<uint8_t>(buf)); + buf2.AppendData(std::span<uint8_t>(buf)); const int8_t exp2[] = {0x4, 0x5, 0x6, 0xa, 0xb, 0x4, 0x5, 0x6, 0xa, 0xb}; EXPECT_EQ(buf2, Buffer(exp2)); } @@ -127,7 +127,7 @@ buf.AppendData(TestDataContainer()); EXPECT_EQ(6u, buf.size()); EXPECT_EQ(0, memcmp(buf.data(), kTestData.data(), 3)); - EXPECT_EQ(0, memcmp(ArrayView<uint8_t>(buf).subspan(3).data(), + EXPECT_EQ(0, memcmp(std::span<uint8_t>(buf).subspan(3).data(), kTestData.data(), 3)); EXPECT_THAT(buf, ElementsAre(0, 1, 2, 0, 1, 2)); } @@ -250,7 +250,7 @@ } TEST(BufferTest, TestLambdaSetAppend) { - auto setter = [](ArrayView<uint8_t> av) { + auto setter = [](std::span<uint8_t> av) { for (int i = 0; i != 15; ++i) av[i] = kTestData[i]; return 15; @@ -270,7 +270,7 @@ } TEST(BufferTest, TestLambdaSetAppendSigned) { - auto setter = [](ArrayView<int8_t> av) { + auto setter = [](std::span<int8_t> av) { for (int i = 0; i != 15; ++i) av[i] = kTestData[i]; return 15; @@ -290,7 +290,7 @@ } TEST(BufferTest, TestLambdaAppendEmpty) { - auto setter = [](ArrayView<uint8_t> av) { + auto setter = [](std::span<uint8_t> av) { for (int i = 0; i != 15; ++i) av[i] = kTestData[i]; return 15; @@ -308,7 +308,7 @@ } TEST(BufferTest, TestLambdaAppendPartial) { - auto setter = [](ArrayView<uint8_t> av) { + auto setter = [](std::span<uint8_t> av) { for (int i = 0; i != 7; ++i) av[i] = kTestData[i]; return 7; @@ -324,7 +324,7 @@ TEST(BufferTest, TestMutableLambdaSetAppend) { uint8_t magic_number = 17; - auto setter = [magic_number](ArrayView<uint8_t> av) mutable { + auto setter = [magic_number](std::span<uint8_t> av) mutable { for (int i = 0; i != 15; ++i) { av[i] = magic_number; ++magic_number; @@ -484,7 +484,7 @@ const size_t old_capacity = buf.capacity(); constexpr size_t offset = 1; // Pointer to the last five bytes of the underlying buffer. - auto to_be_zeroed = ArrayView<const uint8_t>(buf).subspan(2); + auto to_be_zeroed = std::span<const uint8_t>(buf).subspan(2); buf.SetData(TestDataAtIndex(offset), 2); // Sanity checks to make sure the underlying heap memory was not reallocated. EXPECT_EQ(old_data, buf.data()); @@ -498,7 +498,7 @@ TEST(ZeroOnFreeBufferTest, TestZeroOnSetDataFromSetter) { static constexpr size_t offset = 1; - const auto setter = [](ArrayView<uint8_t> av) { + const auto setter = [](std::span<uint8_t> av) { for (int i = 0; i != 2; ++i) av[i] = kTestData[offset + i]; return 2; @@ -506,7 +506,7 @@ ZeroOnFreeBuffer<uint8_t> buf(kTestData.data(), 7); const uint8_t* old_data = buf.data(); - auto to_be_zeroed = ArrayView<const uint8_t>(buf).subspan(2); + auto to_be_zeroed = std::span<const uint8_t>(buf).subspan(2); const size_t old_capacity = buf.capacity(); buf.SetData(2, setter); // Sanity checks to make sure the underlying heap memory was not reallocated. @@ -521,7 +521,7 @@ TEST(ZeroOnFreeBufferTest, TestZeroOnSetSize) { ZeroOnFreeBuffer<uint8_t> buf(kTestData.data(), 7); - auto to_be_zeroed = ArrayView<const uint8_t>(buf).subspan(2); + auto to_be_zeroed = std::span<const uint8_t>(buf).subspan(2); const uint8_t* old_data = buf.data(); const size_t old_capacity = buf.capacity(); buf.SetSize(2); @@ -537,7 +537,7 @@ TEST(ZeroOnFreeBufferTest, TestZeroOnClear) { ZeroOnFreeBuffer<uint8_t> buf(kTestData.data(), 7); - auto to_be_zeroed = ArrayView<const uint8_t>(buf); + auto to_be_zeroed = std::span<const uint8_t>(buf); const uint8_t* old_data = buf.data(); const size_t old_capacity = buf.capacity(); buf.Clear();
diff --git a/rtc_base/byte_buffer.cc b/rtc_base/byte_buffer.cc index 719720d..b3ebb1e 100644 --- a/rtc_base/byte_buffer.cc +++ b/rtc_base/byte_buffer.cc
@@ -12,10 +12,10 @@ #include <cstdint> #include <cstring> +#include <span> #include <string> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/byte_order.h" namespace webrtc { @@ -25,7 +25,7 @@ ByteBufferWriter::ByteBufferWriter(const uint8_t* bytes, size_t len) : ByteBufferWriterT(bytes, len) {} -ByteBufferReader::ByteBufferReader(ArrayView<const uint8_t> bytes) { +ByteBufferReader::ByteBufferReader(std::span<const uint8_t> bytes) { Construct(bytes.data(), bytes.size()); } @@ -146,7 +146,7 @@ return true; } -bool ByteBufferReader::ReadBytes(ArrayView<uint8_t> val) { +bool ByteBufferReader::ReadBytes(std::span<uint8_t> val) { if (val.empty()) { return true; }
diff --git a/rtc_base/byte_buffer.h b/rtc_base/byte_buffer.h index cc7d648..64648d0 100644 --- a/rtc_base/byte_buffer.h +++ b/rtc_base/byte_buffer.h
@@ -14,11 +14,11 @@ #include <stddef.h> #include <stdint.h> +#include <span> #include <string> #include "absl/base/attributes.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/buffer.h" #include "rtc_base/byte_order.h" @@ -41,8 +41,8 @@ const value_type* Data() const { return buffer_.data(); } size_t Length() const { return buffer_.size(); } size_t Capacity() const { return buffer_.capacity(); } - ArrayView<const value_type> DataView() const { - return MakeArrayView(Data(), Length()); + std::span<const value_type> DataView() const { + return std::span(Data(), Length()); } // Accessor that returns a string_view, independent of underlying type. // Intended to provide access for existing users that expect char* @@ -97,12 +97,12 @@ val.size()); } // Write an array of bytes (uint8_t) - [[deprecated("issues.webrtc.org/4225170 - use Write(ArrayView)")]] + [[deprecated("issues.webrtc.org/4225170 - use Write(std::span)")]] void WriteBytes(const uint8_t* val, size_t len) { WriteBytesInternal(reinterpret_cast<const value_type*>(val), len); } - void Write(ArrayView<const value_type> data) { + void Write(std::span<const value_type> data) { WriteBytesInternal(data.data(), data.size()); } @@ -157,7 +157,7 @@ class ByteBufferReader { public: explicit ByteBufferReader( - ArrayView<const uint8_t> bytes ABSL_ATTRIBUTE_LIFETIME_BOUND); + std::span<const uint8_t> bytes ABSL_ATTRIBUTE_LIFETIME_BOUND); explicit ByteBufferReader(const ByteBufferWriter& buf); @@ -168,8 +168,8 @@ // Returns number of unprocessed bytes. size_t Length() const { return end_ - start_; } // Returns a view of the unprocessed data. Does not move current position. - ArrayView<const uint8_t> DataView() const { - return ArrayView<const uint8_t>(bytes_ + start_, end_ - start_); + std::span<const uint8_t> DataView() const { + return std::span<const uint8_t>(bytes_ + start_, end_ - start_); } // Read a next value from the buffer. Return false if there isn't @@ -181,7 +181,7 @@ bool ReadUInt64(uint64_t* val); bool ReadUVarint(uint64_t* val); // Copies the val.size() next bytes into val.data(). - bool ReadBytes(ArrayView<uint8_t> val); + bool ReadBytes(std::span<uint8_t> val); // Appends next `len` bytes from the buffer to `val`. Returns false // if there is less than `len` bytes left. bool ReadString(std::string* val, size_t len);
diff --git a/rtc_base/byte_buffer_unittest.cc b/rtc_base/byte_buffer_unittest.cc index 267f107..cdc34be 100644 --- a/rtc_base/byte_buffer_unittest.cc +++ b/rtc_base/byte_buffer_unittest.cc
@@ -12,11 +12,11 @@ #include <cstdint> #include <cstring> +#include <span> #include <string> #include <utility> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/buffer.h" #include "rtc_base/byte_order.h" #include "test/gmock.h" @@ -56,11 +56,11 @@ EXPECT_EQ(n64, HostToNetwork64(n64)); // GetBE converts big endian to little endian here. - EXPECT_EQ(n16 >> 8, GetBE16(ArrayView<const uint8_t>( + EXPECT_EQ(n16 >> 8, GetBE16(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n16), 2))); - EXPECT_EQ(n32 >> 24, GetBE32(ArrayView<const uint8_t>( + EXPECT_EQ(n32 >> 24, GetBE32(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n32), 4))); - EXPECT_EQ(n64 >> 56, GetBE64(ArrayView<const uint8_t>( + EXPECT_EQ(n64 >> 56, GetBE64(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n64), 8))); } else { // The host is little endian. @@ -69,22 +69,22 @@ EXPECT_NE(n64, HostToNetwork64(n64)); // GetBE converts little endian to big endian here. - EXPECT_EQ(GetBE16(ArrayView<const uint8_t>( + EXPECT_EQ(GetBE16(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n16), 2)), HostToNetwork16(n16)); - EXPECT_EQ(GetBE32(ArrayView<const uint8_t>( + EXPECT_EQ(GetBE32(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n32), 4)), HostToNetwork32(n32)); - EXPECT_EQ(GetBE64(ArrayView<const uint8_t>( + EXPECT_EQ(GetBE64(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n64), 8)), HostToNetwork64(n64)); // GetBE converts little endian to big endian here. - EXPECT_EQ(n16 << 8, GetBE16(ArrayView<const uint8_t>( + EXPECT_EQ(n16 << 8, GetBE16(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n16), 2))); - EXPECT_EQ(n32 << 24, GetBE32(ArrayView<const uint8_t>( + EXPECT_EQ(n32 << 24, GetBE32(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n32), 4))); - EXPECT_EQ(n64 << 56, GetBE64(ArrayView<const uint8_t>( + EXPECT_EQ(n64 << 56, GetBE64(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>(&n64), 8))); } } @@ -117,7 +117,7 @@ TEST(ByteBufferTest, TestReadWriteBuffer) { ByteBufferWriter buffer; - ByteBufferReader read_buf(ArrayView<const uint8_t>{}); + ByteBufferReader read_buf(std::span<const uint8_t>{}); uint8_t ru8; EXPECT_FALSE(read_buf.ReadUInt8(&ru8)); @@ -183,7 +183,7 @@ // Write and read bytes uint8_t write_bytes[] = {3, 2, 1}; - buffer.Write(ArrayView<const uint8_t>(write_bytes, 3)); + buffer.Write(std::span<const uint8_t>(write_bytes, 3)); ByteBufferReader read_buf7(buffer); uint8_t read_bytes[3]; EXPECT_TRUE(read_buf7.ReadBytes(read_bytes)); @@ -260,10 +260,10 @@ EXPECT_EQ(read_buf11.Length(), 0U); } -TEST(ByteBufferTest, TestWriteArrayView) { +TEST(ByteBufferTest, TestWriteSpan) { const uint8_t write_data[3] = {3, 2, 1}; - // Write and read arrayview - ArrayView<const uint8_t> write_view(write_data); + // Write and read std::span + std::span<const uint8_t> write_view(write_data); ByteBufferWriter buffer; buffer.Write(write_view); ByteBufferReader read_buf12(buffer); @@ -288,7 +288,7 @@ for (const auto& test : tests) buffer += test; - ArrayView<const uint8_t> bytes(reinterpret_cast<const uint8_t*>(&buffer[0]), + std::span<const uint8_t> bytes(reinterpret_cast<const uint8_t*>(&buffer[0]), buffer.size()); ByteBufferReader read_buf(bytes); @@ -359,9 +359,9 @@ EXPECT_EQ(size, read_buffer.Length()); } -TEST(ByteBufferTest, ReadFromArrayView) { +TEST(ByteBufferTest, ReadFromSpan) { const uint8_t buf[] = {'a', 'b', 'c'}; - ArrayView<const uint8_t> view(buf, 3); + std::span<const uint8_t> view(buf, 3); ByteBufferReader read_buffer(view); uint8_t val; @@ -374,18 +374,18 @@ EXPECT_FALSE(read_buffer.ReadUInt8(&val)); } -TEST(ByteBufferTest, ReadToArrayView) { +TEST(ByteBufferTest, ReadToSpan) { const uint8_t buf[] = {'a', 'b', 'c'}; - ArrayView<const uint8_t> stored_view(buf, 3); + std::span<const uint8_t> stored_view(buf, 3); ByteBufferReader read_buffer(stored_view); uint8_t result[] = {'1', '2', '3'}; - EXPECT_TRUE(read_buffer.ReadBytes(MakeArrayView(result, 2))); + EXPECT_TRUE(read_buffer.ReadBytes(std::span(result, 2))); EXPECT_EQ(result[0], 'a'); EXPECT_EQ(result[1], 'b'); EXPECT_EQ(result[2], '3'); - EXPECT_TRUE(read_buffer.ReadBytes(MakeArrayView(&result[2], 1))); + EXPECT_TRUE(read_buffer.ReadBytes(std::span(&result[2], 1))); EXPECT_EQ(result[2], 'c'); - EXPECT_FALSE(read_buffer.ReadBytes(MakeArrayView(result, 1))); + EXPECT_FALSE(read_buffer.ReadBytes(std::span(result, 1))); } } // namespace webrtc
diff --git a/rtc_base/byte_order.h b/rtc_base/byte_order.h index 8a31c63..bf44c45 100644 --- a/rtc_base/byte_order.h +++ b/rtc_base/byte_order.h
@@ -14,8 +14,8 @@ #include <cstdint> #include <cstdlib> #include <cstring> +#include <span> -#include "api/array_view.h" #include "rtc_base/checks.h" #include "rtc_base/system/arch.h" // IWYU pragma: keep @@ -94,86 +94,86 @@ // Reading and writing of little and big-endian numbers from memory -inline void Set8(ArrayView<uint8_t> data, size_t offset, uint8_t v) { +inline void Set8(std::span<uint8_t> data, size_t offset, uint8_t v) { data[offset] = v; } -inline uint8_t Get8(ArrayView<const uint8_t> data, size_t offset) { +inline uint8_t Get8(std::span<const uint8_t> data, size_t offset) { return data[offset]; } -inline void SetBE16(ArrayView<uint8_t> data, uint16_t v) { +inline void SetBE16(std::span<uint8_t> data, uint16_t v) { RTC_DCHECK_GE(data.size(), sizeof(v)); uint16_t val = htobe16(v); memcpy(data.data(), &val, sizeof(val)); } -inline void SetBE32(ArrayView<uint8_t> data, uint32_t v) { +inline void SetBE32(std::span<uint8_t> data, uint32_t v) { RTC_DCHECK_GE(data.size(), sizeof(v)); uint32_t val = htobe32(v); memcpy(data.data(), &val, sizeof(val)); } -inline void SetBE64(ArrayView<uint8_t> data, uint64_t v) { +inline void SetBE64(std::span<uint8_t> data, uint64_t v) { RTC_DCHECK_GE(data.size(), sizeof(v)); uint64_t val = htobe64(v); memcpy(data.data(), &val, sizeof(val)); } -inline uint16_t GetBE16(ArrayView<const uint8_t> data) { +inline uint16_t GetBE16(std::span<const uint8_t> data) { uint16_t val; RTC_DCHECK_GE(data.size(), sizeof(val)); memcpy(&val, data.data(), sizeof(val)); return be16toh(val); } -inline uint32_t GetBE32(ArrayView<const uint8_t> data) { +inline uint32_t GetBE32(std::span<const uint8_t> data) { uint32_t val; RTC_DCHECK_GE(data.size(), sizeof(val)); memcpy(&val, data.data(), sizeof(val)); return be32toh(val); } -inline uint64_t GetBE64(ArrayView<const uint8_t> data) { +inline uint64_t GetBE64(std::span<const uint8_t> data) { uint64_t val; RTC_DCHECK_GE(data.size(), sizeof(val)); memcpy(&val, data.data(), sizeof(val)); return be64toh(val); } -inline void SetLE16(ArrayView<uint8_t> data, uint16_t v) { +inline void SetLE16(std::span<uint8_t> data, uint16_t v) { RTC_DCHECK_GE(data.size(), sizeof(v)); uint16_t val = htole16(v); memcpy(data.data(), &val, sizeof(val)); } -inline void SetLE32(ArrayView<uint8_t> data, uint32_t v) { +inline void SetLE32(std::span<uint8_t> data, uint32_t v) { RTC_DCHECK_GE(data.size(), sizeof(v)); uint32_t val = htole32(v); memcpy(data.data(), &val, sizeof(val)); } -inline void SetLE64(ArrayView<uint8_t> data, uint64_t v) { +inline void SetLE64(std::span<uint8_t> data, uint64_t v) { RTC_DCHECK_GE(data.size(), sizeof(v)); uint64_t val = htole64(v); memcpy(data.data(), &val, sizeof(val)); } -inline uint16_t GetLE16(ArrayView<const uint8_t> data) { +inline uint16_t GetLE16(std::span<const uint8_t> data) { uint16_t val; RTC_DCHECK_GE(data.size(), sizeof(val)); memcpy(&val, data.data(), sizeof(val)); return le16toh(val); } -inline uint32_t GetLE32(ArrayView<const uint8_t> data) { +inline uint32_t GetLE32(std::span<const uint8_t> data) { uint32_t val; RTC_DCHECK_GE(data.size(), sizeof(val)); memcpy(&val, data.data(), sizeof(val)); return le32toh(val); } -inline uint64_t GetLE64(ArrayView<const uint8_t> data) { +inline uint64_t GetLE64(std::span<const uint8_t> data) { uint64_t val; RTC_DCHECK_GE(data.size(), sizeof(val)); memcpy(&val, data.data(), sizeof(val));
diff --git a/rtc_base/byte_order_unittest.cc b/rtc_base/byte_order_unittest.cc index 75a370c..893c0e7 100644 --- a/rtc_base/byte_order_unittest.cc +++ b/rtc_base/byte_order_unittest.cc
@@ -13,8 +13,8 @@ #include <stdint.h> #include <cstdint> +#include <span> -#include "api/array_view.h" #include "test/gtest.h" namespace webrtc { @@ -22,7 +22,7 @@ // Test memory set functions put values into memory in expected order. TEST(ByteOrderTest, TestSet) { uint8_t buf[8] = {0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u}; - ArrayView<uint8_t> av(buf); + std::span<uint8_t> av(buf); Set8(av, 0, 0xfb); Set8(av, 1, 0x12); EXPECT_EQ(0xfb, buf[0]); @@ -66,7 +66,7 @@ // Test memory get functions get values from memory in expected order. TEST(ByteOrderTest, TestGet) { uint8_t buf[8]; - ArrayView<const uint8_t> av(buf); + std::span<const uint8_t> av(buf); buf[0] = 0x01u; buf[1] = 0x23u; buf[2] = 0x45u;
diff --git a/rtc_base/copy_on_write_buffer.cc b/rtc_base/copy_on_write_buffer.cc index be1fc30..68e98ce 100644 --- a/rtc_base/copy_on_write_buffer.cc +++ b/rtc_base/copy_on_write_buffer.cc
@@ -15,11 +15,11 @@ #include <cstdint> #include <cstring> #include <memory> +#include <span> #include <utility> #include "absl/algorithm/container.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/make_ref_counted.h" #include "api/scoped_refptr.h" #include "rtc_base/checks.h" @@ -110,7 +110,7 @@ RTC_DCHECK(IsConsistent()); } -void CopyOnWriteBuffer::Set(ArrayView<const uint8_t> data) { +void CopyOnWriteBuffer::Set(std::span<const uint8_t> data) { RTC_DCHECK(IsConsistent()); if (data.empty()) { offset_ = 0; @@ -129,7 +129,7 @@ RTC_DCHECK(IsConsistent()); } -void CopyOnWriteBuffer::Append(ArrayView<const uint8_t> data) { +void CopyOnWriteBuffer::Append(std::span<const uint8_t> data) { RTC_DCHECK(IsConsistent()); if (data.empty()) { return;
diff --git a/rtc_base/copy_on_write_buffer.h b/rtc_base/copy_on_write_buffer.h index 14554ed..cda92f1 100644 --- a/rtc_base/copy_on_write_buffer.h +++ b/rtc_base/copy_on_write_buffer.h
@@ -14,11 +14,11 @@ #include <cstddef> #include <cstdint> #include <memory> +#include <span> #include <type_traits> #include <utility> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/scoped_refptr.h" #include "rtc_base/buffer.h" #include "rtc_base/checks.h" @@ -30,7 +30,7 @@ class RTC_EXPORT CopyOnWriteBuffer { public: - using const_iterator = ArrayView<const uint8_t>::iterator; + using const_iterator = std::span<const uint8_t>::iterator; // An empty buffer. CopyOnWriteBuffer(); @@ -163,7 +163,7 @@ typename std::enable_if< internal::BufferCompat<uint8_t, T>::value>::type* = nullptr> void SetData(const T* data, size_t size) { - Set(MakeArrayView(reinterpret_cast<const uint8_t*>(data), size)); + Set(std::span(reinterpret_cast<const uint8_t*>(data), size)); } template <typename T, @@ -181,7 +181,7 @@ typename std::enable_if< internal::BufferCompat<uint8_t, T>::value>::type* = nullptr> void AppendData(const T* data, size_t size) { - Append(MakeArrayView(reinterpret_cast<const uint8_t*>(data), size)); + Append(std::span(reinterpret_cast<const uint8_t*>(data), size)); } template <typename T, @@ -238,7 +238,7 @@ public: explicit RawBuffer(size_t size); - ArrayView<uint8_t> data() { return MakeArrayView(data_.get(), size_); } + std::span<uint8_t> data() { return std::span(data_.get(), size_); } size_t capacity() const { return size_; } private: @@ -249,7 +249,7 @@ static scoped_refptr<RefCountedBuffer> CreateBuffer(size_t capacity); - ArrayView<const uint8_t> AsConstSpan() const { + std::span<const uint8_t> AsConstSpan() const { RTC_DCHECK(IsConsistent()); if (buffer_ == nullptr) { return {}; @@ -257,8 +257,8 @@ return buffer_->data().subspan(offset_, size_); } - void Set(ArrayView<const uint8_t> buffer); - void Append(ArrayView<const uint8_t> buffer); + void Set(std::span<const uint8_t> buffer); + void Append(std::span<const uint8_t> buffer); // Create a copy of the underlying data if it is referenced from other Buffer // objects or there is not enough capacity.
diff --git a/rtc_base/copy_on_write_buffer_unittest.cc b/rtc_base/copy_on_write_buffer_unittest.cc index 59247e5..e42d986 100644 --- a/rtc_base/copy_on_write_buffer_unittest.cc +++ b/rtc_base/copy_on_write_buffer_unittest.cc
@@ -13,11 +13,11 @@ #include <cstddef> #include <cstdint> #include <cstring> +#include <span> #include <type_traits> #include <utility> #include <vector> -#include "api/array_view.h" #include "test/gtest.h" namespace webrtc { @@ -374,8 +374,8 @@ TEST(CopyOnWriteBufferTest, AcceptsVectorLikeTypes) { std::vector<uint8_t> a = {1, 2}; std::vector<int8_t> b = {3, 4}; - ArrayView<uint8_t> c(a); - ArrayView<const int8_t> d(b); + std::span<uint8_t> c(a); + std::span<const int8_t> d(b); CopyOnWriteBuffer a_buf(a); CopyOnWriteBuffer b_buf(b);
diff --git a/rtc_base/memory/BUILD.gn b/rtc_base/memory/BUILD.gn index 8162e3a..60da019 100644 --- a/rtc_base/memory/BUILD.gn +++ b/rtc_base/memory/BUILD.gn
@@ -36,7 +36,6 @@ "..:checks", "..:macromagic", "..:stream", - "../../api:array_view", "../../api:sequence_checker", "../../api/task_queue", "../../api/task_queue:pending_task_safety_flag", @@ -60,7 +59,6 @@ ":fifo_buffer", "..:stream", "..:threading", - "../../api:array_view", "../../test:test_support", ] }
diff --git a/rtc_base/memory/fifo_buffer.cc b/rtc_base/memory/fifo_buffer.cc index faebc92..34f0fef 100644 --- a/rtc_base/memory/fifo_buffer.cc +++ b/rtc_base/memory/fifo_buffer.cc
@@ -14,8 +14,8 @@ #include <cstddef> #include <cstdint> #include <cstring> +#include <span> -#include "api/array_view.h" #include "api/sequence_checker.h" #include "api/task_queue/task_queue_base.h" #include "rtc_base/checks.h" @@ -56,7 +56,7 @@ return state_; } -StreamResult FifoBuffer::Read(ArrayView<uint8_t> buffer, +StreamResult FifoBuffer::Read(std::span<uint8_t> buffer, size_t& bytes_read, int& error) { RTC_DCHECK_RUN_ON(&callback_sequence_); @@ -79,7 +79,7 @@ return result; } -StreamResult FifoBuffer::Write(ArrayView<const uint8_t> buffer, +StreamResult FifoBuffer::Write(std::span<const uint8_t> buffer, size_t& bytes_written, int& error) { RTC_DCHECK_RUN_ON(&callback_sequence_);
diff --git a/rtc_base/memory/fifo_buffer.h b/rtc_base/memory/fifo_buffer.h index 70fee30..0f0de40 100644 --- a/rtc_base/memory/fifo_buffer.h +++ b/rtc_base/memory/fifo_buffer.h
@@ -14,8 +14,8 @@ #include <cstddef> #include <cstdint> #include <memory> +#include <span> -#include "api/array_view.h" #include "api/sequence_checker.h" #include "api/task_queue/pending_task_safety_flag.h" #include "api/task_queue/task_queue_base.h" @@ -42,10 +42,10 @@ // StreamInterface methods StreamState GetState() const override; - StreamResult Read(ArrayView<uint8_t> buffer, + StreamResult Read(std::span<uint8_t> buffer, size_t& bytes_read, int& error) override; - StreamResult Write(ArrayView<const uint8_t> buffer, + StreamResult Write(std::span<const uint8_t> buffer, size_t& bytes_written, int& error) override; void Close() override;
diff --git a/rtc_base/memory/fifo_buffer_unittest.cc b/rtc_base/memory/fifo_buffer_unittest.cc index 22f78a4..e5f2070 100644 --- a/rtc_base/memory/fifo_buffer_unittest.cc +++ b/rtc_base/memory/fifo_buffer_unittest.cc
@@ -12,8 +12,8 @@ #include <cstdint> #include <cstring> +#include <span> -#include "api/array_view.h" #include "rtc_base/stream.h" #include "rtc_base/thread.h" #include "test/gtest.h" @@ -33,49 +33,49 @@ // Test assumptions about base state EXPECT_EQ(SS_OPEN, buf.GetState()); int error; - EXPECT_EQ(SR_BLOCK, buf.Read(MakeArrayView(out, kSize), bytes, error)); + EXPECT_EQ(SR_BLOCK, buf.Read(std::span(out, kSize), bytes, error)); EXPECT_TRUE(nullptr != buf.GetWriteBuffer(&bytes)); EXPECT_EQ(kSize, bytes); buf.ConsumeWriteBuffer(0); // Try a full write - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize), bytes, error)); EXPECT_EQ(kSize, bytes); // Try a write that should block - EXPECT_EQ(SR_BLOCK, buf.Write(MakeArrayView(in, kSize), bytes, error)); + EXPECT_EQ(SR_BLOCK, buf.Write(std::span(in, kSize), bytes, error)); // Try a full read - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize), bytes, error)); EXPECT_EQ(kSize, bytes); EXPECT_EQ(0, memcmp(in, out, kSize)); // Try a read that should block - EXPECT_EQ(SR_BLOCK, buf.Read(MakeArrayView(out, kSize), bytes, error)); + EXPECT_EQ(SR_BLOCK, buf.Read(std::span(out, kSize), bytes, error)); // Try a too-big write - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize * 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize * 2), bytes, error)); EXPECT_EQ(bytes, kSize); // Try a too-big read - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize * 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize * 2), bytes, error)); EXPECT_EQ(kSize, bytes); EXPECT_EQ(0, memcmp(in, out, kSize)); // Try some small writes and reads - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); EXPECT_EQ(0, memcmp(in, out, kSize / 2)); - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); EXPECT_EQ(0, memcmp(in, out, kSize / 2)); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); EXPECT_EQ(0, memcmp(in, out, kSize / 2)); @@ -87,23 +87,22 @@ // XXXXWWWWWWWWXXXX 4567012345670123 // RRRRXXXXXXXXRRRR ....01234567.... // ....RRRRRRRR.... ................ - EXPECT_EQ(SR_SUCCESS, - buf.Write(MakeArrayView(in, kSize * 3 / 4), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize * 3 / 4), bytes, error)); EXPECT_EQ(kSize * 3 / 4, bytes); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); EXPECT_EQ(0, memcmp(in, out, kSize / 2)); - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 4), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 4), bytes, error)); EXPECT_EQ(kSize / 4, bytes); EXPECT_EQ(0, memcmp(in + kSize / 2, out, kSize / 4)); - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); EXPECT_EQ(0, memcmp(in, out, kSize / 2)); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 2), bytes, error)); EXPECT_EQ(kSize / 2, bytes); EXPECT_EQ(0, memcmp(in, out, kSize / 2)); @@ -112,16 +111,16 @@ buf.ConsumeWriteBuffer(0); // Try using GetReadData to do a full read - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize), bytes, error)); q = buf.GetReadData(&bytes); EXPECT_TRUE(nullptr != q); EXPECT_EQ(kSize, bytes); EXPECT_EQ(0, memcmp(q, in, kSize)); buf.ConsumeReadData(kSize); - EXPECT_EQ(SR_BLOCK, buf.Read(MakeArrayView(out, kSize), bytes, error)); + EXPECT_EQ(SR_BLOCK, buf.Read(std::span(out, kSize), bytes, error)); // Try using GetReadData to do some small reads - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize), bytes, error)); q = buf.GetReadData(&bytes); EXPECT_TRUE(nullptr != q); EXPECT_EQ(kSize, bytes); @@ -132,7 +131,7 @@ EXPECT_EQ(kSize / 2, bytes); EXPECT_EQ(0, memcmp(q, in + kSize / 2, kSize / 2)); buf.ConsumeReadData(kSize / 2); - EXPECT_EQ(SR_BLOCK, buf.Read(MakeArrayView(out, kSize), bytes, error)); + EXPECT_EQ(SR_BLOCK, buf.Read(std::span(out, kSize), bytes, error)); // Try using GetReadData in a wraparound case // WWWWWWWWWWWWWWWW 0123456789ABCDEF @@ -140,10 +139,9 @@ // WWWWWWWW....XXXX 01234567....CDEF // ............RRRR 01234567........ // RRRRRRRR........ ................ - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize), bytes, error)); - EXPECT_EQ(SR_SUCCESS, - buf.Read(MakeArrayView(out, kSize * 3 / 4), bytes, error)); - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize * 3 / 4), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize / 2), bytes, error)); q = buf.GetReadData(&bytes); EXPECT_TRUE(nullptr != q); EXPECT_EQ(kSize / 4, bytes); @@ -165,7 +163,7 @@ EXPECT_EQ(kSize, bytes); memcpy(p, in, kSize); buf.ConsumeWriteBuffer(kSize); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize), bytes, error)); EXPECT_EQ(kSize, bytes); EXPECT_EQ(0, memcmp(in, out, kSize)); @@ -180,7 +178,7 @@ EXPECT_EQ(kSize / 2, bytes); memcpy(p, in + kSize / 2, kSize / 2); buf.ConsumeWriteBuffer(kSize / 2); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize), bytes, error)); EXPECT_EQ(kSize, bytes); EXPECT_EQ(0, memcmp(in, out, kSize)); @@ -190,9 +188,8 @@ // ........XXXXWWWW ........89AB0123 // WWWW....XXXXXXXX 4567....89AB0123 // RRRR....RRRRRRRR ................ - EXPECT_EQ(SR_SUCCESS, - buf.Write(MakeArrayView(in, kSize * 3 / 4), bytes, error)); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize * 3 / 4), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 2), bytes, error)); p = buf.GetWriteBuffer(&bytes); EXPECT_TRUE(nullptr != p); EXPECT_EQ(kSize / 4, bytes); @@ -203,23 +200,22 @@ EXPECT_EQ(kSize / 2, bytes); memcpy(p, in + kSize / 4, kSize / 4); buf.ConsumeWriteBuffer(kSize / 4); - EXPECT_EQ(SR_SUCCESS, - buf.Read(MakeArrayView(out, kSize * 3 / 4), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize * 3 / 4), bytes, error)); EXPECT_EQ(kSize * 3 / 4, bytes); EXPECT_EQ(0, memcmp(in + kSize / 2, out, kSize / 4)); EXPECT_EQ(0, memcmp(in, out + kSize / 4, kSize / 4)); // Check that the stream is now empty - EXPECT_EQ(SR_BLOCK, buf.Read(MakeArrayView(out, kSize), bytes, error)); + EXPECT_EQ(SR_BLOCK, buf.Read(std::span(out, kSize), bytes, error)); // Write to the stream, close it, read the remaining bytes - EXPECT_EQ(SR_SUCCESS, buf.Write(MakeArrayView(in, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Write(std::span(in, kSize / 2), bytes, error)); buf.Close(); EXPECT_EQ(SS_CLOSED, buf.GetState()); - EXPECT_EQ(SR_EOS, buf.Write(MakeArrayView(in, kSize / 2), bytes, error)); - EXPECT_EQ(SR_SUCCESS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_EOS, buf.Write(std::span(in, kSize / 2), bytes, error)); + EXPECT_EQ(SR_SUCCESS, buf.Read(std::span(out, kSize / 2), bytes, error)); EXPECT_EQ(0, memcmp(in, out, kSize / 2)); - EXPECT_EQ(SR_EOS, buf.Read(MakeArrayView(out, kSize / 2), bytes, error)); + EXPECT_EQ(SR_EOS, buf.Read(std::span(out, kSize / 2), bytes, error)); } TEST(FifoBufferTest, FullBufferCheck) {
diff --git a/rtc_base/memory_stream.cc b/rtc_base/memory_stream.cc index 9134d61..7994449 100644 --- a/rtc_base/memory_stream.cc +++ b/rtc_base/memory_stream.cc
@@ -14,8 +14,8 @@ #include <cerrno> #include <cstdint> #include <cstring> +#include <span> -#include "api/array_view.h" #include "rtc_base/checks.h" #include "rtc_base/stream.h" @@ -25,7 +25,7 @@ return SS_OPEN; } -StreamResult MemoryStream::Read(ArrayView<uint8_t> buffer, +StreamResult MemoryStream::Read(std::span<uint8_t> buffer, size_t& bytes_read, int& error) { if (seek_position_ >= data_length_) { @@ -45,7 +45,7 @@ return SR_SUCCESS; } -StreamResult MemoryStream::Write(ArrayView<const uint8_t> buffer, +StreamResult MemoryStream::Write(std::span<const uint8_t> buffer, size_t& bytes_written, int& error) { size_t available = buffer_length_ - seek_position_;
diff --git a/rtc_base/memory_stream.h b/rtc_base/memory_stream.h index 312bde6..13dd396 100644 --- a/rtc_base/memory_stream.h +++ b/rtc_base/memory_stream.h
@@ -14,8 +14,8 @@ #include <stddef.h> #include <cstdint> +#include <span> -#include "api/array_view.h" #include "rtc_base/stream.h" namespace webrtc { @@ -28,10 +28,10 @@ ~MemoryStream() override; StreamState GetState() const override; - StreamResult Read(ArrayView<uint8_t> buffer, + StreamResult Read(std::span<uint8_t> buffer, size_t& bytes_read, int& error) override; - StreamResult Write(ArrayView<const uint8_t> buffer, + StreamResult Write(std::span<const uint8_t> buffer, size_t& bytes_written, int& error) override; void Close() override;
diff --git a/rtc_base/network.cc b/rtc_base/network.cc index 676a112..fd1e3e7 100644 --- a/rtc_base/network.cc +++ b/rtc_base/network.cc
@@ -16,6 +16,7 @@ #include <cstring> #include <map> #include <memory> +#include <span> #include <string> #include <tuple> #include <utility> @@ -26,7 +27,6 @@ #include "absl/functional/any_invocable.h" #include "absl/strings/match.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/environment/environment.h" #include "api/field_trials_view.h" #include "api/sequence_checker.h" @@ -567,7 +567,7 @@ return nullptr; } -bool NetworkManagerBase::IsVpnMacAddress(ArrayView<const uint8_t> address) { +bool NetworkManagerBase::IsVpnMacAddress(std::span<const uint8_t> address) { if (address.data() == nullptr && address.empty()) { return false; } @@ -910,7 +910,7 @@ adapter_type = ADAPTER_TYPE_VPN; } if (adapter_type != ADAPTER_TYPE_VPN && - IsVpnMacAddress(ArrayView<const uint8_t>( + IsVpnMacAddress(std::span<const uint8_t>( reinterpret_cast<const uint8_t*>( adapter_addrs->PhysicalAddress), adapter_addrs->PhysicalAddressLength))) {
diff --git a/rtc_base/network.h b/rtc_base/network.h index e4a5ba6..4a6bdd0 100644 --- a/rtc_base/network.h +++ b/rtc_base/network.h
@@ -15,6 +15,7 @@ #include <map> #include <memory> +#include <span> #include <string> #include <tuple> #include <utility> @@ -23,7 +24,6 @@ #include "absl/base/nullability.h" #include "absl/functional/any_invocable.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/environment/environment.h" #include "api/field_trials_view.h" #include "api/scoped_refptr.h" @@ -470,7 +470,7 @@ // Check if MAC address in |bytes| is one of the pre-defined // MAC addresses for know VPNs. - static bool IsVpnMacAddress(ArrayView<const uint8_t> address); + static bool IsVpnMacAddress(std::span<const uint8_t> address); protected: // Updates `networks_` with the networks listed in `list`. If
diff --git a/rtc_base/network/BUILD.gn b/rtc_base/network/BUILD.gn index 3801b73..d0705cb 100644 --- a/rtc_base/network/BUILD.gn +++ b/rtc_base/network/BUILD.gn
@@ -26,7 +26,6 @@ deps = [ "..:checks", "..:socket_address", - "../../api:array_view", "../../api/transport:ecn_marking", "../../api/units:timestamp", "../system:rtc_export",
diff --git a/rtc_base/network/received_packet.cc b/rtc_base/network/received_packet.cc index 3f08e2d..1677b6b 100644 --- a/rtc_base/network/received_packet.cc +++ b/rtc_base/network/received_packet.cc
@@ -13,9 +13,9 @@ #include <cstddef> #include <cstdint> #include <optional> +#include <span> #include <utility> -#include "api/array_view.h" #include "api/transport/ecn_marking.h" #include "api/units/timestamp.h" #include "rtc_base/checks.h" @@ -23,7 +23,7 @@ namespace webrtc { -ReceivedIpPacket::ReceivedIpPacket(ArrayView<const uint8_t> payload, +ReceivedIpPacket::ReceivedIpPacket(std::span<const uint8_t> payload, const SocketAddress& source_address, std::optional<Timestamp> arrival_time, EcnMarking ecn, @@ -48,7 +48,7 @@ const SocketAddress& source_address) { RTC_DCHECK(packet_time_us == -1 || packet_time_us >= 0); return ReceivedIpPacket( - MakeArrayView(data, size), source_address, + std::span(data, size), source_address, (packet_time_us >= 0) ? std::optional<Timestamp>(Timestamp::Micros(packet_time_us)) : std::nullopt);
diff --git a/rtc_base/network/received_packet.h b/rtc_base/network/received_packet.h index 1078f80..2868047 100644 --- a/rtc_base/network/received_packet.h +++ b/rtc_base/network/received_packet.h
@@ -13,8 +13,8 @@ #include <cstddef> #include <cstdint> #include <optional> +#include <span> -#include "api/array_view.h" #include "api/transport/ecn_marking.h" #include "api/units/timestamp.h" #include "rtc_base/socket_address.h" @@ -37,7 +37,7 @@ // Caller must keep memory pointed to by payload and address valid for the // lifetime of this ReceivedPacket. - ReceivedIpPacket(ArrayView<const uint8_t> payload, + ReceivedIpPacket(std::span<const uint8_t> payload, const SocketAddress& source_address, std::optional<Timestamp> arrival_time = std::nullopt, EcnMarking ecn = EcnMarking::kNotEct, @@ -47,7 +47,7 @@ // Address/port of the packet sender. const SocketAddress& source_address() const { return source_address_; } - ArrayView<const uint8_t> payload() const { return payload_; } + std::span<const uint8_t> payload() const { return payload_; } // Timestamp when this packet was received. Not available on all socket // implementations. @@ -74,7 +74,7 @@ const SocketAddress& = SocketAddress()); private: - ArrayView<const uint8_t> payload_; + std::span<const uint8_t> payload_; std::optional<Timestamp> arrival_time_; const SocketAddress& source_address_; EcnMarking ecn_;
diff --git a/rtc_base/network_unittest.cc b/rtc_base/network_unittest.cc index f9438b0..380580f 100644 --- a/rtc_base/network_unittest.cc +++ b/rtc_base/network_unittest.cc
@@ -14,6 +14,7 @@ #include <cstdlib> #include <cstring> #include <memory> +#include <span> #include <string> #include <utility> #include <vector> @@ -22,7 +23,6 @@ #include "absl/strings/match.h" #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/environment/environment.h" #include "api/environment/environment_factory.h" #include "api/field_trials.h" @@ -1745,7 +1745,7 @@ EXPECT_TRUE(NetworkManagerBase::IsVpnMacAddress(global)); EXPECT_FALSE( - NetworkManagerBase::IsVpnMacAddress(ArrayView<const uint8_t>(cisco, 5))); + NetworkManagerBase::IsVpnMacAddress(std::span<const uint8_t>(cisco, 5))); EXPECT_FALSE(NetworkManagerBase::IsVpnMacAddress(five_bytes)); EXPECT_FALSE(NetworkManagerBase::IsVpnMacAddress(unknown)); EXPECT_FALSE(NetworkManagerBase::IsVpnMacAddress({}));
diff --git a/rtc_base/openssl_stream_adapter.cc b/rtc_base/openssl_stream_adapter.cc index 0a410f8..e3a75db 100644 --- a/rtc_base/openssl_stream_adapter.cc +++ b/rtc_base/openssl_stream_adapter.cc
@@ -21,6 +21,7 @@ #include <cstring> #include <memory> #include <optional> +#include <span> #include <string> #include <utility> #include <vector> @@ -28,7 +29,6 @@ #include "absl/functional/any_invocable.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/field_trials_view.h" #include "api/sequence_checker.h" #include "api/task_queue/pending_task_safety_flag.h" @@ -248,7 +248,7 @@ size_t read; int error; StreamResult result = stream->Read( - MakeArrayView(reinterpret_cast<uint8_t*>(out), outl), read, error); + std::span(reinterpret_cast<uint8_t*>(out), outl), read, error); if (result == SR_SUCCESS) { return checked_cast<int>(read); } else if (result == SR_BLOCK) { @@ -266,7 +266,7 @@ size_t written; int error; StreamResult result = stream->Write( - MakeArrayView(reinterpret_cast<const uint8_t*>(in), inl), written, error); + std::span(reinterpret_cast<const uint8_t*>(in), inl), written, error); if (result == SR_SUCCESS) { return checked_cast<int>(written); } else if (result == SR_BLOCK) { @@ -366,7 +366,7 @@ SSLPeerCertificateDigestError OpenSSLStreamAdapter::SetPeerCertificateDigest( absl::string_view digest_alg, - ArrayView<const uint8_t> digest_val) { + std::span<const uint8_t> digest_val) { RTC_DCHECK(!peer_certificate_verified_); RTC_DCHECK(!HasPeerCertificateDigest()); size_t expected_len; @@ -521,7 +521,7 @@ // use_context optional, can be null, 0 (IN). Not used by WebRTC. bool success = false; key_buffer.AppendData( - key_material_size, [&](ArrayView<uint8_t> keying_material) -> size_t { + key_material_size, [&](std::span<uint8_t> keying_material) -> size_t { int result = SSL_export_keying_material( ssl_, keying_material.data(), keying_material.size(), kDtlsSrtpExporterLabel.data(), kDtlsSrtpExporterLabel.size(), @@ -664,7 +664,7 @@ // // StreamInterface Implementation // -StreamResult OpenSSLStreamAdapter::Write(ArrayView<const uint8_t> data, +StreamResult OpenSSLStreamAdapter::Write(std::span<const uint8_t> data, size_t& written, int& error) { RTC_DLOG(LS_VERBOSE) << "OpenSSLStreamAdapter::Write(" << data.size() << ")"; @@ -722,7 +722,7 @@ // not reached } -StreamResult OpenSSLStreamAdapter::Read(ArrayView<uint8_t> data, +StreamResult OpenSSLStreamAdapter::Read(std::span<uint8_t> data, size_t& read, int& error) { RTC_DLOG(LS_VERBOSE) << "OpenSSLStreamAdapter::Read(" << data.size() << ")";
diff --git a/rtc_base/openssl_stream_adapter.h b/rtc_base/openssl_stream_adapter.h index 5307eff..b8e531d 100644 --- a/rtc_base/openssl_stream_adapter.h +++ b/rtc_base/openssl_stream_adapter.h
@@ -17,12 +17,12 @@ #include <memory> #include <optional> +#include <span> #include <string> #include <vector> #include "absl/functional/any_invocable.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/buffer.h" #include "rtc_base/ssl_certificate.h" #ifdef OPENSSL_IS_BORINGSSL @@ -82,7 +82,7 @@ void SetServerRole(SSLRole role = SSL_SERVER) override; SSLPeerCertificateDigestError SetPeerCertificateDigest( absl::string_view digest_alg, - ArrayView<const uint8_t> digest_val) override; + std::span<const uint8_t> digest_val) override; std::unique_ptr<SSLCertChain> GetPeerSSLCertChain() const override; @@ -95,8 +95,8 @@ void UpdateRetransmissionTimeout(int timeout_ms) override; void SetMTU(int mtu) override; - StreamResult Read(ArrayView<uint8_t> data, size_t& read, int& error) override; - StreamResult Write(ArrayView<const uint8_t> data, + StreamResult Read(std::span<uint8_t> data, size_t& read, int& error) override; + StreamResult Write(std::span<const uint8_t> data, size_t& written, int& error) override; void Close() override;
diff --git a/rtc_base/physical_socket_server.cc b/rtc_base/physical_socket_server.cc index 66f6493..fb916fb 100644 --- a/rtc_base/physical_socket_server.cc +++ b/rtc_base/physical_socket_server.cc
@@ -17,9 +17,9 @@ #include <cstdint> #include <cstring> #include <memory> +#include <span> #include <utility> -#include "api/array_view.h" #include "api/async_dns_resolver.h" #include "api/transport/ecn_marking.h" #include "api/units/time_delta.h" @@ -493,7 +493,7 @@ static constexpr int BUF_SIZE = 64 * 1024; buffer.payload.EnsureCapacity(BUF_SIZE); int received; - buffer.payload.SetData(BUF_SIZE, [&](ArrayView<uint8_t> payload) { + buffer.payload.SetData(BUF_SIZE, [&](std::span<uint8_t> payload) { received = DoReadFromSocket(payload.data(), payload.size(), &buffer.source_address, ×tamp, ecn_ ? &buffer.ecn : nullptr);
diff --git a/rtc_base/server_socket_adapters.cc b/rtc_base/server_socket_adapters.cc index 339afb7..85047e6 100644 --- a/rtc_base/server_socket_adapters.cc +++ b/rtc_base/server_socket_adapters.cc
@@ -13,8 +13,8 @@ #include <cstddef> #include <cstdint> #include <cstring> +#include <span> -#include "api/array_view.h" #include "rtc_base/checks.h" #include "rtc_base/socket.h" #include "rtc_base/socket_adapters.h" @@ -34,7 +34,7 @@ void AsyncSSLServerSocket::ProcessInput(char* data, size_t* len) { // We only accept client hello messages. - const ArrayView<const uint8_t> client_hello = + const std::span<const uint8_t> client_hello = AsyncSSLSocket::SslClientHello(); if (*len < client_hello.size()) { return; @@ -51,7 +51,7 @@ // Clients should not send more data until the handshake is completed. RTC_DCHECK(*len == 0); - const ArrayView<const uint8_t> server_hello = + const std::span<const uint8_t> server_hello = AsyncSSLSocket::SslServerHello(); // Send a server hello back to the client. DirectSend(server_hello.data(), server_hello.size());
diff --git a/rtc_base/socket.cc b/rtc_base/socket.cc index dee6caa..744311c 100644 --- a/rtc_base/socket.cc +++ b/rtc_base/socket.cc
@@ -12,8 +12,8 @@ #include <algorithm> #include <cstdint> +#include <span> -#include "api/array_view.h" #include "api/units/timestamp.h" #include "rtc_base/buffer.h" @@ -24,7 +24,7 @@ int64_t timestamp = -1; int len; buffer.payload.EnsureCapacity(BUF_SIZE); - buffer.payload.SetData(BUF_SIZE, [&](ArrayView<uint8_t> payload) { + buffer.payload.SetData(BUF_SIZE, [&](std::span<uint8_t> payload) { len = RecvFrom(payload.data(), payload.size(), &buffer.source_address, ×tamp); return std::max(len, 0);
diff --git a/rtc_base/socket_adapters.cc b/rtc_base/socket_adapters.cc index 60d52b2..56b20bd 100644 --- a/rtc_base/socket_adapters.cc +++ b/rtc_base/socket_adapters.cc
@@ -15,8 +15,8 @@ #include <cstddef> #include <cstdint> #include <cstring> +#include <span> -#include "api/array_view.h" #include "rtc_base/async_socket.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" @@ -135,8 +135,8 @@ }; // static -ArrayView<const uint8_t> AsyncSSLSocket::SslClientHello() { - // Implicit conversion directly from kSslClientHello to ArrayView fails when +std::span<const uint8_t> AsyncSSLSocket::SslClientHello() { + // Implicit conversion directly from kSslClientHello to std::span fails when // built with gcc. return {kSslClientHello, sizeof(kSslClientHello)}; } @@ -163,7 +163,7 @@ }; // static -ArrayView<const uint8_t> AsyncSSLSocket::SslServerHello() { +std::span<const uint8_t> AsyncSSLSocket::SslServerHello() { return {kSslServerHello, sizeof(kSslServerHello)}; }
diff --git a/rtc_base/socket_adapters.h b/rtc_base/socket_adapters.h index 3abd888..e0954a9 100644 --- a/rtc_base/socket_adapters.h +++ b/rtc_base/socket_adapters.h
@@ -13,8 +13,8 @@ #include <cstddef> #include <cstdint> +#include <span> -#include "api/array_view.h" #include "rtc_base/async_socket.h" #include "rtc_base/socket.h" #include "rtc_base/socket_address.h" @@ -59,8 +59,8 @@ // fake SSL handshake. Used for "ssltcp" P2P functionality. class AsyncSSLSocket : public BufferedReadAdapter { public: - static ArrayView<const uint8_t> SslClientHello(); - static ArrayView<const uint8_t> SslServerHello(); + static std::span<const uint8_t> SslClientHello(); + static std::span<const uint8_t> SslServerHello(); explicit AsyncSSLSocket(Socket* socket);
diff --git a/rtc_base/ssl_certificate.cc b/rtc_base/ssl_certificate.cc index 403638c..e144d39 100644 --- a/rtc_base/ssl_certificate.cc +++ b/rtc_base/ssl_certificate.cc
@@ -13,13 +13,13 @@ #include <cstddef> #include <cstdint> #include <memory> +#include <span> #include <string> #include <utility> #include <vector> #include "absl/algorithm/container.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/base64.h" #include "rtc_base/buffer.h" #include "rtc_base/openssl.h" @@ -83,7 +83,7 @@ Buffer der_buffer; ToDER(&der_buffer); - ArrayView<const uint8_t> der_view(der_buffer); + std::span<const uint8_t> der_view(der_buffer); std::string der_base64 = Base64Encode(der_view); return std::make_unique<SSLCertificateStats>(std::move(fingerprint),
diff --git a/rtc_base/ssl_fingerprint.cc b/rtc_base/ssl_fingerprint.cc index 5225363..6911d8b 100644 --- a/rtc_base/ssl_fingerprint.cc +++ b/rtc_base/ssl_fingerprint.cc
@@ -14,11 +14,11 @@ #include <cstddef> #include <cstdint> #include <memory> +#include <span> #include <string> #include "absl/algorithm/container.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/buffer.h" #include "rtc_base/logging.h" #include "rtc_base/message_digest.h" @@ -68,13 +68,13 @@ char value[MessageDigest::kMaxSize]; size_t value_len = - hex_decode_with_delimiter(ArrayView<char>(value), fingerprint, ':'); + hex_decode_with_delimiter(std::span<char>(value), fingerprint, ':'); if (!value_len) return nullptr; return std::make_unique<SSLFingerprint>( algorithm, - ArrayView<const uint8_t>(reinterpret_cast<uint8_t*>(value), value_len)); + std::span<const uint8_t>(reinterpret_cast<uint8_t*>(value), value_len)); } std::unique_ptr<SSLFingerprint> SSLFingerprint::CreateFromCertificate( @@ -96,13 +96,13 @@ } SSLFingerprint::SSLFingerprint(absl::string_view algorithm, - ArrayView<const uint8_t> digest_view) + std::span<const uint8_t> digest_view) : algorithm(algorithm), digest(digest_view.data(), digest_view.size()) {} SSLFingerprint::SSLFingerprint(absl::string_view algorithm, const uint8_t* digest_in, size_t digest_len) - : SSLFingerprint(algorithm, MakeArrayView(digest_in, digest_len)) {} + : SSLFingerprint(algorithm, std::span(digest_in, digest_len)) {} bool SSLFingerprint::operator==(const SSLFingerprint& other) const { return algorithm == other.algorithm && digest == other.digest;
diff --git a/rtc_base/ssl_fingerprint.h b/rtc_base/ssl_fingerprint.h index 89757f4..103e4a2 100644 --- a/rtc_base/ssl_fingerprint.h +++ b/rtc_base/ssl_fingerprint.h
@@ -15,10 +15,10 @@ #include <stdint.h> #include <memory> +#include <span> #include <string> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/copy_on_write_buffer.h" #include "rtc_base/rtc_certificate.h" #include "rtc_base/ssl_certificate.h" @@ -53,7 +53,7 @@ const RTCCertificate& cert); SSLFingerprint(absl::string_view algorithm, - ArrayView<const uint8_t> digest_view); + std::span<const uint8_t> digest_view); // TODO(steveanton): Remove once downstream projects have moved off of this. SSLFingerprint(absl::string_view algorithm, const uint8_t* digest_in,
diff --git a/rtc_base/ssl_identity.cc b/rtc_base/ssl_identity.cc index 2186d3a..f68797a 100644 --- a/rtc_base/ssl_identity.cc +++ b/rtc_base/ssl_identity.cc
@@ -18,11 +18,11 @@ #include <ctime> #include <memory> #include <optional> +#include <span> #include <string> #include <utility> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" #ifdef OPENSSL_IS_BORINGSSL #include "rtc_base/boringssl_identity.h" @@ -206,7 +206,7 @@ StringBuilder result; result << "-----BEGIN " << pem_type << "-----\n"; - ArrayView<const uint8_t> data_view(data, length); + std::span<const uint8_t> data_view(data, length); std::string b64_encoded = Base64Encode(data_view); // Divide the Base-64 encoded data into 64-character chunks, as per 4.3.2.4 // of RFC 1421.
diff --git a/rtc_base/ssl_stream_adapter.cc b/rtc_base/ssl_stream_adapter.cc index d02318b..59216f0 100644 --- a/rtc_base/ssl_stream_adapter.cc +++ b/rtc_base/ssl_stream_adapter.cc
@@ -15,13 +15,13 @@ #include <memory> #include <optional> #include <set> +#include <span> #include <string> #include <utility> #include <vector> #include "absl/functional/any_invocable.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/field_trials_view.h" #include "rtc_base/openssl_stream_adapter.h" #include "rtc_base/ssl_identity.h" @@ -181,7 +181,7 @@ SSLPeerCertificateDigestError* error) { unsigned char* nonconst_val = const_cast<unsigned char*>(digest_val); SSLPeerCertificateDigestError ret = SetPeerCertificateDigest( - digest_alg, ArrayView<uint8_t>(nonconst_val, digest_len)); + digest_alg, std::span<uint8_t>(nonconst_val, digest_len)); if (error) *error = ret; return ret == SSLPeerCertificateDigestError::NONE;
diff --git a/rtc_base/ssl_stream_adapter.h b/rtc_base/ssl_stream_adapter.h index f35076c..75e6729 100644 --- a/rtc_base/ssl_stream_adapter.h +++ b/rtc_base/ssl_stream_adapter.h
@@ -17,12 +17,12 @@ #include <memory> #include <optional> #include <set> +#include <span> #include <string> #include <vector> #include "absl/functional/any_invocable.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/field_trials_view.h" #include "rtc_base/buffer.h" #include "rtc_base/checks.h" @@ -191,9 +191,9 @@ // Returns SSLPeerCertificateDigestError::NONE if successful. virtual SSLPeerCertificateDigestError SetPeerCertificateDigest( absl::string_view digest_alg, - ArrayView<const uint8_t> digest_val) = 0; + std::span<const uint8_t> digest_val) = 0; [[deprecated( - "Use SetPeerCertificateDigest with ArrayView instead")]] virtual bool + "Use SetPeerCertificateDigest with std::span instead")]] virtual bool SetPeerCertificateDigest(absl::string_view digest_alg, const unsigned char* digest_val, size_t digest_len,
diff --git a/rtc_base/ssl_stream_adapter_unittest.cc b/rtc_base/ssl_stream_adapter_unittest.cc index 668a98c..67bfc10 100644 --- a/rtc_base/ssl_stream_adapter_unittest.cc +++ b/rtc_base/ssl_stream_adapter_unittest.cc
@@ -25,6 +25,7 @@ #include <ctime> #include <memory> #include <set> +#include <span> #include <string> #include <tuple> #include <utility> @@ -32,7 +33,6 @@ #include "absl/memory/memory.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/crypto/crypto_options.h" #include "api/field_trials.h" #include "api/sequence_checker.h" @@ -237,13 +237,13 @@ } size_t GetFlushCountForTesting() { return flush_count_; } - StreamResult Read(ArrayView<uint8_t> buffer, + StreamResult Read(std::span<uint8_t> buffer, size_t& read, int& error) override { return stream_->Read(buffer, read, error); } - StreamResult Write(ArrayView<const uint8_t> data, + StreamResult Write(std::span<const uint8_t> data, size_t& written, int& error) override { return stream_->Write(data, written, error); @@ -277,7 +277,7 @@ StreamState GetState() const override { return SS_OPEN; } - StreamResult Read(ArrayView<uint8_t> buffer, + StreamResult Read(std::span<uint8_t> buffer, size_t& read, int& error) override { StreamResult r; @@ -318,13 +318,13 @@ } // Write to the outgoing FifoBuffer - StreamResult WriteData(ArrayView<const uint8_t> data, + StreamResult WriteData(std::span<const uint8_t> data, size_t& written, int& error) { return out_->Write(data, written, error); } - StreamResult Write(ArrayView<const uint8_t> data, + StreamResult Write(std::span<const uint8_t> data, size_t& written, int& error) override; @@ -362,7 +362,7 @@ StreamState GetState() const override { return SS_OPEN; } // Reading a buffer queue stream will either succeed or block. - StreamResult Read(ArrayView<uint8_t> buffer, + StreamResult Read(std::span<uint8_t> buffer, size_t& read, int& error) override { const bool was_writable = buffer_.is_writable(); @@ -376,7 +376,7 @@ } // Writing to a buffer queue stream will either succeed or block. - StreamResult Write(ArrayView<const uint8_t> data, + StreamResult Write(std::span<const uint8_t> data, size_t& written, int& error) override { const bool was_readable = buffer_.is_readable(); @@ -762,12 +762,12 @@ RTC_LOG(LS_VERBOSE) << "Damaging packet"; memcpy(&buf[0], data, data_len); buf[data_len - 1]++; - return from->WriteData(MakeArrayView(&buf[0], data_len), written, error); + return from->WriteData(std::span(&buf[0], data_len), written, error); } return from->WriteData( - MakeArrayView(reinterpret_cast<const uint8_t*>(data), data_len), - written, error); + std::span(reinterpret_cast<const uint8_t*>(data), data_len), written, + error); } void SetDelay(int delay) { delay_ = delay; } @@ -926,7 +926,7 @@ size_t sent; int error; StreamResult rv = - client_ssl_->Write(MakeArrayView(packet, packet_size_), sent, error); + client_ssl_->Write(std::span(packet, packet_size_), sent, error); if (rv == SR_SUCCESS) { RTC_LOG(LS_VERBOSE) << "Sent: " << sent_; sent_++; @@ -1016,7 +1016,7 @@ std::set<int> received_; }; -webrtc::StreamResult SSLDummyStream::Write(ArrayView<const uint8_t> data, +webrtc::StreamResult SSLDummyStream::Write(std::span<const uint8_t> data, size_t& written, int& error) { RTC_LOG(LS_VERBOSE) << "Writing to loopback " << data.size();
diff --git a/rtc_base/stream.h b/rtc_base/stream.h index a819156..07da226 100644 --- a/rtc_base/stream.h +++ b/rtc_base/stream.h
@@ -13,10 +13,10 @@ #include <cstddef> #include <cstdint> +#include <span> #include <utility> #include "absl/functional/any_invocable.h" -#include "api/array_view.h" #include "api/sequence_checker.h" #include "rtc_base/checks.h" #include "rtc_base/system/no_unique_address.h" @@ -74,10 +74,10 @@ // SR_EOS: the end-of-stream has been reached, or the stream is in the // SS_CLOSED state. - virtual StreamResult Read(ArrayView<uint8_t> buffer, + virtual StreamResult Read(std::span<uint8_t> buffer, size_t& read, int& error) = 0; - virtual StreamResult Write(ArrayView<const uint8_t> data, + virtual StreamResult Write(std::span<const uint8_t> data, size_t& written, int& error) = 0;
diff --git a/rtc_base/string_encode.cc b/rtc_base/string_encode.cc index 6b0b1e00..717b832 100644 --- a/rtc_base/string_encode.cc +++ b/rtc_base/string_encode.cc
@@ -11,11 +11,11 @@ #include "rtc_base/string_encode.h" #include <cstdio> +#include <span> #include <string> #include <vector> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" namespace webrtc { @@ -91,7 +91,7 @@ return s; } -size_t hex_decode_with_delimiter(ArrayView<char> cbuffer, +size_t hex_decode_with_delimiter(std::span<char> cbuffer, absl::string_view source, char delimiter) { if (cbuffer.empty()) @@ -131,7 +131,7 @@ return bufpos; } -size_t hex_decode(ArrayView<char> buffer, absl::string_view source) { +size_t hex_decode(std::span<char> buffer, absl::string_view source) { return hex_decode_with_delimiter(buffer, source, 0); }
diff --git a/rtc_base/string_encode.h b/rtc_base/string_encode.h index fb2a6e0..187d837 100644 --- a/rtc_base/string_encode.h +++ b/rtc_base/string_encode.h
@@ -14,12 +14,12 @@ #include <stddef.h> #include <optional> +#include <span> #include <string> #include <type_traits> #include <vector> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" #include "rtc_base/string_to_number.h" #include "rtc_base/strings/string_format.h" // IWYU pragma: keep @@ -34,13 +34,13 @@ std::string hex_encode_with_delimiter(absl::string_view source, char delimiter); // hex_decode converts ascii hex to binary. -size_t hex_decode(ArrayView<char> buffer, absl::string_view source); +size_t hex_decode(std::span<char> buffer, absl::string_view source); // hex_decode, assuming that there is a delimiter between every byte // pair. // `delimiter` == 0 means no delimiter // If the buffer is too short or the data is invalid, we return 0. -size_t hex_decode_with_delimiter(ArrayView<char> buffer, +size_t hex_decode_with_delimiter(std::span<char> buffer, absl::string_view source, char delimiter);
diff --git a/rtc_base/string_encode_unittest.cc b/rtc_base/string_encode_unittest.cc index d26cd6b..701e52d 100644 --- a/rtc_base/string_encode_unittest.cc +++ b/rtc_base/string_encode_unittest.cc
@@ -11,11 +11,11 @@ #include "rtc_base/string_encode.h" #include <cstring> +#include <span> #include <string> #include <vector> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "test/gtest.h" namespace webrtc { @@ -39,7 +39,7 @@ TEST_F(HexEncodeTest, TestWithNoDelimiter) { std::string encoded = hex_encode(data_view_); EXPECT_EQ("80818283848586878889", encoded); - dec_res_ = hex_decode(ArrayView<char>(decoded_), encoded); + dec_res_ = hex_decode(std::span<char>(decoded_), encoded); ASSERT_EQ(sizeof(data_), dec_res_); ASSERT_EQ(0, memcmp(data_, decoded_, dec_res_)); } @@ -48,7 +48,7 @@ TEST_F(HexEncodeTest, TestWithDelimiter) { std::string encoded = hex_encode_with_delimiter(data_view_, ':'); EXPECT_EQ("80:81:82:83:84:85:86:87:88:89", encoded); - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_), encoded, ':'); + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_), encoded, ':'); ASSERT_EQ(sizeof(data_), dec_res_); ASSERT_EQ(0, memcmp(data_, decoded_, dec_res_)); } @@ -56,7 +56,7 @@ // Test that encoding with one delimiter and decoding with another fails. TEST_F(HexEncodeTest, TestWithWrongDelimiter) { std::string encoded = hex_encode_with_delimiter(data_view_, ':'); - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_), encoded, '/'); + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_), encoded, '/'); ASSERT_EQ(0U, dec_res_); } @@ -64,7 +64,7 @@ TEST_F(HexEncodeTest, TestExpectedDelimiter) { std::string encoded = hex_encode(data_view_); EXPECT_EQ(sizeof(data_) * 2, encoded.size()); - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_), encoded, ':'); + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_), encoded, ':'); ASSERT_EQ(0U, dec_res_); } @@ -72,7 +72,7 @@ TEST_F(HexEncodeTest, TestExpectedNoDelimiter) { std::string encoded = hex_encode_with_delimiter(data_view_, ':'); EXPECT_EQ(sizeof(data_) * 3 - 1, encoded.size()); - dec_res_ = hex_decode(ArrayView<char>(decoded_), encoded); + dec_res_ = hex_decode(std::span<char>(decoded_), encoded); ASSERT_EQ(0U, dec_res_); } @@ -80,7 +80,7 @@ TEST_F(HexEncodeTest, TestZeroLengthNoDelimiter) { std::string encoded = hex_encode(""); EXPECT_TRUE(encoded.empty()); - dec_res_ = hex_decode(ArrayView<char>(decoded_), encoded); + dec_res_ = hex_decode(std::span<char>(decoded_), encoded); ASSERT_EQ(0U, dec_res_); } @@ -88,47 +88,47 @@ TEST_F(HexEncodeTest, TestZeroLengthWithDelimiter) { std::string encoded = hex_encode_with_delimiter("", ':'); EXPECT_TRUE(encoded.empty()); - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_), encoded, ':'); + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_), encoded, ':'); ASSERT_EQ(0U, dec_res_); } // Test that decoding into a too-small output buffer fails. TEST_F(HexEncodeTest, TestDecodeTooShort) { dec_res_ = - hex_decode_with_delimiter(ArrayView<char>(decoded_, 4), "0123456789", 0); + hex_decode_with_delimiter(std::span<char>(decoded_, 4), "0123456789", 0); ASSERT_EQ(0U, dec_res_); ASSERT_EQ(0x7f, decoded_[4]); } // Test that decoding non-hex data fails. TEST_F(HexEncodeTest, TestDecodeBogusData) { - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_), "axyz", 0); + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_), "axyz", 0); ASSERT_EQ(0U, dec_res_); } // Test that decoding an odd number of hex characters fails. TEST_F(HexEncodeTest, TestDecodeOddHexDigits) { - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_), "012", 0); + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_), "012", 0); ASSERT_EQ(0U, dec_res_); } // Test that decoding a string with too many delimiters fails. TEST_F(HexEncodeTest, TestDecodeWithDelimiterTooManyDelimiters) { - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_, 4), + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_, 4), "01::23::45::67", ':'); ASSERT_EQ(0U, dec_res_); } // Test that decoding a string with a leading delimiter fails. TEST_F(HexEncodeTest, TestDecodeWithDelimiterLeadingDelimiter) { - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_, 4), + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_, 4), ":01:23:45:67", ':'); ASSERT_EQ(0U, dec_res_); } // Test that decoding a string with a trailing delimiter fails. TEST_F(HexEncodeTest, TestDecodeWithDelimiterTrailingDelimiter) { - dec_res_ = hex_decode_with_delimiter(ArrayView<char>(decoded_, 4), + dec_res_ = hex_decode_with_delimiter(std::span<char>(decoded_, 4), "01:23:45:67:", ':'); ASSERT_EQ(0U, dec_res_); }
diff --git a/rtc_base/strings/string_builder.cc b/rtc_base/strings/string_builder.cc index 094bbd1..f52445a 100644 --- a/rtc_base/strings/string_builder.cc +++ b/rtc_base/strings/string_builder.cc
@@ -13,15 +13,15 @@ #include <cstdarg> #include <cstdio> #include <cstring> +#include <span> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" #include "rtc_base/numerics/safe_minmax.h" namespace webrtc { -SimpleStringBuilder::SimpleStringBuilder(ArrayView<char> buffer) +SimpleStringBuilder::SimpleStringBuilder(std::span<char> buffer) : buffer_(buffer) { buffer_[0] = '\0'; RTC_DCHECK(IsConsistent());
diff --git a/rtc_base/strings/string_builder.h b/rtc_base/strings/string_builder.h index 9f6fb33..41efe9a 100644 --- a/rtc_base/strings/string_builder.h +++ b/rtc_base/strings/string_builder.h
@@ -12,13 +12,13 @@ #define RTC_BASE_STRINGS_STRING_BUILDER_H_ #include <cstdio> +#include <span> #include <string> #include <utility> #include "absl/strings/has_absl_stringify.h" #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" namespace webrtc { @@ -29,7 +29,7 @@ // read via `str()`. class SimpleStringBuilder { public: - explicit SimpleStringBuilder(ArrayView<char> buffer); + explicit SimpleStringBuilder(std::span<char> buffer); SimpleStringBuilder(const SimpleStringBuilder&) = delete; SimpleStringBuilder& operator=(const SimpleStringBuilder&) = delete; @@ -76,7 +76,7 @@ // size allows the buffer to be stack allocated, which helps performance. // Having a fixed size is furthermore useful to avoid unnecessary resizing // while building it. - const ArrayView<char> buffer_; + const std::span<char> buffer_; // Represents the number of characters written to the buffer. // This does not include the terminating '\0'.
diff --git a/rtc_base/text2pcap.cc b/rtc_base/text2pcap.cc index 74f8448..8b0e73d 100644 --- a/rtc_base/text2pcap.cc +++ b/rtc_base/text2pcap.cc
@@ -10,16 +10,16 @@ #include "rtc_base/text2pcap.h" #include <cstdint> +#include <span> #include <string> -#include "api/array_view.h" #include "rtc_base/strings/string_builder.h" #include "rtc_base/time_utils.h" namespace webrtc { std::string Text2Pcap::DumpPacket(bool outbound, - ArrayView<const uint8_t> payload, + std::span<const uint8_t> payload, int64_t timestamp_ms) { webrtc::StringBuilder s; s << "\n" << (outbound ? "O " : "I ");
diff --git a/rtc_base/text2pcap.h b/rtc_base/text2pcap.h index 1f384ec..5826e97 100644 --- a/rtc_base/text2pcap.h +++ b/rtc_base/text2pcap.h
@@ -11,10 +11,9 @@ #define RTC_BASE_TEXT2PCAP_H_ #include <cstdint> +#include <span> #include <string> -#include "api/array_view.h" - namespace webrtc { class Text2Pcap { @@ -29,7 +28,7 @@ // newline and has a grep-able suffix (e.g. ` # SCTP_PACKET` or ` # RTP_DUMP`) // for easy extraction from logs. static std::string DumpPacket(bool outbound, - ArrayView<const uint8_t> payload, + std::span<const uint8_t> payload, int64_t timestamp_ms); };
diff --git a/rtc_base/unique_id_generator.cc b/rtc_base/unique_id_generator.cc index d09f35b..a6cac6b 100644 --- a/rtc_base/unique_id_generator.cc +++ b/rtc_base/unique_id_generator.cc
@@ -13,11 +13,11 @@ #include <cstdint> #include <limits> #include <optional> +#include <span> #include <string> #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "rtc_base/checks.h" #include "rtc_base/crypto_random.h" #include "rtc_base/string_to_number.h" @@ -26,7 +26,7 @@ namespace webrtc { UniqueRandomIdGenerator::UniqueRandomIdGenerator() : known_ids_() {} -UniqueRandomIdGenerator::UniqueRandomIdGenerator(ArrayView<uint32_t> known_ids) +UniqueRandomIdGenerator::UniqueRandomIdGenerator(std::span<uint32_t> known_ids) : known_ids_(known_ids.begin(), known_ids.end()) {} UniqueRandomIdGenerator::~UniqueRandomIdGenerator() = default; @@ -49,7 +49,7 @@ } UniqueStringGenerator::UniqueStringGenerator() : unique_number_generator_() {} -UniqueStringGenerator::UniqueStringGenerator(ArrayView<std::string> known_ids) { +UniqueStringGenerator::UniqueStringGenerator(std::span<std::string> known_ids) { for (const std::string& str : known_ids) { AddKnownId(str); }
diff --git a/rtc_base/unique_id_generator.h b/rtc_base/unique_id_generator.h index 64491c4..4dd31ee 100644 --- a/rtc_base/unique_id_generator.h +++ b/rtc_base/unique_id_generator.h
@@ -14,11 +14,11 @@ #include <cstdint> #include <limits> #include <set> +#include <span> #include <string> #include <type_traits> #include "absl/strings/string_view.h" -#include "api/array_view.h" #include "api/sequence_checker.h" #include "rtc_base/checks.h" #include "rtc_base/synchronization/mutex.h" @@ -41,7 +41,7 @@ typedef TIntegral value_type; UniqueNumberGenerator(); // Creates a generator that will never return any value from the given list. - explicit UniqueNumberGenerator(ArrayView<TIntegral> known_ids); + explicit UniqueNumberGenerator(std::span<TIntegral> known_ids); ~UniqueNumberGenerator(); // Generates a number that this generator has never produced before. @@ -74,7 +74,7 @@ typedef uint32_t value_type; UniqueRandomIdGenerator(); // Create a generator that will never return any value from the given list. - explicit UniqueRandomIdGenerator(ArrayView<uint32_t> known_ids); + explicit UniqueRandomIdGenerator(std::span<uint32_t> known_ids); ~UniqueRandomIdGenerator(); // Generates a random id that this generator has never produced before. @@ -105,7 +105,7 @@ public: typedef std::string value_type; UniqueStringGenerator(); - explicit UniqueStringGenerator(ArrayView<std::string> known_ids); + explicit UniqueStringGenerator(std::span<std::string> known_ids); ~UniqueStringGenerator(); std::string GenerateString(); @@ -126,7 +126,7 @@ template <typename TIntegral> UniqueNumberGenerator<TIntegral>::UniqueNumberGenerator( - ArrayView<TIntegral> known_ids) + std::span<TIntegral> known_ids) : counter_(0), known_ids_(known_ids.begin(), known_ids.end()) {} template <typename TIntegral>
diff --git a/rtc_base/virtual_socket_unittest.cc b/rtc_base/virtual_socket_unittest.cc index 8a7c806..e3081b8 100644 --- a/rtc_base/virtual_socket_unittest.cc +++ b/rtc_base/virtual_socket_unittest.cc
@@ -17,11 +17,11 @@ #include <cstring> #include <ctime> #include <memory> +#include <span> #include <utility> #include <vector> #include "absl/memory/memory.h" -#include "api/array_view.h" #include "api/environment/environment.h" #include "api/transport/ecn_marking.h" #include "api/units/time_delta.h" @@ -186,8 +186,8 @@ } else if (post_ip.family() == AF_INET6) { in6_addr post_ip6 = post_ip.ipv6_address(); in6_addr pre_ip6 = pre_ip.ipv6_address(); - ArrayView<uint8_t, 16> post_bytes = post_ip6.s6_addr; - ArrayView<uint8_t, 16> pre_bytes = pre_ip6.s6_addr; + std::span<uint8_t, 16> post_bytes = post_ip6.s6_addr; + std::span<uint8_t, 16> pre_bytes = pre_ip6.s6_addr; EXPECT_THAT(post_bytes.subspan(12, 4), Pointwise(Eq(), pre_bytes.subspan(12, 4))); }
diff --git a/rtc_base/zero_memory.h b/rtc_base/zero_memory.h index 6229a1e..5af33ad 100644 --- a/rtc_base/zero_memory.h +++ b/rtc_base/zero_memory.h
@@ -13,10 +13,9 @@ #include <stddef.h> +#include <span> #include <type_traits> -#include "api/array_view.h" - namespace webrtc { // Fill memory with zeros in a way that the compiler doesn't optimize it away @@ -26,7 +25,7 @@ template <typename T, typename std::enable_if<!std::is_const<T>::value && std::is_trivial<T>::value>::type* = nullptr> -void ExplicitZeroMemory(ArrayView<T> a) { +void ExplicitZeroMemory(std::span<T> a) { ExplicitZeroMemory(a.data(), a.size()); }
diff --git a/rtc_base/zero_memory_unittest.cc b/rtc_base/zero_memory_unittest.cc index 5a8804c..dde2898 100644 --- a/rtc_base/zero_memory_unittest.cc +++ b/rtc_base/zero_memory_unittest.cc
@@ -12,8 +12,8 @@ #include <cstddef> #include <cstdint> +#include <span> -#include "api/array_view.h" #include "test/gtest.h" namespace webrtc { @@ -30,13 +30,13 @@ } } -TEST(ZeroMemoryTest, TestZeroArrayView) { +TEST(ZeroMemoryTest, TestZeroSpan) { static const size_t kBufferSize = 32; uint8_t buffer[kBufferSize]; for (size_t i = 0; i < kBufferSize; i++) { buffer[i] = static_cast<uint8_t>(i + 1); } - ExplicitZeroMemory(ArrayView<uint8_t>(buffer, sizeof(buffer))); + ExplicitZeroMemory(std::span<uint8_t>(buffer, sizeof(buffer))); for (size_t i = 0; i < kBufferSize; i++) { EXPECT_EQ(buffer[i], 0); }