Upstream commit: https://webrtc.googlesource.com/src/+/d004aee4a41f3fba3b29ef33be2c4f07f2ceb1e7 Allow absl map and set containers in WebRTC Bug: None No-Try: True Change-Id: I84218daf71de115af74e0484bc26e798f125297a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/370762 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#43529}
2.9 KiB
Using Abseil in WebRTC
You may use a subset of the utilities provided by the Abseil library when writing WebRTC C++ code. Below, we list the explicitly allowed and the explicitly disallowed subsets of Abseil; if you find yourself in need of something that isn’t in either subset, please add it to the allowed subset in this doc in the same CL that adds the first use.
How to depend on Abseil
For build targets of type rtc_library, rtc_source_set and
rtc_static_library, dependencies on Abseil need to be listed in deps.
The GN templates will take care of generating the proper dependency when used within Chromium or standalone. In that build mode, WebRTC will depend on a monolithic Abseil build target that will generate a shared library.
Allowed
-
absl::AnyInvocable -
absl::bind_front -
absl::Cleanup -
Hash tables, and B-tree ordered containers
-
absl::InlinedVector -
absl::Nonnullandabsl::Nullable -
absl::WrapUnique -
absl::string_view -
The functions in
absl/strings/ascii.h,absl/strings/match.h, andabsl/strings/str_replace.h. -
The functions in
absl/strings/escaping.h. -
absl::is_trivially_copy_constructible,absl::is_trivially_copy_assignable, andabsl::is_trivially_destructiblefromabsl/meta/type_traits.h. -
absl::variantand related stuff fromabsl/types/variant.h. -
The functions in
absl/algorithm/algorithm.handabsl/algorithm/container.h. -
absl/base/const_init.hfor mutex initialization. -
The macros in
absl/base/attributes.h,absl/base/config.handabsl/base/macros.h. -
absl/numeric/bits.h -
Single argument absl::StrCat
-
ABSL_FLAG is allowed in tests and tools, but disallowed in in non-test code.
Disallowed
absl::make_unique
Use std::make_unique instead.
absl::Mutex
Use webrtc::Mutex instead.
absl::optional
Use std::optional instead.
absl::Span
Use rtc::ArrayView instead.
absl::Span differs from rtc::ArrayView on several points, and both
of them differ from the std::span introduced in C++20. We should just keep
using rtc::ArrayView and avoid absl::Span. When WebRTC switches to C++20,
we will consider replacing rtc::ArrayView with std::span.
absl::StrCat, absl::StrAppend, absl::StrJoin, absl::StrSplit
Use rtc::SimpleStringBuilder to build strings.
These are optimized for speed, not binary size. Even StrCat calls
with a modest number of arguments can easily add several hundred bytes
to the binary.
Exception: Single-argument absl::StrCat is allowed in order to make it easy to use AbslStringify. See TOTW #215 for details on AbslStringify.