From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../libwebrtc/rtc_base/unique_id_generator.cc | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 third_party/libwebrtc/rtc_base/unique_id_generator.cc (limited to 'third_party/libwebrtc/rtc_base/unique_id_generator.cc') diff --git a/third_party/libwebrtc/rtc_base/unique_id_generator.cc b/third_party/libwebrtc/rtc_base/unique_id_generator.cc new file mode 100644 index 0000000000..e68c643dbe --- /dev/null +++ b/third_party/libwebrtc/rtc_base/unique_id_generator.cc @@ -0,0 +1,72 @@ +/* + * Copyright 2018 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "rtc_base/unique_id_generator.h" + +#include +#include + +#include "absl/strings/string_view.h" +#include "rtc_base/helpers.h" +#include "rtc_base/string_encode.h" +#include "rtc_base/string_to_number.h" + +namespace rtc { + +UniqueRandomIdGenerator::UniqueRandomIdGenerator() : known_ids_() {} +UniqueRandomIdGenerator::UniqueRandomIdGenerator(ArrayView known_ids) + : known_ids_(known_ids.begin(), known_ids.end()) {} + +UniqueRandomIdGenerator::~UniqueRandomIdGenerator() = default; + +uint32_t UniqueRandomIdGenerator::GenerateId() { + webrtc::MutexLock lock(&mutex_); + + RTC_CHECK_LT(known_ids_.size(), std::numeric_limits::max() - 1); + while (true) { + auto pair = known_ids_.insert(CreateRandomNonZeroId()); + if (pair.second) { + return *pair.first; + } + } +} + +bool UniqueRandomIdGenerator::AddKnownId(uint32_t value) { + webrtc::MutexLock lock(&mutex_); + return known_ids_.insert(value).second; +} + +UniqueStringGenerator::UniqueStringGenerator() : unique_number_generator_() {} +UniqueStringGenerator::UniqueStringGenerator(ArrayView known_ids) { + for (const std::string& str : known_ids) { + AddKnownId(str); + } +} + +UniqueStringGenerator::~UniqueStringGenerator() = default; + +std::string UniqueStringGenerator::GenerateString() { + return ToString(unique_number_generator_.GenerateNumber()); +} + +bool UniqueStringGenerator::AddKnownId(absl::string_view value) { + // TODO(webrtc:13579): remove string copy here once absl::string_view version + // of StringToNumber is available. + absl::optional int_value = + StringToNumber(std::string(value)); + // The underlying generator works for uint32_t values, so if the provided + // value is not a uint32_t it will never be generated anyway. + if (int_value.has_value()) { + return unique_number_generator_.AddKnownId(int_value.value()); + } + return false; +} + +} // namespace rtc -- cgit v1.2.3