From 8ee95a6c7b67b81894be0cf3bc3f697139ac472c Mon Sep 17 00:00:00 2001 From: zcy <290198252@qq.com> Date: Wed, 3 Nov 2021 10:31:23 +0800 Subject: [PATCH] no message --- .../yuvgl/components/toast.cpp | 0 .../yuvgl/components/toast.h | 0 .../yuvgl/components/toast.ui | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/conanfile.txt | 0 .../yuvgl/cplaywidget.cpp | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/cplaywidget.h | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/inc/Base64.h | 0 .../yuvgl/inc/BitmapEx.h | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/inc/qedit.h | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/inc/utils.h | 0 .../yuvgl/inc/winuuids.h | 0 client/{qt_gl_ => rtmp_demo}/yuvgl/inc/zlib.h | 0 .../yuvgl/librtmp/COPYING | 0 .../yuvgl/librtmp/Makefile | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/librtmp/amf.c | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/librtmp/amf.h | 0 .../yuvgl/librtmp/bytes.h | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/librtmp/dh.h | 0 .../yuvgl/librtmp/dhgroups.h | 0 .../yuvgl/librtmp/handshake.h | 0 .../yuvgl/librtmp/hashswf.c | 0 .../yuvgl/librtmp/http.h | 0 .../yuvgl/librtmp/librtmp.3 | 0 .../yuvgl/librtmp/librtmp.3.html | 0 .../yuvgl/librtmp/librtmp.pc.in | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/librtmp/log.c | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/librtmp/log.h | 0 .../yuvgl/librtmp/parseurl.c | 0 .../yuvgl/librtmp/rtmp.c | 0 .../yuvgl/librtmp/rtmp.h | 0 .../yuvgl/librtmp/rtmp_sys.h | 0 .../yuvgl/librtmp/strncasecmp.h | 0 .../yuvgl/librtmp/zlib.h | 0 client/{qt_gl_ => rtmp_demo}/yuvgl/main.cpp | 0 .../yuvgl/mainwindow.cpp | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/mainwindow.h | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/mainwindow.ui | 0 .../yuvgl/media/AACAudioCoder.cpp | 0 .../yuvgl/media/AACAudioCoder.h | 0 .../yuvgl/media/AACDecoder.cpp | 0 .../yuvgl/media/AACDecoder.h | 0 .../yuvgl/media/AudioCapture.cpp | 0 .../yuvgl/media/AudioCapture.h | 0 .../yuvgl/media/AudioPlayer.cpp | 0 .../yuvgl/media/AudioPlayer.h | 0 .../yuvgl/media/CameraCapture.cpp | 0 .../yuvgl/media/CameraCapture.h | 0 .../yuvgl/media/DXGICapture.cpp | 0 .../yuvgl/media/DXGICapture.h | 0 .../yuvgl/media/DXGICaptureHelper.h | 0 .../yuvgl/media/DXGICaptureTypes.h | 0 .../yuvgl/media/Debuger.h | 0 .../yuvgl/media/H264Docoder.cpp | 0 .../yuvgl/media/H264Docoder.h | 0 .../yuvgl/media/ImageUtil.cpp | 0 .../yuvgl/media/ImageUtil.h | 0 .../yuvgl/media/RtmpPuller.cpp | 0 .../yuvgl/media/RtmpPuller.h | 0 .../yuvgl/media/RtmpPuller2.cpp | 0 .../yuvgl/media/RtmpPuller2.h | 0 .../yuvgl/media/RtmpPusher.cpp | 0 .../yuvgl/media/RtmpPusher.h | 0 .../yuvgl/media/SdlPlayer.h | 0 .../yuvgl/media/VideoCoder.cpp | 0 .../yuvgl/media/VideoCoder.h | 0 .../yuvgl/media/audiocaptureff.cpp | 0 .../yuvgl/media/audiocaptureff.h | 0 .../yuvgl/media/imgutil.cpp | 0 .../yuvgl/media/librtmp_send264.h | 0 .../yuvgl/media/screen_capture.cpp | 0 .../yuvgl/media/screen_capture.h | 0 .../yuvgl/media/sps_decode.cpp | 0 .../yuvgl/media/sps_decode.h | 0 client/{qt_gl_ => rtmp_demo}/yuvgl/qedit.h | 0 client/{qt_gl_ => rtmp_demo}/yuvgl/readme.md | 0 .../yuvgl/ui_mainwindow.h | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/ui_process.h | 0 .../{qt_gl_ => rtmp_demo}/yuvgl/ui_qsstoast.h | 0 client/{qt_gl_ => rtmp_demo}/yuvgl/ui_toast.h | 0 .../yuvgl/utils/Base64.cpp | 0 .../yuvgl/utils/Debuger.cpp | 0 .../yuvgl/utils/utils.cpp | 0 client/{qt_gl_ => rtmp_demo}/yuvgl/yuvgl.pro | 0 .../yuvgl/yuvgl.pro.user | 0 client/{qt_gl_ => rtmp_demo}/yuvgl/zlib.h | 0 client/webrtc/webrtc_demo/src/cplaywidget.cpp | 434 - client/webrtc/webrtc_demo/src/cplaywidget.h | 73 - client/webrtc/webrtc_demo/src/main.cpp | 82 - client/webrtc/webrtc_demo/src/mainwindow.cpp | 23 - client/webrtc/webrtc_demo/src/mainwindow.h | 23 - client/webrtc/webrtc_demo/src/mainwindow.ui | 70 - .../webrtc/webrtc_demo/src/video_capture.cpp | 113 - client/webrtc/webrtc_demo/src/video_capture.h | 49 - .../webrtc_demo/src/video_capturer_test.cpp | 75 - .../webrtc_demo/src/video_capturer_test.h | 57 - .../third/include/absl/algorithm/algorithm.h | 159 - .../third/include/absl/algorithm/container.h | 1764 --- .../third/include/absl/base/attributes.h | 702 - .../third/include/absl/base/call_once.h | 219 - .../third/include/absl/base/casts.h | 187 - .../third/include/absl/base/config.h | 742 - .../third/include/absl/base/const_init.h | 76 - .../include/absl/base/dynamic_annotations.h | 493 - .../include/absl/base/internal/atomic_hook.h | 200 - .../base/internal/atomic_hook_test_helper.h | 34 - .../include/absl/base/internal/cycleclock.h | 94 - .../include/absl/base/internal/direct_mmap.h | 169 - .../third/include/absl/base/internal/endian.h | 327 - .../include/absl/base/internal/errno_saver.h | 43 - .../base/internal/exception_safety_testing.h | 1101 -- .../absl/base/internal/exception_testing.h | 42 - .../absl/base/internal/exponential_biased.h | 130 - .../include/absl/base/internal/fast_type_id.h | 48 - .../include/absl/base/internal/hide_ptr.h | 51 - .../include/absl/base/internal/identity.h | 37 - .../absl/base/internal/inline_variable.h | 107 - .../base/internal/inline_variable_testing.h | 46 - .../third/include/absl/base/internal/invoke.h | 187 - .../absl/base/internal/low_level_alloc.h | 126 - .../absl/base/internal/low_level_scheduling.h | 134 - .../absl/base/internal/per_thread_tls.h | 52 - .../absl/base/internal/periodic_sampler.h | 211 - .../absl/base/internal/pretty_function.h | 33 - .../include/absl/base/internal/raw_logging.h | 195 - .../absl/base/internal/scheduling_mode.h | 58 - .../absl/base/internal/scoped_set_env.h | 45 - .../include/absl/base/internal/spinlock.h | 246 - .../absl/base/internal/spinlock_akaros.inc | 35 - .../absl/base/internal/spinlock_linux.inc | 74 - .../absl/base/internal/spinlock_posix.inc | 46 - .../absl/base/internal/spinlock_wait.h | 93 - .../absl/base/internal/spinlock_win32.inc | 37 - .../include/absl/base/internal/strerror.h | 39 - .../include/absl/base/internal/sysinfo.h | 74 - .../absl/base/internal/thread_identity.h | 260 - .../absl/base/internal/throw_delegate.h | 75 - .../absl/base/internal/tsan_mutex_interface.h | 68 - .../absl/base/internal/unaligned_access.h | 82 - .../absl/base/internal/unscaledcycleclock.h | 124 - .../third/include/absl/base/log_severity.h | 121 - .../third/include/absl/base/macros.h | 158 - .../third/include/absl/base/optimization.h | 243 - .../third/include/absl/base/options.h | 238 - .../third/include/absl/base/policy_checks.h | 111 - .../third/include/absl/base/port.h | 25 - .../include/absl/base/thread_annotations.h | 333 - .../third/include/absl/cleanup/cleanup.h | 140 - .../include/absl/cleanup/internal/cleanup.h | 81 - .../third/include/absl/container/btree_map.h | 768 - .../third/include/absl/container/btree_set.h | 683 - .../third/include/absl/container/btree_test.h | 166 - .../include/absl/container/fixed_array.h | 532 - .../include/absl/container/flat_hash_map.h | 606 - .../include/absl/container/flat_hash_set.h | 504 - .../include/absl/container/inlined_vector.h | 847 - .../include/absl/container/internal/btree.h | 2620 ---- .../absl/container/internal/btree_container.h | 682 - .../include/absl/container/internal/common.h | 206 - .../container/internal/compressed_tuple.h | 290 - .../container/internal/container_memory.h | 460 - .../container/internal/counting_allocator.h | 114 - .../internal/hash_function_defaults.h | 161 - .../internal/hash_generator_testing.h | 161 - .../container/internal/hash_policy_testing.h | 184 - .../container/internal/hash_policy_traits.h | 208 - .../absl/container/internal/hashtable_debug.h | 110 - .../internal/hashtable_debug_hooks.h | 85 - .../container/internal/hashtablez_sampler.h | 322 - .../absl/container/internal/have_sse.h | 50 - .../absl/container/internal/inlined_vector.h | 967 -- .../include/absl/container/internal/layout.h | 743 - .../container/internal/node_hash_policy.h | 92 - .../absl/container/internal/raw_hash_map.h | 197 - .../absl/container/internal/raw_hash_set.h | 1900 --- .../internal/test_instance_tracker.h | 274 - .../include/absl/container/internal/tracked.h | 83 - .../internal/unordered_map_constructor_test.h | 490 - .../internal/unordered_map_lookup_test.h | 117 - .../internal/unordered_map_members_test.h | 87 - .../internal/unordered_map_modifiers_test.h | 318 - .../internal/unordered_set_constructor_test.h | 496 - .../internal/unordered_set_lookup_test.h | 91 - .../internal/unordered_set_members_test.h | 86 - .../internal/unordered_set_modifiers_test.h | 190 - .../include/absl/container/node_hash_map.h | 597 - .../include/absl/container/node_hash_set.h | 493 - .../absl/debugging/failure_signal_handler.h | 121 - .../debugging/internal/address_is_readable.h | 32 - .../absl/debugging/internal/demangle.h | 71 - .../absl/debugging/internal/elf_mem_image.h | 134 - .../absl/debugging/internal/examine_stack.h | 42 - .../debugging/internal/stack_consumption.h | 50 - .../internal/stacktrace_aarch64-inl.inc | 199 - .../debugging/internal/stacktrace_arm-inl.inc | 134 - .../debugging/internal/stacktrace_config.h | 80 - .../internal/stacktrace_generic-inl.inc | 97 - .../internal/stacktrace_powerpc-inl.inc | 253 - .../internal/stacktrace_unimplemented-inl.inc | 24 - .../internal/stacktrace_win32-inl.inc | 93 - .../debugging/internal/stacktrace_x86-inl.inc | 346 - .../absl/debugging/internal/symbolize.h | 147 - .../absl/debugging/internal/vdso_support.h | 158 - .../third/include/absl/debugging/leak_check.h | 114 - .../third/include/absl/debugging/stacktrace.h | 231 - .../third/include/absl/debugging/symbolize.h | 99 - .../absl/debugging/symbolize_darwin.inc | 101 - .../include/absl/debugging/symbolize_elf.inc | 1560 -- .../debugging/symbolize_unimplemented.inc | 40 - .../absl/debugging/symbolize_win32.inc | 81 - .../include/absl/flags/commandlineflag.h | 200 - .../third/include/absl/flags/config.h | 76 - .../third/include/absl/flags/declare.h | 65 - .../third/include/absl/flags/flag.h | 398 - .../absl/flags/internal/commandlineflag.h | 68 - .../third/include/absl/flags/internal/flag.h | 747 - .../third/include/absl/flags/internal/parse.h | 59 - .../include/absl/flags/internal/path_util.h | 62 - .../flags/internal/private_handle_accessor.h | 61 - .../absl/flags/internal/program_name.h | 50 - .../include/absl/flags/internal/registry.h | 97 - .../absl/flags/internal/sequence_lock.h | 187 - .../third/include/absl/flags/internal/usage.h | 104 - .../third/include/absl/flags/marshalling.h | 264 - .../third/include/absl/flags/parse.h | 60 - .../third/include/absl/flags/reflection.h | 90 - .../third/include/absl/flags/usage.h | 43 - .../third/include/absl/flags/usage_config.h | 135 - .../include/absl/functional/bind_front.h | 184 - .../include/absl/functional/function_ref.h | 139 - .../absl/functional/internal/front_binder.h | 95 - .../absl/functional/internal/function_ref.h | 106 - .../third/include/absl/hash/hash.h | 325 - .../third/include/absl/hash/hash_testing.h | 378 - .../third/include/absl/hash/internal/city.h | 78 - .../third/include/absl/hash/internal/hash.h | 1045 -- .../absl/hash/internal/spy_hash_state.h | 231 - .../third/include/absl/hash/internal/wyhash.h | 48 - .../third/include/absl/memory/memory.h | 699 - .../third/include/absl/meta/type_traits.h | 767 - .../third/include/absl/numeric/bits.h | 177 - .../third/include/absl/numeric/int128.h | 1092 -- .../absl/numeric/int128_have_intrinsic.inc | 302 - .../absl/numeric/int128_no_intrinsic.inc | 308 - .../include/absl/numeric/internal/bits.h | 358 - .../absl/numeric/internal/representation.h | 55 - .../absl/random/bernoulli_distribution.h | 200 - .../include/absl/random/beta_distribution.h | 427 - .../third/include/absl/random/bit_gen_ref.h | 181 - .../absl/random/discrete_distribution.h | 247 - .../third/include/absl/random/distributions.h | 452 - .../absl/random/exponential_distribution.h | 165 - .../absl/random/gaussian_distribution.h | 275 - .../include/absl/random/internal/chi_square.h | 89 - .../random/internal/distribution_caller.h | 92 - .../random/internal/distribution_test_util.h | 113 - .../absl/random/internal/explicit_seed_seq.h | 92 - .../absl/random/internal/fast_uniform_bits.h | 268 - .../include/absl/random/internal/fastmath.h | 57 - .../absl/random/internal/generate_real.h | 146 - .../random/internal/iostream_state_saver.h | 245 - .../absl/random/internal/mock_helpers.h | 134 - .../absl/random/internal/mock_overload_set.h | 100 - .../absl/random/internal/nanobenchmark.h | 172 - .../absl/random/internal/nonsecure_base.h | 150 - .../include/absl/random/internal/pcg_engine.h | 308 - .../include/absl/random/internal/platform.h | 171 - .../include/absl/random/internal/pool_urbg.h | 131 - .../include/absl/random/internal/randen.h | 102 - .../absl/random/internal/randen_detect.h | 33 - .../absl/random/internal/randen_engine.h | 232 - .../absl/random/internal/randen_hwaes.h | 50 - .../absl/random/internal/randen_slow.h | 40 - .../absl/random/internal/randen_traits.h | 88 - .../absl/random/internal/salted_seed_seq.h | 167 - .../absl/random/internal/seed_material.h | 104 - .../absl/random/internal/sequence_urbg.h | 60 - .../include/absl/random/internal/traits.h | 101 - .../absl/random/internal/uniform_helper.h | 244 - .../absl/random/internal/wide_multiply.h | 111 - .../random/log_uniform_int_distribution.h | 257 - .../include/absl/random/mock_distributions.h | 266 - .../include/absl/random/mocking_bit_gen.h | 240 - .../absl/random/poisson_distribution.h | 258 - .../third/include/absl/random/random.h | 189 - .../include/absl/random/seed_gen_exception.h | 55 - .../include/absl/random/seed_sequences.h | 110 - .../absl/random/uniform_int_distribution.h | 275 - .../absl/random/uniform_real_distribution.h | 202 - .../include/absl/random/zipf_distribution.h | 271 - .../absl/status/internal/status_internal.h | 58 - .../absl/status/internal/statusor_internal.h | 396 - .../third/include/absl/status/status.h | 871 -- .../absl/status/status_payload_printer.h | 51 - .../third/include/absl/status/statusor.h | 760 - .../third/include/absl/strings/ascii.h | 242 - .../third/include/absl/strings/charconv.h | 119 - .../third/include/absl/strings/cord.h | 1394 -- .../include/absl/strings/cord_test_helpers.h | 60 - .../third/include/absl/strings/escaping.h | 164 - .../include/absl/strings/internal/char_map.h | 156 - .../absl/strings/internal/charconv_bigint.h | 423 - .../absl/strings/internal/charconv_parse.h | 99 - .../absl/strings/internal/cord_internal.h | 543 - .../absl/strings/internal/cord_rep_flat.h | 146 - .../absl/strings/internal/cord_rep_ring.h | 589 - .../strings/internal/cord_rep_ring_reader.h | 114 - .../include/absl/strings/internal/escaping.h | 58 - .../strings/internal/escaping_test_common.h | 133 - .../include/absl/strings/internal/memutil.h | 148 - .../strings/internal/numbers_test_common.h | 184 - .../absl/strings/internal/ostringstream.h | 89 - .../absl/strings/internal/pow10_helper.h | 40 - .../strings/internal/resize_uninitialized.h | 73 - .../absl/strings/internal/stl_type_traits.h | 248 - .../absl/strings/internal/str_format/arg.h | 518 - .../absl/strings/internal/str_format/bind.h | 217 - .../strings/internal/str_format/checker.h | 333 - .../strings/internal/str_format/extension.h | 427 - .../internal/str_format/float_conversion.h | 37 - .../absl/strings/internal/str_format/output.h | 96 - .../absl/strings/internal/str_format/parser.h | 349 - .../absl/strings/internal/str_join_internal.h | 314 - .../strings/internal/str_split_internal.h | 430 - .../absl/strings/internal/string_constant.h | 64 - .../include/absl/strings/internal/utf8.h | 50 - .../third/include/absl/strings/match.h | 100 - .../third/include/absl/strings/numbers.h | 265 - .../third/include/absl/strings/str_cat.h | 408 - .../third/include/absl/strings/str_format.h | 813 - .../third/include/absl/strings/str_join.h | 293 - .../third/include/absl/strings/str_replace.h | 219 - .../third/include/absl/strings/str_split.h | 548 - .../third/include/absl/strings/string_view.h | 629 - .../third/include/absl/strings/strip.h | 91 - .../third/include/absl/strings/substitute.h | 696 - .../include/absl/synchronization/barrier.h | 79 - .../absl/synchronization/blocking_counter.h | 99 - .../internal/create_thread_identity.h | 60 - .../absl/synchronization/internal/futex.h | 154 - .../synchronization/internal/graphcycles.h | 141 - .../synchronization/internal/kernel_timeout.h | 156 - .../synchronization/internal/per_thread_sem.h | 115 - .../synchronization/internal/thread_pool.h | 93 - .../absl/synchronization/internal/waiter.h | 155 - .../include/absl/synchronization/mutex.h | 1082 -- .../absl/synchronization/notification.h | 123 - .../third/include/absl/time/civil_time.h | 538 - .../third/include/absl/time/clock.h | 74 - .../internal/cctz/include/cctz/civil_time.h | 332 - .../cctz/include/cctz/civil_time_detail.h | 628 - .../internal/cctz/include/cctz/time_zone.h | 386 - .../cctz/include/cctz/zone_info_source.h | 102 - .../time/internal/cctz/src/time_zone_fixed.h | 52 - .../time/internal/cctz/src/time_zone_if.h | 76 - .../time/internal/cctz/src/time_zone_impl.h | 93 - .../time/internal/cctz/src/time_zone_info.h | 137 - .../time/internal/cctz/src/time_zone_libc.h | 55 - .../time/internal/cctz/src/time_zone_posix.h | 132 - .../absl/time/internal/cctz/src/tzfile.h | 122 - .../time/internal/get_current_time_chrono.inc | 31 - .../time/internal/get_current_time_posix.inc | 24 - .../include/absl/time/internal/test_util.h | 33 - .../include/absl/time/internal/zoneinfo.inc | 729 - .../third/include/absl/time/time.h | 1581 -- .../third/include/absl/types/any.h | 528 - .../third/include/absl/types/bad_any_cast.h | 75 - .../include/absl/types/bad_optional_access.h | 78 - .../include/absl/types/bad_variant_access.h | 82 - .../third/include/absl/types/compare.h | 600 - .../absl/types/internal/conformance_aliases.h | 447 - .../types/internal/conformance_archetype.h | 978 -- .../absl/types/internal/conformance_profile.h | 931 -- .../absl/types/internal/conformance_testing.h | 1386 -- .../internal/conformance_testing_helpers.h | 391 - .../include/absl/types/internal/optional.h | 396 - .../include/absl/types/internal/parentheses.h | 34 - .../third/include/absl/types/internal/span.h | 128 - .../absl/types/internal/transform_args.h | 246 - .../include/absl/types/internal/variant.h | 1646 -- .../third/include/absl/types/optional.h | 776 - .../third/include/absl/types/span.h | 726 - .../third/include/absl/types/variant.h | 866 -- .../third/include/absl/utility/utility.h | 350 - .../third/include/api/adaptation/resource.h | 67 - .../third/include/api/array_view.h | 328 - .../third/include/api/async_dns_resolver.h | 85 - .../include/api/async_resolver_factory.h | 32 - .../third/include/api/audio/audio_frame.h | 177 - .../include/api/audio/audio_frame_processor.h | 43 - .../third/include/api/audio/audio_mixer.h | 80 - .../third/include/api/audio/channel_layout.h | 165 - .../api/audio/echo_canceller3_config.h | 231 - .../api/audio/echo_canceller3_config_json.h | 45 - .../api/audio/echo_canceller3_factory.h | 41 - .../third/include/api/audio/echo_control.h | 75 - .../include/api/audio/echo_detector_creator.h | 26 - .../api/audio_codecs/L16/audio_decoder_L16.h | 46 - .../api/audio_codecs/L16/audio_encoder_L16.h | 50 - .../api/audio_codecs/audio_codec_pair_id.h | 74 - .../include/api/audio_codecs/audio_decoder.h | 193 - .../api/audio_codecs/audio_decoder_factory.h | 53 - .../audio_decoder_factory_template.h | 133 - .../include/api/audio_codecs/audio_encoder.h | 257 - .../api/audio_codecs/audio_encoder_factory.h | 62 - .../audio_encoder_factory_template.h | 152 - .../include/api/audio_codecs/audio_format.h | 133 - .../builtin_audio_decoder_factory.h | 28 - .../builtin_audio_encoder_factory.h | 28 - .../audio_codecs/g711/audio_decoder_g711.h | 45 - .../audio_codecs/g711/audio_encoder_g711.h | 50 - .../audio_codecs/g722/audio_decoder_g722.h | 41 - .../audio_codecs/g722/audio_encoder_g722.h | 42 - .../g722/audio_encoder_g722_config.h | 26 - .../audio_codecs/ilbc/audio_decoder_ilbc.h | 37 - .../audio_codecs/ilbc/audio_encoder_ilbc.h | 41 - .../ilbc/audio_encoder_ilbc_config.h | 28 - .../audio_codecs/isac/audio_decoder_isac.h | 32 - .../isac/audio_decoder_isac_fix.h | 38 - .../isac/audio_decoder_isac_float.h | 43 - .../audio_codecs/isac/audio_encoder_isac.h | 32 - .../isac/audio_encoder_isac_fix.h | 52 - .../isac/audio_encoder_isac_float.h | 66 - .../opus/audio_decoder_multi_channel_opus.h | 40 - .../audio_decoder_multi_channel_opus_config.h | 63 - .../audio_codecs/opus/audio_decoder_opus.h | 42 - .../opus/audio_encoder_multi_channel_opus.h | 41 - .../audio_encoder_multi_channel_opus_config.h | 66 - .../audio_codecs/opus/audio_encoder_opus.h | 42 - .../opus/audio_encoder_opus_config.h | 74 - .../audio_codecs/opus_audio_decoder_factory.h | 26 - .../audio_codecs/opus_audio_encoder_factory.h | 26 - .../third/include/api/audio_options.h | 87 - .../third/include/api/call/audio_sink.h | 53 - .../include/api/call/bitrate_allocation.h | 45 - .../include/api/call/call_factory_interface.h | 38 - .../third/include/api/call/transport.h | 54 - .../webrtc_demo/third/include/api/candidate.h | 205 - .../api/create_peerconnection_factory.h | 56 - .../third/include/api/crypto/crypto_options.h | 72 - .../api/crypto/frame_decryptor_interface.h | 76 - .../api/crypto/frame_encryptor_interface.h | 54 - .../third/include/api/crypto_params.h | 41 - .../include/api/data_channel_interface.h | 197 - .../include/api/dtls_transport_interface.h | 108 - .../third/include/api/dtmf_sender_interface.h | 125 - .../third/include/api/fec_controller.h | 92 - .../include/api/fec_controller_override.h | 28 - .../include/api/frame_transformer_interface.h | 99 - .../third/include/api/function_view.h | 130 - .../third/include/api/ice_transport_factory.h | 47 - .../include/api/ice_transport_interface.h | 95 - .../webrtc_demo/third/include/api/jsep.h | 253 - .../third/include/api/jsep_ice_candidate.h | 89 - .../include/api/jsep_session_description.h | 91 - .../include/api/media_stream_interface.h | 341 - .../third/include/api/media_stream_proxy.h | 44 - .../third/include/api/media_stream_track.h | 63 - .../include/api/media_stream_track_proxy.h | 65 - .../third/include/api/media_types.h | 44 - .../include/api/neteq/custom_neteq_factory.h | 44 - .../neteq/default_neteq_controller_factory.h | 34 - .../third/include/api/neteq/neteq.h | 334 - .../include/api/neteq/neteq_controller.h | 191 - .../api/neteq/neteq_controller_factory.h | 32 - .../third/include/api/neteq/neteq_factory.h | 37 - .../third/include/api/neteq/tick_timer.h | 112 - .../include/api/network_state_predictor.h | 56 - .../webrtc_demo/third/include/api/notifier.h | 60 - .../api/numerics/samples_stats_counter.h | 121 - .../third/include/api/packet_socket_factory.h | 81 - .../api/peer_connection_factory_proxy.h | 68 - .../include/api/peer_connection_interface.h | 1531 -- .../third/include/api/peer_connection_proxy.h | 164 - .../webrtc_demo/third/include/api/priority.h | 26 - .../webrtc_demo/third/include/api/proxy.h | 423 - .../third/include/api/ref_counted_base.h | 43 - .../webrtc_demo/third/include/api/rtc_error.h | 331 - .../include/api/rtc_event_log/rtc_event.h | 77 - .../include/api/rtc_event_log/rtc_event_log.h | 69 - .../api/rtc_event_log/rtc_event_log_factory.h | 37 - .../rtc_event_log_factory_interface.h | 33 - .../third/include/api/rtc_event_log_output.h | 42 - .../include/api/rtc_event_log_output_file.h | 58 - .../third/include/api/rtp_headers.h | 189 - .../third/include/api/rtp_packet_info.h | 97 - .../third/include/api/rtp_packet_infos.h | 130 - .../third/include/api/rtp_parameters.h | 669 - .../include/api/rtp_receiver_interface.h | 148 - .../third/include/api/rtp_sender_interface.h | 133 - .../include/api/rtp_transceiver_direction.h | 27 - .../include/api/rtp_transceiver_interface.h | 179 - .../third/include/api/scoped_refptr.h | 165 - .../include/api/sctp_transport_interface.h | 92 - .../third/include/api/sequence_checker.h | 116 - ...set_local_description_observer_interface.h | 30 - ...et_remote_description_observer_interface.h | 31 - .../third/include/api/stats/rtc_stats.h | 461 - .../api/stats/rtc_stats_collector_callback.h | 30 - .../include/api/stats/rtc_stats_report.h | 121 - .../include/api/stats/rtcstats_objects.h | 679 - .../third/include/api/stats_types.h | 455 - .../task_queue/default_task_queue_factory.h | 23 - .../include/api/task_queue/queued_task.h | 32 - .../include/api/task_queue/task_queue_base.h | 88 - .../api/task_queue/task_queue_factory.h | 35 - .../include/api/task_queue/task_queue_test.h | 40 - .../test/audio_quality_analyzer_interface.h | 44 - .../third/include/api/test/audioproc_float.h | 71 - .../include/api/test/create_frame_generator.h | 76 - .../test/create_network_emulation_manager.h | 26 - ..._connection_quality_test_frame_generator.h | 45 - ...eate_peerconnection_quality_test_fixture.h | 43 - .../api/test/create_simulcast_test_fixture.h | 32 - .../include/api/test/create_time_controller.h | 34 - .../test/create_video_quality_test_fixture.h | 31 - .../api/test/create_videocodec_test_fixture.h | 34 - .../include/api/test/dummy_peer_connection.h | 251 - .../include/api/test/fake_frame_decryptor.h | 72 - .../include/api/test/fake_frame_encryptor.h | 69 - .../api/test/frame_generator_interface.h | 51 - .../third/include/api/test/mock_audio_mixer.h | 29 - .../include/api/test/mock_data_channel.h | 60 - .../api/test/mock_fec_controller_override.h | 26 - .../include/api/test/mock_frame_decryptor.h | 40 - .../include/api/test/mock_frame_encryptor.h | 39 - .../api/test/mock_media_stream_interface.h | 89 - .../mock_peer_connection_factory_interface.h | 80 - .../api/test/mock_peerconnectioninterface.h | 201 - .../include/api/test/mock_rtp_transceiver.h | 85 - .../third/include/api/test/mock_rtpreceiver.h | 45 - .../third/include/api/test/mock_rtpsender.h | 47 - .../api/test/mock_transformable_video_frame.h | 38 - .../api/test/mock_video_bitrate_allocator.h | 28 - .../mock_video_bitrate_allocator_factory.h | 34 - .../include/api/test/mock_video_decoder.h | 59 - .../api/test/mock_video_decoder_factory.h | 39 - .../include/api/test/mock_video_encoder.h | 73 - .../api/test/mock_video_encoder_factory.h | 45 - .../third/include/api/test/neteq_simulator.h | 82 - .../api/test/neteq_simulator_factory.h | 71 - .../network_emulation/create_cross_traffic.h | 37 - .../test/network_emulation/cross_traffic.h | 85 - .../network_emulation_interfaces.h | 269 - .../api/test/network_emulation_manager.h | 320 - .../peerconnection_quality_test_fixture.h | 481 - .../include/api/test/simulated_network.h | 95 - .../include/api/test/simulcast_test_fixture.h | 44 - .../api/test/stats_observer_interface.h | 35 - .../api/test/test_dependency_factory.h | 48 - .../third/include/api/test/time_controller.h | 93 - .../api/test/track_id_stream_info_map.h | 42 - .../video/function_video_decoder_factory.h | 64 - .../video/function_video_encoder_factory.h | 59 - .../test/video_quality_analyzer_interface.h | 154 - .../api/test/video_quality_test_fixture.h | 142 - .../api/test/videocodec_test_fixture.h | 169 - .../include/api/test/videocodec_test_stats.h | 134 - .../include/api/transport/bitrate_settings.h | 50 - .../data_channel_transport_interface.h | 128 - .../third/include/api/transport/enums.h | 39 - .../api/transport/field_trial_based_config.h | 26 - .../include/api/transport/goog_cc_factory.h | 61 - .../include/api/transport/network_control.h | 140 - .../include/api/transport/network_types.h | 279 - .../api/transport/rtp/dependency_descriptor.h | 148 - .../include/api/transport/rtp/rtp_source.h | 109 - .../sctp_transport_factory_interface.h | 42 - .../third/include/api/transport/stun.h | 760 - .../test/create_feedback_generator.h | 21 - .../test/feedback_generator_interface.h | 37 - .../api/transport/test/mock_network_control.h | 35 - .../api/transport/webrtc_key_value_config.h | 33 - .../third/include/api/turn_customizer.h | 45 - .../third/include/api/uma_metrics.h | 211 - .../third/include/api/units/data_rate.h | 155 - .../third/include/api/units/data_size.h | 66 - .../third/include/api/units/frequency.h | 101 - .../third/include/api/units/time_delta.h | 105 - .../third/include/api/units/timestamp.h | 138 - .../builtin_video_bitrate_allocator_factory.h | 25 - .../third/include/api/video/color_space.h | 178 - .../third/include/api/video/encoded_frame.h | 64 - .../third/include/api/video/encoded_image.h | 207 - .../third/include/api/video/hdr_metadata.h | 105 - .../third/include/api/video/i010_buffer.h | 90 - .../third/include/api/video/i420_buffer.h | 124 - .../third/include/api/video/nv12_buffer.h | 85 - .../api/video/recordable_encoded_frame.h | 59 - .../test/mock_recordable_encoded_frame.h | 34 - .../api/video/video_adaptation_counters.h | 46 - .../api/video/video_adaptation_reason.h | 20 - .../api/video/video_bitrate_allocation.h | 96 - .../api/video/video_bitrate_allocator.h | 60 - .../video/video_bitrate_allocator_factory.h | 33 - .../include/api/video/video_codec_constants.h | 24 - .../include/api/video/video_codec_type.h | 30 - .../include/api/video/video_content_type.h | 39 - .../third/include/api/video/video_frame.h | 288 - .../include/api/video/video_frame_buffer.h | 258 - .../include/api/video/video_frame_metadata.h | 59 - .../include/api/video/video_frame_type.h | 26 - .../api/video/video_layers_allocation.h | 77 - .../third/include/api/video/video_rotation.h | 26 - .../include/api/video/video_sink_interface.h | 32 - .../api/video/video_source_interface.h | 103 - .../include/api/video/video_stream_decoder.h | 57 - .../api/video/video_stream_decoder_create.h | 35 - .../video/video_stream_encoder_interface.h | 138 - .../api/video/video_stream_encoder_observer.h | 116 - .../api/video/video_stream_encoder_settings.h | 66 - .../third/include/api/video/video_timing.h | 129 - .../api/video_codecs/bitstream_parser.h | 35 - .../builtin_video_decoder_factory.h | 27 - .../builtin_video_encoder_factory.h | 28 - .../api/video_codecs/sdp_video_format.h | 50 - .../include/api/video_codecs/spatial_layer.h | 32 - .../include/api/video_codecs/video_codec.h | 182 - .../include/api/video_codecs/video_decoder.h | 79 - .../api/video_codecs/video_decoder_factory.h | 48 - .../video_decoder_software_fallback_wrapper.h | 31 - .../include/api/video_codecs/video_encoder.h | 427 - .../api/video_codecs/video_encoder_config.h | 195 - .../api/video_codecs/video_encoder_factory.h | 94 - .../video_encoder_software_fallback_wrapper.h | 47 - .../vp8_frame_buffer_controller.h | 192 - .../api/video_codecs/vp8_frame_config.h | 110 - .../api/video_codecs/vp8_temporal_layers.h | 77 - .../vp8_temporal_layers_factory.h | 34 - .../include/api/video_track_source_proxy.h | 49 - .../include/api/voip/test/mock_voip_engine.h | 124 - .../third/include/api/voip/voip_base.h | 114 - .../third/include/api/voip/voip_codec.h | 56 - .../third/include/api/voip/voip_dtmf.h | 74 - .../third/include/api/voip/voip_engine.h | 99 - .../include/api/voip/voip_engine_factory.h | 68 - .../third/include/api/voip/voip_network.h | 46 - .../third/include/api/voip/voip_statistics.h | 98 - .../include/api/voip/voip_volume_control.h | 64 - .../third/include/audio/audio_level.h | 75 - .../include/audio/audio_receive_stream.h | 125 - .../third/include/audio/audio_send_stream.h | 234 - .../third/include/audio/audio_state.h | 93 - .../include/audio/audio_transport_impl.h | 107 - .../third/include/audio/channel_receive.h | 186 - ...annel_receive_frame_transformer_delegate.h | 74 - .../third/include/audio/channel_send.h | 144 - .../channel_send_frame_transformer_delegate.h | 81 - .../third/include/audio/conversion.h | 27 - .../include/audio/mock_voe_channel_proxy.h | 177 - .../third/include/audio/null_audio_poller.h | 40 - .../third/include/audio/remix_resample.h | 44 - .../audio/test/audio_bwe_integration_test.h | 57 - .../audio/test/audio_end_to_end_test.h | 70 - .../audio/utility/audio_frame_operations.h | 107 - .../include/audio/utility/channel_mixer.h | 86 - .../audio/utility/channel_mixing_matrix.h | 76 - .../third/include/audio/voip/audio_channel.h | 136 - .../third/include/audio/voip/audio_egress.h | 158 - .../third/include/audio/voip/audio_ingress.h | 145 - .../include/audio/voip/test/mock_task_queue.h | 60 - .../third/include/audio/voip/voip_core.h | 183 - .../include/base/allocator/allocator_check.h | 18 - .../base/allocator/allocator_extension.h | 67 - .../allocator/allocator_interception_mac.h | 61 - .../include/base/allocator/allocator_shim.h | 178 - ...shim_default_dispatch_to_partition_alloc.h | 73 - .../base/allocator/allocator_shim_internals.h | 51 - .../allocator_shim_override_cpp_symbols.h | 152 - ...locator_shim_override_glibc_weak_symbols.h | 119 - .../allocator_shim_override_libc_symbols.h | 77 - ...tor_shim_override_linker_wrapped_symbols.h | 147 - ...allocator_shim_override_mac_default_zone.h | 223 - .../allocator_shim_override_mac_symbols.h | 60 - ...allocator_shim_override_ucrt_symbols_win.h | 178 - .../allocator/malloc_zone_functions_mac.h | 103 - .../address_pool_manager.h | 152 - .../address_pool_manager_bitmap.h | 143 - .../address_pool_manager_types.h | 17 - .../address_space_randomization.h | 266 - .../arm_bti_test_functions.h | 17 - .../partition_allocator/extended_api.h | 31 - .../partition_allocator/memory_reclaimer.h | 75 - .../base/allocator/partition_allocator/oom.h | 37 - .../partition_allocator/oom_callback.h | 24 - .../partition_allocator/page_allocator.h | 249 - .../page_allocator_constants.h | 126 - .../page_allocator_internal.h | 17 - .../page_allocator_internals_fuchsia.h | 227 - .../page_allocator_internals_posix.h | 333 - .../page_allocator_internals_win.h | 164 - .../partition_address_space.h | 184 - .../partition_allocator/partition_alloc-inl.h | 64 - .../partition_allocator/partition_alloc.h | 96 - .../partition_alloc_check.h | 83 - .../partition_alloc_constants.h | 307 - .../partition_alloc_features.h | 76 - .../partition_alloc_forward.h | 36 - .../partition_alloc_hooks.h | 86 - .../partition_allocator/partition_bucket.h | 186 - .../partition_allocator/partition_cookie.h | 53 - .../partition_direct_map_extent.h | 57 - .../partition_freelist_entry.h | 192 - .../partition_allocator/partition_lock.h | 185 - .../partition_allocator/partition_oom.h | 40 - .../partition_allocator/partition_page.h | 653 - .../partition_allocator/partition_ref_count.h | 229 - .../partition_allocator/partition_root.h | 1568 -- .../partition_allocator/partition_stats.h | 115 - .../partition_allocator/partition_tls.h | 97 - .../allocator/partition_allocator/random.h | 27 - .../partition_allocator/spinning_mutex.h | 167 - .../starscan/object_bitmap.h | 242 - .../partition_allocator/starscan/pcscan.h | 209 - .../partition_allocator/thread_cache.h | 427 - .../partition_allocator/yield_processor.h | 40 - .../base/allocator/winheap_stubs_win.h | 48 - .../android/android_hardware_buffer_compat.h | 76 - .../base/android/android_image_reader_abi.h | 116 - .../android/android_image_reader_compat.h | 89 - .../third/include/base/android/apk_assets.h | 43 - .../android/application_status_listener.h | 97 - .../include/base/android/base_jni_onload.h | 23 - .../third/include/base/android/build_info.h | 178 - .../third/include/base/android/bundle_utils.h | 44 - .../include/base/android/callback_android.h | 40 - .../android/child_process_binding_types.h | 25 - .../include/base/android/content_uri_utils.h | 40 - .../base/android/early_trace_event_binding.h | 24 - .../third/include/base/android/event_log.h | 20 - .../base/android/int_string_callback.h | 25 - .../base/android/java_exception_reporter.h | 42 - .../base/android/java_handler_thread.h | 117 - .../base/android/java_heap_dump_generator.h | 25 - .../third/include/base/android/java_runtime.h | 25 - .../third/include/base/android/jni_android.h | 181 - .../third/include/base/android/jni_array.h | 191 - .../jni_generator/jni_generator_helper.h | 129 - .../android/jni_generator/sample_for_tests.h | 113 - .../include/base/android/jni_int_wrapper.h | 56 - .../include/base/android/jni_registrar.h | 28 - .../third/include/base/android/jni_string.h | 51 - .../third/include/base/android/jni_utils.h | 34 - .../third/include/base/android/jni_weak_ref.h | 51 - .../android/library_loader/anchor_functions.h | 35 - .../library_loader/library_loader_hooks.h | 97 - .../library_loader/library_prefetcher.h | 71 - .../base/android/linker/legacy_linker_jni.h | 21 - .../include/base/android/linker/linker_jni.h | 217 - .../base/android/linker/modern_linker_jni.h | 155 - .../third/include/base/android/locale_utils.h | 29 - .../memory_pressure_listener_android.h | 29 - .../orderfile/orderfile_instrumentation.h | 57 - .../third/include/base/android/path_utils.h | 59 - .../third/include/base/android/radio_utils.h | 45 - .../base/android/reached_addresses_bitset.h | 75 - .../base/android/reached_code_profiler.h | 34 - .../scoped_hardware_buffer_fence_sync.h | 47 - .../android/scoped_hardware_buffer_handle.h | 90 - .../include/base/android/scoped_java_ref.h | 533 - .../third/include/base/android/sys_utils.h | 24 - .../task_scheduler/post_task_android.h | 43 - .../task_scheduler/task_runner_android.h | 42 - .../include/base/android/timezone_utils.h | 23 - .../base/android/trace_event_binding.h | 19 - .../base/android/unguessable_token_android.h | 43 - .../webrtc_demo/third/include/base/at_exit.h | 86 - .../third/include/base/atomic_ref_count.h | 69 - .../third/include/base/atomic_sequence_num.h | 31 - .../third/include/base/atomicops.h | 146 - .../atomicops_internals_atomicword_compat.h | 94 - .../base/atomicops_internals_portable.h | 194 - .../base/atomicops_internals_x86_msvc.h | 159 - .../third/include/base/auto_reset.h | 52 - .../third/include/base/barrier_closure.h | 28 - .../webrtc_demo/third/include/base/base64.h | 29 - .../third/include/base/base64url.h | 56 - .../third/include/base/base_export.h | 29 - .../third/include/base/base_paths.h | 55 - .../third/include/base/base_paths_android.h | 25 - .../third/include/base/base_paths_fuchsia.h | 26 - .../third/include/base/base_paths_mac.h | 24 - .../third/include/base/base_paths_posix.h | 27 - .../third/include/base/base_paths_win.h | 57 - .../third/include/base/base_switches.h | 76 - .../third/include/base/big_endian.h | 140 - .../webrtc_demo/third/include/base/bind.h | 335 - .../third/include/base/bind_internal.h | 1379 -- .../third/include/base/bind_post_task.h | 107 - .../include/base/bind_post_task_internal.h | 97 - .../webrtc_demo/third/include/base/bit_cast.h | 77 - .../webrtc_demo/third/include/base/bits.h | 246 - .../third/include/base/build_time.h | 30 - .../webrtc_demo/third/include/base/callback.h | 220 - .../third/include/base/callback_forward.h | 28 - .../third/include/base/callback_helpers.h | 203 - .../third/include/base/callback_internal.h | 248 - .../third/include/base/callback_list.h | 352 - .../third/include/base/cancelable_callback.h | 156 - .../webrtc_demo/third/include/base/check.h | 159 - .../webrtc_demo/third/include/base/check_op.h | 240 - .../third/include/base/command_line.h | 263 - .../third/include/base/compiler_specific.h | 349 - .../third/include/base/component_export.h | 76 - .../third/include/base/containers/adapters.h | 52 - .../include/base/containers/buffer_iterator.h | 145 - .../base/containers/checked_iterators.h | 265 - .../include/base/containers/checked_range.h | 174 - .../include/base/containers/circular_deque.h | 1117 -- .../third/include/base/containers/contains.h | 98 - .../base/containers/contiguous_iterator.h | 102 - .../include/base/containers/fixed_flat_map.h | 114 - .../include/base/containers/fixed_flat_set.h | 103 - .../third/include/base/containers/flat_map.h | 357 - .../third/include/base/containers/flat_set.h | 161 - .../third/include/base/containers/flat_tree.h | 1093 -- .../third/include/base/containers/id_map.h | 291 - .../include/base/containers/intrusive_heap.h | 1087 -- .../include/base/containers/linked_list.h | 187 - .../third/include/base/containers/mru_cache.h | 266 - .../third/include/base/containers/queue.h | 23 - .../include/base/containers/ring_buffer.h | 132 - .../third/include/base/containers/small_map.h | 627 - .../third/include/base/containers/span.h | 515 - .../third/include/base/containers/stack.h | 23 - .../include/base/containers/stack_container.h | 250 - .../base/containers/unique_ptr_adapters.h | 78 - .../third/include/base/containers/util.h | 21 - .../include/base/containers/vector_buffer.h | 195 - .../webrtc_demo/third/include/base/cpu.h | 184 - .../third/include/base/cpu_affinity_posix.h | 42 - .../third/include/base/critical_closure.h | 93 - .../third/include/base/dcheck_is_on.h | 22 - .../include/base/debug/activity_analyzer.h | 257 - .../include/base/debug/activity_tracker.h | 1371 -- .../third/include/base/debug/alias.h | 102 - .../include/base/debug/asan_invalid_access.h | 47 - .../base/debug/close_handle_hook_win.h | 19 - .../third/include/base/debug/crash_logging.h | 165 - .../third/include/base/debug/debugger.h | 50 - .../base/debug/dump_without_crashing.h | 42 - .../third/include/base/debug/elf_reader.h | 56 - .../include/base/debug/gdi_debug_util_win.h | 39 - .../include/base/debug/invalid_access_win.h | 25 - .../include/base/debug/leak_annotations.h | 46 - .../include/base/debug/proc_maps_linux.h | 94 - .../third/include/base/debug/profiler.h | 76 - .../third/include/base/debug/stack_trace.h | 261 - .../third/include/base/debug/task_trace.h | 67 - .../base/debug/test_elf_image_builder.h | 128 - .../base/deferred_sequenced_task_runner.h | 96 - .../third/include/base/enterprise_util.h | 62 - .../third/include/base/environment.h | 60 - .../third/include/base/export_template.h | 147 - .../third/include/base/feature_list.h | 391 - .../include/base/file_descriptor_posix.h | 61 - .../include/base/file_descriptor_store.h | 72 - .../third/include/base/file_version_info.h | 69 - .../include/base/file_version_info_mac.h | 44 - .../include/base/file_version_info_win.h | 76 - .../include/base/files/dir_reader_fallback.h | 35 - .../include/base/files/dir_reader_linux.h | 102 - .../include/base/files/dir_reader_posix.h | 36 - .../third/include/base/files/file.h | 406 - .../files/file_descriptor_watcher_posix.h | 142 - .../include/base/files/file_enumerator.h | 211 - .../third/include/base/files/file_path.h | 491 - .../include/base/files/file_path_watcher.h | 136 - .../base/files/file_path_watcher_fsevents.h | 98 - .../base/files/file_path_watcher_kqueue.h | 128 - .../base/files/file_path_watcher_linux.h | 23 - .../third/include/base/files/file_proxy.h | 141 - .../third/include/base/files/file_tracing.h | 95 - .../third/include/base/files/file_util.h | 658 - .../base/files/important_file_writer.h | 224 - .../files/important_file_writer_cleaner.h | 154 - .../include/base/files/memory_mapped_file.h | 153 - .../third/include/base/files/platform_file.h | 43 - .../third/include/base/files/scoped_file.h | 69 - .../include/base/files/scoped_temp_dir.h | 72 - .../third/include/base/format_macros.h | 97 - .../third/include/base/fuchsia/default_job.h | 37 - .../third/include/base/fuchsia/file_utils.h | 35 - .../base/fuchsia/filtered_service_directory.h | 51 - .../include/base/fuchsia/fuchsia_logging.h | 65 - .../base/fuchsia/intl_profile_watcher.h | 74 - .../include/base/fuchsia/process_context.h | 35 - .../include/base/fuchsia/scoped_fx_logger.h | 42 - .../base/fuchsia/scoped_service_binding.h | 127 - .../base/fuchsia/scoped_service_publisher.h | 52 - .../fuchsia/service_directory_test_base.h | 50 - .../base/fuchsia/service_provider_impl.h | 67 - .../include/base/fuchsia/startup_context.h | 72 - .../test_component_context_for_process.h | 113 - .../base/fuchsia/test_component_controller.h | 36 - .../base/fuchsia/test_interface_impl.h | 31 - .../base/fuchsia/test_log_listener_safe.h | 81 - .../third/include/base/functional/identity.h | 28 - .../third/include/base/functional/invoke.h | 152 - .../third/include/base/functional/not_fn.h | 56 - .../third/include/base/gtest_prod_util.h | 66 - .../webrtc_demo/third/include/base/guid.h | 105 - .../third/include/base/hash/hash.h | 84 - .../third/include/base/hash/legacy_hash.h | 25 - .../webrtc_demo/third/include/base/hash/md5.h | 69 - .../third/include/base/hash/md5_boringssl.h | 25 - .../third/include/base/hash/md5_constexpr.h | 44 - .../base/hash/md5_constexpr_internal.h | 326 - .../third/include/base/hash/md5_nacl.h | 23 - .../third/include/base/hash/sha1.h | 48 - .../third/include/base/hash/sha1_boringssl.h | 18 - .../third/include/base/hash/sha1_nacl.h | 41 - .../include/base/i18n/base_i18n_export.h | 29 - .../include/base/i18n/base_i18n_switches.h | 21 - .../third/include/base/i18n/break_iterator.h | 196 - .../third/include/base/i18n/case_conversion.h | 49 - .../third/include/base/i18n/char_iterator.h | 153 - .../include/base/i18n/character_encoding.h | 20 - .../include/base/i18n/encoding_detection.h | 21 - .../third/include/base/i18n/file_util_icu.h | 65 - .../third/include/base/i18n/i18n_constants.h | 21 - .../base/i18n/icu_string_conversions.h | 57 - .../third/include/base/i18n/icu_util.h | 67 - .../include/base/i18n/message_formatter.h | 127 - .../include/base/i18n/number_formatting.h | 36 - .../webrtc_demo/third/include/base/i18n/rtl.h | 171 - .../base/i18n/streaming_utf8_validator.h | 66 - .../third/include/base/i18n/string_compare.h | 28 - .../third/include/base/i18n/string_search.h | 94 - .../third/include/base/i18n/time_formatting.h | 156 - .../third/include/base/i18n/timezone.h | 24 - .../third/include/base/i18n/unicodestring.h | 34 - .../include/base/i18n/utf8_validator_tables.h | 32 - .../third/include/base/immediate_crash.h | 168 - .../third/include/base/ios/block_types.h | 14 - .../include/base/ios/crb_protocol_observers.h | 43 - .../third/include/base/ios/device_util.h | 90 - .../third/include/base/ios/ios_util.h | 67 - .../third/include/base/ios/ns_error_util.h | 25 - .../third/include/base/ios/ns_range.h | 20 - .../include/base/ios/scoped_critical_action.h | 75 - .../third/include/base/ios/weak_nsobject.h | 187 - .../third/include/base/json/json_common.h | 42 - .../base/json/json_file_value_serializer.h | 103 - .../third/include/base/json/json_parser.h | 287 - .../third/include/base/json/json_reader.h | 116 - .../base/json/json_string_value_serializer.h | 75 - .../include/base/json/json_value_converter.h | 516 - .../third/include/base/json/json_writer.h | 87 - .../third/include/base/json/string_escape.h | 61 - .../third/include/base/lazy_instance.h | 210 - .../include/base/lazy_instance_helpers.h | 101 - .../third/include/base/linux_util.h | 57 - .../webrtc_demo/third/include/base/location.h | 147 - .../webrtc_demo/third/include/base/logging.h | 746 - .../third/include/base/logging_win.h | 84 - .../include/base/mac/authorization_util.h | 82 - .../third/include/base/mac/bundle_locations.h | 66 - .../include/base/mac/call_with_eh_frame.h | 26 - .../include/base/mac/dispatch_source_mach.h | 60 - .../third/include/base/mac/foundation_util.h | 399 - .../include/base/mac/launch_services_util.h | 30 - .../third/include/base/mac/launchd.h | 34 - .../third/include/base/mac/mac_logging.h | 98 - .../third/include/base/mac/mac_util.h | 229 - .../third/include/base/mac/mach_logging.h | 167 - .../include/base/mac/mach_port_rendezvous.h | 218 - .../base/mac/objc_release_properties.h | 65 - .../third/include/base/mac/os_crash_dumps.h | 22 - .../third/include/base/mac/scoped_aedesc.h | 52 - .../base/mac/scoped_authorizationref.h | 90 - .../third/include/base/mac/scoped_block.h | 38 - .../base/mac/scoped_cffiledescriptorref.h | 39 - .../third/include/base/mac/scoped_cftyperef.h | 50 - .../include/base/mac/scoped_dispatch_object.h | 36 - .../base/mac/scoped_ionotificationportref.h | 33 - .../third/include/base/mac/scoped_ioobject.h | 36 - .../base/mac/scoped_ioplugininterface.h | 38 - .../include/base/mac/scoped_launch_data.h | 38 - .../base/mac/scoped_mach_msg_destroy.h | 37 - .../third/include/base/mac/scoped_mach_port.h | 81 - .../third/include/base/mac/scoped_mach_vm.h | 101 - .../base/mac/scoped_nsautorelease_pool.h | 47 - .../third/include/base/mac/scoped_nsobject.h | 102 - .../base/mac/scoped_objc_class_swizzler.h | 59 - .../include/base/mac/scoped_sending_event.h | 48 - .../third/include/base/mac/scoped_typeref.h | 143 - .../base/mac/sdk_forward_declarations.h | 67 - .../webrtc_demo/third/include/base/macros.h | 47 - .../include/base/memory/aligned_memory.h | 91 - .../third/include/base/memory/checked_ptr.h | 584 - .../include/base/memory/discardable_memory.h | 86 - .../memory/discardable_memory_allocator.h | 70 - .../base/memory/discardable_memory_internal.h | 52 - .../base/memory/discardable_shared_memory.h | 200 - .../third/include/base/memory/free_deleter.h | 25 - ..._free_discardable_memory_allocator_posix.h | 51 - .../madv_free_discardable_memory_posix.h | 128 - .../base/memory/memory_pressure_listener.h | 117 - .../base/memory/memory_pressure_monitor.h | 58 - .../include/base/memory/nonscannable_memory.h | 79 - .../memory/platform_shared_memory_region.h | 299 - .../third/include/base/memory/ptr_util.h | 23 - .../raw_scoped_refptr_mismatch_checker.h | 48 - .../memory/read_only_shared_memory_region.h | 136 - .../third/include/base/memory/ref_counted.h | 460 - .../memory/ref_counted_delete_on_sequence.h | 90 - .../include/base/memory/ref_counted_memory.h | 198 - .../third/include/base/memory/scoped_policy.h | 25 - .../third/include/base/memory/scoped_refptr.h | 375 - .../include/base/memory/shared_memory_hooks.h | 52 - .../base/memory/shared_memory_mapping.h | 252 - .../memory/shared_memory_security_policy.h | 45 - .../base/memory/shared_memory_tracker.h | 81 - .../third/include/base/memory/singleton.h | 279 - .../third/include/base/memory/tagging.h | 31 - .../base/memory/unsafe_shared_memory_pool.h | 83 - .../base/memory/unsafe_shared_memory_region.h | 121 - .../third/include/base/memory/weak_ptr.h | 395 - .../memory/writable_shared_memory_region.h | 130 - .../include/base/message_loop/message_pump.h | 229 - .../base/message_loop/message_pump_android.h | 111 - .../base/message_loop/message_pump_default.h | 43 - .../base/message_loop/message_pump_for_io.h | 48 - .../base/message_loop/message_pump_for_ui.h | 57 - .../base/message_loop/message_pump_fuchsia.h | 160 - .../base/message_loop/message_pump_glib.h | 141 - .../base/message_loop/message_pump_io_ios.h | 91 - .../base/message_loop/message_pump_kqueue.h | 193 - .../base/message_loop/message_pump_libevent.h | 125 - .../base/message_loop/message_pump_mac.h | 427 - .../base/message_loop/message_pump_type.h | 52 - .../base/message_loop/message_pump_win.h | 301 - .../include/base/message_loop/timer_slack.h | 40 - .../watchable_io_message_pump_posix.h | 88 - .../base/message_loop/work_id_provider.h | 69 - .../include/base/metrics/bucket_ranges.h | 101 - .../third/include/base/metrics/crc32.h | 24 - .../include/base/metrics/dummy_histogram.h | 59 - .../third/include/base/metrics/field_trial.h | 802 - .../metrics/field_trial_param_associator.h | 76 - .../include/base/metrics/field_trial_params.h | 323 - .../third/include/base/metrics/histogram.h | 577 - .../include/base/metrics/histogram_base.h | 327 - .../metrics/histogram_delta_serialization.h | 61 - .../base/metrics/histogram_flattener.h | 34 - .../base/metrics/histogram_functions.h | 274 - .../include/base/metrics/histogram_macros.h | 435 - .../base/metrics/histogram_macros_internal.h | 270 - .../base/metrics/histogram_macros_local.h | 95 - .../include/base/metrics/histogram_samples.h | 294 - .../base/metrics/histogram_snapshot_manager.h | 90 - .../include/base/metrics/metrics_hashes.h | 21 - .../metrics/persistent_histogram_allocator.h | 487 - .../metrics/persistent_histogram_storage.h | 68 - .../metrics/persistent_memory_allocator.h | 901 -- .../base/metrics/persistent_sample_map.h | 109 - .../base/metrics/record_histogram_checker.h | 27 - .../third/include/base/metrics/sample_map.h | 50 - .../include/base/metrics/sample_vector.h | 204 - .../base/metrics/single_sample_metrics.h | 105 - .../include/base/metrics/sparse_histogram.h | 97 - .../base/metrics/statistics_recorder.h | 334 - .../third/include/base/metrics/user_metrics.h | 89 - .../base/metrics/user_metrics_action.h | 27 - .../third/include/base/native_library.h | 136 - .../third/include/base/nix/mime_util_xdg.h | 36 - .../third/include/base/nix/xdg_util.h | 83 - .../third/include/base/no_destructor.h | 98 - .../third/include/base/notreached.h | 46 - .../include/base/numerics/checked_math.h | 375 - .../include/base/numerics/checked_math_impl.h | 593 - .../include/base/numerics/clamped_math.h | 263 - .../include/base/numerics/clamped_math_impl.h | 341 - .../include/base/numerics/math_constants.h | 19 - .../third/include/base/numerics/ranges.h | 27 - .../include/base/numerics/safe_conversions.h | 387 - .../base/numerics/safe_conversions_arm_impl.h | 51 - .../base/numerics/safe_conversions_impl.h | 859 - .../third/include/base/numerics/safe_math.h | 12 - .../base/numerics/safe_math_arm_impl.h | 124 - .../base/numerics/safe_math_clang_gcc_impl.h | 157 - .../base/numerics/safe_math_shared_impl.h | 216 - .../third/include/base/observer_list.h | 362 - .../include/base/observer_list_internal.h | 165 - .../include/base/observer_list_threadsafe.h | 310 - .../third/include/base/observer_list_types.h | 48 - .../third/include/base/one_shot_event.h | 106 - .../webrtc_demo/third/include/base/optional.h | 946 -- .../third/include/base/os_compat_android.h | 21 - .../third/include/base/os_compat_nacl.h | 16 - .../third/include/base/parameter_pack.h | 91 - .../third/include/base/path_service.h | 95 - .../third/include/base/pending_task.h | 92 - .../webrtc_demo/third/include/base/pickle.h | 345 - .../include/base/posix/can_lower_nice_to.h | 19 - .../third/include/base/posix/eintr_wrapper.h | 68 - .../base/posix/file_descriptor_shuffle.h | 87 - .../include/base/posix/global_descriptors.h | 98 - .../third/include/base/posix/safe_strerror.h | 44 - .../include/base/posix/unix_domain_socket.h | 111 - ...post_task_and_reply_with_result_internal.h | 37 - .../base/power_monitor/power_monitor.h | 128 - .../power_monitor_device_source.h | 144 - .../base/power_monitor/power_monitor_source.h | 68 - .../base/power_monitor/power_observer.h | 67 - .../test/fake_power_monitor_source.h | 41 - .../thermal_state_observer_mac.h | 40 - .../base/process/environment_internal.h | 52 - .../third/include/base/process/internal_aix.h | 84 - .../include/base/process/internal_linux.h | 135 - .../third/include/base/process/kill.h | 157 - .../third/include/base/process/launch.h | 451 - .../third/include/base/process/memory.h | 87 - .../base/process/memory_unittest_mac.h | 26 - .../include/base/process/port_provider_mac.h | 61 - .../third/include/base/process/process.h | 237 - .../include/base/process/process_handle.h | 142 - .../third/include/base/process/process_info.h | 33 - .../include/base/process/process_iterator.h | 152 - .../include/base/process/process_metrics.h | 652 - .../base/process/process_metrics_iocounters.h | 37 - .../include/base/profiler/arm_cfi_table.h | 75 - .../base/profiler/chrome_unwinder_android.h | 53 - .../third/include/base/profiler/frame.h | 29 - .../include/base/profiler/metadata_recorder.h | 277 - .../include/base/profiler/module_cache.h | 194 - .../include/base/profiler/native_unwinder.h | 20 - .../base/profiler/native_unwinder_android.h | 74 - .../base/profiler/native_unwinder_mac.h | 56 - .../base/profiler/native_unwinder_win.h | 30 - .../include/base/profiler/profile_builder.h | 67 - .../include/base/profiler/register_context.h | 219 - .../include/base/profiler/sample_metadata.h | 150 - .../profiler/sampling_profiler_thread_token.h | 33 - .../include/base/profiler/stack_buffer.h | 59 - .../include/base/profiler/stack_copier.h | 96 - .../base/profiler/stack_copier_signal.h | 39 - .../base/profiler/stack_copier_suspend.h | 39 - .../include/base/profiler/stack_sampler.h | 96 - .../base/profiler/stack_sampler_impl.h | 74 - .../base/profiler/stack_sampling_profiler.h | 227 - .../stack_sampling_profiler_test_util.h | 152 - .../profiler/suspendable_thread_delegate.h | 59 - .../suspendable_thread_delegate_mac.h | 66 - .../suspendable_thread_delegate_win.h | 64 - .../include/base/profiler/thread_delegate.h | 43 - .../base/profiler/thread_delegate_posix.h | 44 - .../third/include/base/profiler/unwinder.h | 99 - .../profiler/win32_stack_frame_unwinder.h | 87 - .../third/include/base/rand_util.h | 78 - .../third/include/base/ranges/algorithm.h | 5000 ------ .../third/include/base/ranges/functional.h | 32 - .../third/include/base/ranges/ranges.h | 140 - .../webrtc_demo/third/include/base/run_loop.h | 355 - .../lock_free_address_hash_set.h | 136 - .../poisson_allocation_sampler.h | 142 - .../sampling_heap_profiler.h | 155 - .../include/base/scoped_clear_last_error.h | 58 - .../third/include/base/scoped_generic.h | 348 - .../base/scoped_multi_source_observation.h | 104 - .../include/base/scoped_native_library.h | 64 - .../third/include/base/scoped_observation.h | 93 - .../third/include/base/scoped_observer.h | 89 - .../third/include/base/sequence_checker.h | 159 - .../include/base/sequence_checker_impl.h | 73 - .../third/include/base/sequence_token.h | 117 - .../include/base/sequenced_task_runner.h | 201 - .../base/sequenced_task_runner_helpers.h | 42 - .../include/base/single_thread_task_runner.h | 36 - .../webrtc_demo/third/include/base/stl_util.h | 651 - .../base/strings/abseil_string_conversions.h | 37 - .../third/include/base/strings/char_traits.h | 112 - .../third/include/base/strings/escape.h | 120 - .../base/strings/latin1_string_conversions.h | 34 - .../third/include/base/strings/pattern.h | 23 - .../third/include/base/strings/safe_sprintf.h | 246 - .../third/include/base/strings/strcat.h | 112 - .../include/base/strings/strcat_internal.h | 76 - .../third/include/base/strings/strcat_win.h | 39 - .../base/strings/string_number_conversions.h | 156 - .../string_number_conversions_internal.h | 303 - .../strings/string_number_conversions_win.h | 34 - .../third/include/base/strings/string_piece.h | 580 - .../base/strings/string_piece_forward.h | 20 - .../third/include/base/strings/string_split.h | 145 - .../base/strings/string_split_internal.h | 100 - .../include/base/strings/string_split_win.h | 46 - .../include/base/strings/string_tokenizer.h | 359 - .../third/include/base/strings/string_util.h | 516 - .../base/strings/string_util_internal.h | 639 - .../include/base/strings/string_util_posix.h | 38 - .../include/base/strings/string_util_win.h | 195 - .../include/base/strings/stringize_macros.h | 31 - .../third/include/base/strings/stringprintf.h | 74 - .../base/strings/sys_string_conversions.h | 96 - .../strings/utf_offset_string_conversions.h | 115 - .../strings/utf_string_conversion_utils.h | 105 - .../base/strings/utf_string_conversions.h | 76 - .../third/include/base/supports_user_data.h | 97 - .../third/include/base/sync_socket.h | 145 - .../base/synchronization/atomic_flag.h | 50 - .../base/synchronization/condition_variable.h | 136 - .../third/include/base/synchronization/lock.h | 130 - .../include/base/synchronization/lock_impl.h | 220 - .../base/synchronization/waitable_event.h | 293 - .../synchronization/waitable_event_watcher.h | 160 - .../third/include/base/sys_byteorder.h | 143 - .../third/include/base/syslog_logging.h | 53 - .../third/include/base/system/sys_info.h | 230 - .../include/base/system/sys_info_internal.h | 33 - .../include/base/system/system_monitor.h | 75 - .../base/task/cancelable_task_tracker.h | 169 - .../include/base/task/common/checked_lock.h | 143 - .../base/task/common/checked_lock_impl.h | 58 - .../include/base/task/common/intrusive_heap.h | 81 - .../base/task/common/operations_controller.h | 151 - .../task/common/scoped_defer_task_posting.h | 75 - .../include/base/task/common/task_annotator.h | 97 - .../third/include/base/task/current_thread.h | 310 - .../base/task/lazy_thread_pool_task_runner.h | 220 - .../third/include/base/task/post_job.h | 195 - .../third/include/base/task/post_task.h | 226 - ...ped_set_task_priority_for_current_thread.h | 35 - .../sequence_manager/associated_thread_id.h | 113 - .../task/sequence_manager/atomic_flag_set.h | 140 - .../task/sequence_manager/enqueue_order.h | 61 - .../enqueue_order_generator.h | 43 - .../lazily_deallocated_deque.h | 379 - .../base/task/sequence_manager/lazy_now.h | 43 - .../task/sequence_manager/real_time_domain.h | 41 - .../task/sequence_manager/sequence_manager.h | 333 - .../sequence_manager/sequence_manager_impl.h | 441 - .../sequence_manager/sequenced_task_source.h | 56 - .../base/task/sequence_manager/task_queue.h | 429 - .../task/sequence_manager/task_queue_impl.h | 552 - .../sequence_manager/task_queue_selector.h | 265 - .../task_queue_selector_logic.h | 37 - .../sequence_manager/task_time_observer.h | 31 - .../base/task/sequence_manager/tasks.h | 134 - .../task/sequence_manager/test/fake_task.h | 33 - .../sequence_manager/test/mock_time_domain.h | 39 - .../test/mock_time_message_pump.h | 86 - .../test/sequence_manager_for_test.h | 69 - .../sequence_manager/test/test_task_queue.h | 33 - .../test/test_task_time_observer.h | 23 - .../task/sequence_manager/thread_controller.h | 235 - .../sequence_manager/thread_controller_impl.h | 139 - .../thread_controller_power_monitor.h | 56 - ...thread_controller_with_message_pump_impl.h | 207 - .../base/task/sequence_manager/time_domain.h | 155 - .../task/sequence_manager/work_deduplicator.h | 145 - .../base/task/sequence_manager/work_queue.h | 188 - .../task/sequence_manager/work_queue_sets.h | 161 - .../include/base/task/simple_task_executor.h | 52 - .../base/task/single_thread_task_executor.h | 67 - .../single_thread_task_runner_thread_mode.h | 23 - .../third/include/base/task/task_executor.h | 90 - .../third/include/base/task/task_features.h | 76 - .../third/include/base/task/task_observer.h | 35 - .../third/include/base/task/task_traits.h | 388 - .../include/base/task/task_traits_extension.h | 235 - .../base/task/test_task_traits_extension.h | 74 - .../third/include/base/task/thread_pool.h | 230 - .../task/thread_pool/can_run_policy_test.h | 191 - .../task/thread_pool/delayed_task_manager.h | 136 - .../task/thread_pool/environment_config.h | 52 - .../task/thread_pool/initialization_util.h | 22 - .../base/task/thread_pool/job_task_source.h | 221 - .../thread_pool/pooled_parallel_task_runner.h | 59 - .../pooled_sequenced_task_runner.h | 57 - ...pooled_single_thread_task_runner_manager.h | 159 - .../thread_pool/pooled_task_runner_delegate.h | 68 - .../base/task/thread_pool/priority_queue.h | 99 - .../include/base/task/thread_pool/sequence.h | 129 - .../base/task/thread_pool/service_thread.h | 36 - .../include/base/task/thread_pool/task.h | 45 - .../base/task/thread_pool/task_source.h | 325 - .../task/thread_pool/task_source_sort_key.h | 59 - .../base/task/thread_pool/task_tracker.h | 255 - .../task/thread_pool/task_tracker_posix.h | 56 - .../base/task/thread_pool/test_task_factory.h | 99 - .../base/task/thread_pool/test_utils.h | 166 - .../base/task/thread_pool/thread_group.h | 267 - .../base/task/thread_pool/thread_group_impl.h | 364 - .../task/thread_pool/thread_group_native.h | 84 - .../thread_pool/thread_group_native_mac.h | 54 - .../thread_pool/thread_group_native_win.h | 70 - .../base/task/thread_pool/thread_pool_impl.h | 208 - .../task/thread_pool/thread_pool_instance.h | 258 - .../base/task/thread_pool/tracked_ref.h | 181 - .../base/task/thread_pool/worker_thread.h | 244 - .../task/thread_pool/worker_thread_observer.h | 27 - .../task/thread_pool/worker_thread_stack.h | 66 - .../third/include/base/task_runner.h | 169 - .../third/include/base/task_runner_util.h | 56 - .../third/include/base/template_util.h | 372 - .../android/java_handler_thread_helpers.h | 42 - .../include/base/test/android/url_utils.h | 23 - .../base/test/async_results_test_values_win.h | 180 - .../third/include/base/test/bind.h | 89 - .../third/include/base/test/clang_profiling.h | 28 - .../third/include/base/test/copy_only_int.h | 61 - .../base/test/fake_iasync_operation_win.h | 145 - .../include/base/test/fontconfig_util_linux.h | 16 - .../base/test/gmock_callback_support.h | 197 - .../include/base/test/gmock_move_support.h | 20 - .../third/include/base/test/gtest_links.h | 28 - .../third/include/base/test/gtest_util.h | 112 - .../test/gtest_xml_unittest_result_printer.h | 65 - .../third/include/base/test/gtest_xml_util.h | 27 - .../third/include/base/test/icu_test_util.h | 59 - .../test/ios/google_test_runner_delegate.h | 19 - .../third/include/base/test/ios/wait_util.h | 90 - .../base/test/launcher/test_launcher.h | 336 - .../test/launcher/test_launcher_nacl_nonsfi.h | 17 - .../test/launcher/test_launcher_test_utils.h | 57 - .../base/test/launcher/test_launcher_tracer.h | 55 - .../include/base/test/launcher/test_result.h | 114 - .../base/test/launcher/test_results_tracker.h | 177 - .../base/test/launcher/unit_test_launcher.h | 162 - .../third/include/base/test/malloc_wrapper.h | 22 - .../base/test/metrics/histogram_enum_reader.h | 31 - .../base/test/metrics/histogram_tester.h | 188 - .../base/test/metrics/user_action_tester.h | 60 - .../third/include/base/test/mock_callback.h | 386 - .../base/test/mock_chrome_application_mac.h | 33 - .../base/test/mock_devices_changed_observer.h | 31 - .../include/base/test/mock_entropy_provider.h | 32 - .../third/include/base/test/mock_log.h | 100 - .../third/include/base/test/move_only_int.h | 68 - .../include/base/test/multiprocess_test.h | 151 - .../base/test/native_library_test_utils.h | 26 - .../include/base/test/null_task_runner.h | 44 - .../third/include/base/test/perf_log.h | 24 - .../third/include/base/test/perf_test_suite.h | 22 - .../include/base/test/perf_time_logger.h | 37 - .../base/test/power_monitor_test_base.h | 67 - .../base/test/scoped_chromeos_version_info.h | 33 - .../include/base/test/scoped_command_line.h | 34 - .../scoped_environment_variable_override.h | 45 - .../include/base/test/scoped_feature_list.h | 147 - .../test/scoped_field_trial_list_resetter.h | 36 - .../third/include/base/test/scoped_locale.h | 29 - .../base/test/scoped_logging_settings.h | 42 - .../base/test/scoped_mock_clock_override.h | 54 - ...coped_mock_time_message_loop_task_runner.h | 45 - .../base/test/scoped_os_info_override_win.h | 64 - .../include/base/test/scoped_path_override.h | 48 - .../base/test/scoped_run_loop_timeout.h | 108 - .../base/test/scoped_running_on_chromeos.h | 25 - .../sequenced_task_runner_test_template.h | 316 - .../include/base/test/simple_test_clock.h | 41 - .../base/test/simple_test_tick_clock.h | 41 - .../third/include/base/test/spin_wait.h | 52 - .../include/base/test/task_environment.h | 447 - .../base/test/task_runner_test_template.h | 170 - .../test/test_discardable_memory_allocator.h | 38 - .../third/include/base/test/test_file_util.h | 90 - .../third/include/base/test/test_io_thread.h | 56 - .../include/base/test/test_listener_ios.h | 17 - .../include/base/test/test_message_loop.h | 39 - .../base/test/test_mock_time_task_runner.h | 315 - .../include/base/test/test_pending_task.h | 78 - .../include/base/test/test_reg_util_win.h | 82 - .../base/test/test_shared_memory_util.h | 52 - .../include/base/test/test_shortcut_win.h | 30 - .../base/test/test_simple_task_runner.h | 97 - .../third/include/base/test/test_suite.h | 112 - .../include/base/test/test_support_android.h | 25 - .../include/base/test/test_support_ios.h | 27 - .../third/include/base/test/test_switches.h | 49 - .../third/include/base/test/test_timeouts.h | 63 - .../include/base/test/test_waitable_event.h | 40 - .../include/base/test/thread_test_helper.h | 50 - .../include/base/test/trace_event_analyzer.h | 841 - .../third/include/base/test/trace_to_file.h | 35 - .../include/base/test/values_test_util.h | 105 - .../include/base/test/with_feature_override.h | 58 - .../include/base/third_party/cityhash/city.h | 129 - .../third_party/cityhash_v103/src/city_v103.h | 104 - .../double-conversion/bignum-dtoa.h | 84 - .../double-conversion/bignum.h | 152 - .../double-conversion/cached-powers.h | 64 - .../double-conversion/diy-fp.h | 137 - .../double-conversion/double-conversion.h | 34 - .../double-conversion/double-to-string.h | 396 - .../double-conversion/fast-dtoa.h | 88 - .../double-conversion/fixed-dtoa.h | 56 - .../double-conversion/ieee.h | 402 - .../double-conversion/string-to-double.h | 226 - .../double-conversion/strtod.h | 50 - .../double-conversion/utils.h | 364 - .../dynamic_annotations/dynamic_annotations.h | 595 - .../include/base/third_party/icu/icu_utf.h | 567 - .../base/third_party/libevent/aix/config.h | 276 - .../third_party/libevent/aix/event-config.h | 284 - .../third_party/libevent/android/config.h | 266 - .../libevent/android/event-config.h | 281 - .../libevent/compat/sys/_libevent_time.h | 163 - .../third_party/libevent/compat/sys/queue.h | 488 - .../include/base/third_party/libevent/evdns.h | 528 - .../base/third_party/libevent/event-config.h | 24 - .../third_party/libevent/event-internal.h | 101 - .../include/base/third_party/libevent/event.h | 1212 -- .../base/third_party/libevent/evhttp.h | 375 - .../third_party/libevent/evrpc-internal.h | 87 - .../include/base/third_party/libevent/evrpc.h | 486 - .../base/third_party/libevent/evsignal.h | 52 - .../base/third_party/libevent/evutil.h | 186 - .../third_party/libevent/freebsd/config.h | 266 - .../libevent/freebsd/event-config.h | 284 - .../base/third_party/libevent/http-internal.h | 153 - .../base/third_party/libevent/linux/config.h | 266 - .../third_party/libevent/linux/event-config.h | 284 - .../include/base/third_party/libevent/log.h | 51 - .../base/third_party/libevent/mac/config.h | 266 - .../third_party/libevent/mac/event-config.h | 284 - .../base/third_party/libevent/min_heap.h | 149 - .../third_party/libevent/nacl_nonsfi/config.h | 273 - .../libevent/nacl_nonsfi/event-config.h | 290 - .../third_party/libevent/solaris/config.h | 266 - .../libevent/solaris/event-config.h | 284 - .../third_party/libevent/strlcpy-internal.h | 23 - .../base/third_party/libevent/test/regress.h | 45 - .../include/base/third_party/nspr/prtime.h | 263 - .../base/third_party/symbolize/config.h | 13 - .../base/third_party/symbolize/demangle.h | 85 - .../base/third_party/symbolize/glog/logging.h | 5 - .../third_party/symbolize/glog/raw_logging.h | 6 - .../base/third_party/symbolize/symbolize.h | 158 - .../base/third_party/symbolize/utilities.h | 11 - .../base/third_party/valgrind/memcheck.h | 279 - .../base/third_party/valgrind/valgrind.h | 4792 ------ .../base/third_party/xdg_mime/xdgmime.h | 133 - .../base/third_party/xdg_mime/xdgmimealias.h | 51 - .../base/third_party/xdg_mime/xdgmimecache.h | 81 - .../base/third_party/xdg_mime/xdgmimeglob.h | 70 - .../base/third_party/xdg_mime/xdgmimeicon.h | 50 - .../base/third_party/xdg_mime/xdgmimeint.h | 78 - .../base/third_party/xdg_mime/xdgmimemagic.h | 57 - .../base/third_party/xdg_mime/xdgmimeparent.h | 51 - .../xdg_user_dirs/xdg_user_dir_lookup.h | 33 - .../third/include/base/thread_annotations.h | 258 - .../include/base/threading/hang_watcher.h | 669 - .../include/base/threading/platform_thread.h | 287 - .../platform_thread_internal_posix.h | 62 - .../base/threading/platform_thread_win.h | 23 - .../base/threading/post_task_and_reply_impl.h | 46 - .../base/threading/scoped_blocking_call.h | 130 - .../threading/scoped_blocking_call_internal.h | 193 - .../base/threading/scoped_thread_priority.h | 91 - .../include/base/threading/sequence_bound.h | 727 - .../threading/sequence_local_storage_map.h | 90 - .../threading/sequence_local_storage_slot.h | 125 - .../threading/sequenced_task_runner_handle.h | 48 - .../include/base/threading/simple_thread.h | 231 - .../third/include/base/threading/thread.h | 341 - .../include/base/threading/thread_checker.h | 172 - .../base/threading/thread_checker_impl.h | 95 - .../base/threading/thread_collision_warner.h | 252 - .../base/threading/thread_id_name_manager.h | 94 - .../include/base/threading/thread_local.h | 136 - .../base/threading/thread_local_internal.h | 81 - .../base/threading/thread_local_storage.h | 175 - .../base/threading/thread_restrictions.h | 750 - .../threading/thread_task_runner_handle.h | 123 - .../base/threading/threading_features.h | 27 - .../third/include/base/threading/watchdog.h | 96 - .../third/include/base/time/clock.h | 40 - .../third/include/base/time/default_clock.h | 28 - .../include/base/time/default_tick_clock.h | 32 - .../third/include/base/time/tick_clock.h | 45 - .../third/include/base/time/time.h | 1165 -- .../third/include/base/time/time_override.h | 83 - .../third/include/base/time/time_to_iso8601.h | 20 - .../third/include/base/timer/elapsed_timer.h | 73 - .../include/base/timer/hi_res_timer_manager.h | 51 - .../third/include/base/timer/lap_timer.h | 87 - .../third/include/base/timer/mock_timer.h | 76 - .../third/include/base/timer/timer.h | 392 - .../webrtc_demo/third/include/base/token.h | 88 - .../application_state_proto_android.h | 32 - .../base/trace_event/auto_open_close_event.h | 80 - .../include/base/trace_event/base_tracing.h | 33 - .../base/trace_event/base_tracing_forward.h | 47 - .../include/base/trace_event/blame_context.h | 142 - .../base/trace_event/builtin_categories.h | 526 - .../base/trace_event/category_registry.h | 134 - .../base/trace_event/cfi_backtrace_android.h | 175 - .../trace_event/common/trace_event_common.h | 1123 -- .../trace_event/cpufreq_monitor_android.h | 98 - .../base/trace_event/event_name_filter.h | 46 - .../include/base/trace_event/heap_profiler.h | 134 - .../heap_profiler_allocation_context.h | 132 - ...heap_profiler_allocation_context_tracker.h | 145 - .../trace_event/heap_profiler_event_filter.h | 38 - .../base/trace_event/interned_args_helper.h | 93 - .../java_heap_dump_provider_android.h | 36 - .../include/base/trace_event/log_message.h | 49 - .../base/trace_event/malloc_dump_provider.h | 72 - .../base/trace_event/memory_allocator_dump.h | 164 - .../trace_event/memory_allocator_dump_guid.h | 55 - .../base/trace_event/memory_dump_manager.h | 270 - .../memory_dump_manager_test_utils.h | 38 - .../base/trace_event/memory_dump_provider.h | 51 - .../trace_event/memory_dump_provider_info.h | 108 - .../trace_event/memory_dump_request_args.h | 110 - .../base/trace_event/memory_dump_scheduler.h | 78 - .../memory_infra_background_allowlist.h | 33 - .../trace_event/memory_pressure_level_proto.h | 27 - .../base/trace_event/memory_usage_estimator.h | 665 - .../base/trace_event/optional_trace_event.h | 31 - .../base/trace_event/process_memory_dump.h | 295 - .../base/trace_event/task_execution_macros.h | 44 - .../trace_event/thread_instruction_count.h | 59 - .../base/trace_event/trace_arguments.h | 743 - .../include/base/trace_event/trace_buffer.h | 130 - .../include/base/trace_event/trace_category.h | 109 - .../include/base/trace_event/trace_config.h | 350 - .../trace_config_category_filter.h | 81 - .../trace_config_memory_test_util.h | 151 - .../trace_event/trace_conversion_helper.h | 253 - .../include/base/trace_event/trace_event.h | 806 - .../trace_event/trace_event_etw_export_win.h | 99 - .../base/trace_event/trace_event_filter.h | 51 - .../trace_event_filter_test_utils.h | 52 - .../base/trace_event/trace_event_impl.h | 198 - .../trace_event/trace_event_memory_overhead.h | 95 - .../base/trace_event/trace_event_stub.h | 239 - .../base/trace_event/trace_id_helper.h | 25 - .../include/base/trace_event/trace_log.h | 591 - .../trace_event/trace_logging_minimal_win.h | 393 - .../include/base/trace_event/traced_value.h | 430 - .../base/trace_event/traced_value_support.h | 174 - .../include/base/trace_event/tracing_agent.h | 96 - .../include/base/trace_event/typed_macros.h | 101 - .../typed_macros_embedder_support.h | 112 - .../base/trace_event/typed_macros_internal.h | 206 - .../base/tracing/perfetto_task_runner.h | 73 - .../third/include/base/tracing/tracing_tls.h | 39 - .../third/include/base/traits_bag.h | 260 - .../webrtc_demo/third/include/base/tuple.h | 112 - .../third/include/base/types/pass_key.h | 48 - .../third/include/base/types/strong_alias.h | 144 - .../third/include/base/unguessable_token.h | 125 - .../base/updateable_sequenced_task_runner.h | 30 - .../fake_memory_pressure_monitor.h | 40 - .../memory_pressure/memory_pressure_voter.h | 119 - .../multi_source_memory_pressure_monitor.h | 86 - .../system_memory_pressure_evaluator.h | 56 - ...system_memory_pressure_evaluator_fuchsia.h | 53 - .../system_memory_pressure_evaluator_linux.h | 112 - .../system_memory_pressure_evaluator_mac.h | 62 - .../system_memory_pressure_evaluator_win.h | 161 - .../base/util/timer/wall_clock_timer.h | 112 - .../include/base/util/type_safety/id_type.h | 117 - .../base/util/type_safety/token_type.h | 53 - .../include/base/util/values/values_util.h | 62 - .../third/include/base/value_iterators.h | 194 - .../webrtc_demo/third/include/base/values.h | 1055 -- .../webrtc_demo/third/include/base/version.h | 77 - .../webrtc_demo/third/include/base/vlog.h | 76 - .../third/include/base/win/async_operation.h | 161 - .../webrtc_demo/third/include/base/win/atl.h | 38 - .../third/include/base/win/atl_throw.h | 43 - .../include/base/win/com_init_balancer.h | 73 - .../include/base/win/com_init_check_hook.h | 54 - .../third/include/base/win/com_init_util.h | 41 - .../third/include/base/win/core_winrt_util.h | 55 - .../third/include/base/win/current_module.h | 17 - .../third/include/base/win/dispatch_stub.h | 43 - .../win/embedded_i18n/language_selector.h | 76 - .../third/include/base/win/enum_variant.h | 49 - .../include/base/win/event_trace_consumer.h | 150 - .../include/base/win/event_trace_controller.h | 153 - .../include/base/win/event_trace_provider.h | 195 - .../third/include/base/win/hstring_compare.h | 28 - .../include/base/win/hstring_reference.h | 73 - .../webrtc_demo/third/include/base/win/i18n.h | 33 - .../include/base/win/iat_patch_function.h | 78 - .../webrtc_demo/third/include/base/win/map.h | 431 - .../third/include/base/win/message_window.h | 77 - .../third/include/base/win/object_watcher.h | 140 - .../third/include/base/win/patch_util.h | 25 - .../third/include/base/win/pe_image.h | 313 - .../third/include/base/win/pe_image_reader.h | 174 - .../include/base/win/post_async_results.h | 130 - .../include/base/win/process_startup_helper.h | 26 - .../third/include/base/win/propvarutil.h | 19 - .../third/include/base/win/reference.h | 49 - .../third/include/base/win/registry.h | 257 - .../third/include/base/win/resource_util.h | 40 - .../third/include/base/win/scoped_bstr.h | 98 - .../third/include/base/win/scoped_co_mem.h | 62 - .../include/base/win/scoped_com_initializer.h | 77 - .../third/include/base/win/scoped_devinfo.h | 24 - .../include/base/win/scoped_gdi_object.h | 45 - .../third/include/base/win/scoped_handle.h | 194 - .../include/base/win/scoped_handle_verifier.h | 109 - .../third/include/base/win/scoped_hdc.h | 70 - .../third/include/base/win/scoped_hglobal.h | 52 - .../third/include/base/win/scoped_hstring.h | 79 - .../base/win/scoped_process_information.h | 75 - .../include/base/win/scoped_propvariant.h | 54 - .../third/include/base/win/scoped_safearray.h | 220 - .../include/base/win/scoped_select_object.h | 42 - .../third/include/base/win/scoped_variant.h | 188 - .../win/scoped_windows_thread_environment.h | 28 - .../base/win/scoped_winrt_initializer.h | 48 - .../third/include/base/win/shlwapi.h | 19 - .../third/include/base/win/shortcut.h | 181 - .../third/include/base/win/sphelper.h | 19 - .../include/base/win/startup_information.h | 53 - .../third/include/base/win/static_constants.h | 21 - .../third/include/base/win/variant_util.h | 151 - .../third/include/base/win/variant_vector.h | 140 - .../third/include/base/win/vector.h | 403 - .../third/include/base/win/win_util.h | 256 - .../third/include/base/win/wincrypt_shim.h | 28 - .../third/include/base/win/windows_full.h | 13 - .../third/include/base/win/windows_types.h | 280 - .../third/include/base/win/windows_version.h | 206 - .../third/include/base/win/windowsx_shim.h | 28 - .../base/win/winrt_foundation_helpers.h | 151 - .../include/base/win/winrt_storage_util.h | 34 - .../webrtc_demo/third/include/base/win/wmi.h | 89 - .../include/base/win/wrapped_window_proc.h | 83 - .../call/adaptation/adaptation_constraint.h | 41 - .../adaptation/broadcast_resource_listener.h | 75 - .../degradation_preference_provider.h | 27 - .../call/adaptation/encoder_settings.h | 48 - .../resource_adaptation_processor.h | 168 - .../resource_adaptation_processor_interface.h | 69 - .../test/fake_adaptation_constraint.h | 41 - .../test/fake_frame_rate_provider.h | 69 - .../call/adaptation/test/fake_resource.h | 44 - .../fake_video_stream_input_state_provider.h | 32 - .../adaptation/test/mock_resource_listener.h | 31 - .../adaptation/video_source_restrictions.h | 86 - .../call/adaptation/video_stream_adapter.h | 269 - .../adaptation/video_stream_input_state.h | 53 - .../video_stream_input_state_provider.h | 41 - .../third/include/call/audio_receive_stream.h | 212 - .../third/include/call/audio_send_stream.h | 196 - .../third/include/call/audio_sender.h | 30 - .../third/include/call/audio_state.h | 69 - .../third/include/call/bitrate_allocator.h | 170 - .../webrtc_demo/third/include/call/call.h | 166 - .../third/include/call/call_config.h | 76 - .../third/include/call/call_factory.h | 38 - .../third/include/call/degraded_call.h | 175 - .../third/include/call/fake_network_pipe.h | 237 - .../include/call/flexfec_receive_stream.h | 86 - .../call/flexfec_receive_stream_impl.h | 67 - .../third/include/call/packet_receiver.h | 69 - .../third/include/call/rampup_tests.h | 167 - .../include/call/receive_time_calculator.h | 61 - .../include/call/rtp_bitrate_configurator.h | 76 - .../third/include/call/rtp_config.h | 172 - .../third/include/call/rtp_demuxer.h | 198 - .../include/call/rtp_packet_sink_interface.h | 26 - .../third/include/call/rtp_payload_params.h | 118 - .../call/rtp_stream_receiver_controller.h | 77 - ...rtp_stream_receiver_controller_interface.h | 47 - .../call/rtp_transport_controller_send.h | 209 - .../rtp_transport_controller_send_interface.h | 157 - .../third/include/call/rtp_video_sender.h | 227 - .../include/call/rtp_video_sender_interface.h | 73 - .../third/include/call/rtx_receive_stream.h | 51 - .../third/include/call/simulated_network.h | 125 - .../include/call/simulated_packet_receiver.h | 42 - .../webrtc_demo/third/include/call/syncable.h | 46 - .../call/test/mock_audio_send_stream.h | 48 - .../call/test/mock_bitrate_allocator.h | 32 - .../test/mock_rtp_packet_sink_interface.h | 25 - .../test/mock_rtp_transport_controller_send.h | 105 - .../webrtc_demo/third/include/call/version.h | 25 - .../third/include/call/video_receive_stream.h | 336 - .../third/include/call/video_send_stream.h | 248 - .../third/include/ci/absl_alternate_options.h | 29 - .../include/common_audio/audio_converter.h | 73 - .../include/common_audio/channel_buffer.h | 215 - .../third/include/common_audio/fir_filter.h | 30 - .../include/common_audio/fir_filter_avx2.h | 41 - .../third/include/common_audio/fir_filter_c.h | 38 - .../include/common_audio/fir_filter_factory.h | 32 - .../include/common_audio/fir_filter_neon.h | 39 - .../include/common_audio/fir_filter_sse.h | 41 - .../include/common_audio/include/audio_util.h | 214 - .../mocks/mock_smoothing_filter.h | 28 - .../third/include/common_audio/real_fourier.h | 76 - .../include/common_audio/real_fourier_ooura.h | 45 - .../resampler/include/push_resampler.h | 59 - .../resampler/include/resampler.h | 99 - .../resampler/push_sinc_resampler.h | 81 - .../common_audio/resampler/sinc_resampler.h | 181 - .../sinusoidal_linear_chirp_source.h | 55 - .../third/include/common_audio/ring_buffer.h | 79 - .../signal_processing/complex_fft_tables.h | 132 - .../dot_product_with_scale.h | 40 - .../signal_processing/include/real_fft.h | 96 - .../include/signal_processing_library.h | 1635 -- .../signal_processing/include/spl_inl.h | 153 - .../signal_processing/include/spl_inl_armv7.h | 136 - .../signal_processing/include/spl_inl_mips.h | 204 - .../resample_by_2_internal.h | 60 - .../include/common_audio/smoothing_filter.h | 75 - .../ooura/fft_size_128/ooura_fft.h | 64 - .../fft_size_128/ooura_fft_tables_common.h | 54 - .../fft_size_128/ooura_fft_tables_neon_sse2.h | 98 - .../third_party/ooura/fft_size_256/fft4g.h | 21 - .../spl_sqrt_floor/spl_sqrt_floor.h | 29 - .../include/common_audio/vad/include/vad.h | 50 - .../common_audio/vad/include/webrtc_vad.h | 87 - .../include/common_audio/vad/mock/mock_vad.h | 33 - .../third/include/common_audio/vad/vad_core.h | 114 - .../include/common_audio/vad/vad_filterbank.h | 45 - .../third/include/common_audio/vad/vad_gmm.h | 39 - .../third/include/common_audio/vad/vad_sp.h | 54 - .../include/common_audio/vad/vad_unittest.h | 48 - .../third/include/common_audio/wav_file.h | 115 - .../third/include/common_audio/wav_header.h | 90 - .../include/common_audio/window_generator.h | 31 - .../third/include/common_video/frame_counts.h | 32 - .../common_video/frame_rate_estimator.h | 60 - .../generic_frame_info.h | 63 - .../common_video/h264/h264_bitstream_parser.h | 58 - .../include/common_video/h264/h264_common.h | 90 - .../include/common_video/h264/pps_parser.h | 62 - .../common_video/h264/profile_level_id.h | 19 - .../include/common_video/h264/sps_parser.h | 55 - .../common_video/h264/sps_vui_rewriter.h | 72 - .../common_video/include/bitrate_adjuster.h | 92 - .../include/incoming_video_stream.h | 48 - .../include/quality_limitation_reason.h | 26 - .../common_video/include/video_frame_buffer.h | 83 - .../include/video_frame_buffer_pool.h | 75 - .../libyuv/include/webrtc_libyuv.h | 150 - .../include/common_video/test/utilities.h | 26 - .../common_video/video_render_frames.h | 55 - .../third/include/google/protobuf/any.h | 149 - .../third/include/google/protobuf/any.pb.h | 408 - .../third/include/google/protobuf/api.pb.h | 1497 -- .../third/include/google/protobuf/arena.h | 736 - .../include/google/protobuf/arena_impl.h | 388 - .../include/google/protobuf/arena_test_util.h | 99 - .../include/google/protobuf/arenastring.h | 304 - .../protobuf/compiler/annotation_test_util.h | 115 - .../google/protobuf/compiler/code_generator.h | 202 - .../compiler/command_line_interface.h | 463 - .../google/protobuf/compiler/cpp/cpp_enum.h | 105 - .../protobuf/compiler/cpp/cpp_enum_field.h | 113 - .../protobuf/compiler/cpp/cpp_extension.h | 91 - .../google/protobuf/compiler/cpp/cpp_field.h | 231 - .../google/protobuf/compiler/cpp/cpp_file.h | 206 - .../protobuf/compiler/cpp/cpp_generator.h | 106 - .../protobuf/compiler/cpp/cpp_helpers.h | 900 -- .../protobuf/compiler/cpp/cpp_map_field.h | 70 - .../protobuf/compiler/cpp/cpp_message.h | 218 - .../protobuf/compiler/cpp/cpp_message_field.h | 132 - .../compiler/cpp/cpp_message_layout_helper.h | 61 - .../protobuf/compiler/cpp/cpp_options.h | 79 - .../compiler/cpp/cpp_padding_optimizer.h | 64 - .../compiler/cpp/cpp_primitive_field.h | 112 - .../protobuf/compiler/cpp/cpp_service.h | 122 - .../protobuf/compiler/cpp/cpp_string_field.h | 130 - .../protobuf/compiler/cpp/cpp_unittest.h | 51 - .../protobuf/compiler/cpp/cpp_unittest.inc | 2231 --- .../compiler/csharp/csharp_doc_comment.h | 51 - .../protobuf/compiler/csharp/csharp_enum.h | 66 - .../compiler/csharp/csharp_enum_field.h | 83 - .../compiler/csharp/csharp_field_base.h | 111 - .../compiler/csharp/csharp_generator.h | 70 - .../protobuf/compiler/csharp/csharp_helpers.h | 195 - .../compiler/csharp/csharp_map_field.h | 75 - .../protobuf/compiler/csharp/csharp_message.h | 94 - .../compiler/csharp/csharp_message_field.h | 93 - .../protobuf/compiler/csharp/csharp_names.h | 109 - .../protobuf/compiler/csharp/csharp_options.h | 81 - .../compiler/csharp/csharp_primitive_field.h | 97 - .../compiler/csharp/csharp_reflection_class.h | 75 - .../csharp/csharp_repeated_enum_field.h | 79 - .../csharp/csharp_repeated_message_field.h | 79 - .../csharp/csharp_repeated_primitive_field.h | 75 - .../csharp/csharp_source_generator_base.h | 72 - .../compiler/csharp/csharp_wrapper_field.h | 99 - .../google/protobuf/compiler/importer.h | 336 - .../protobuf/compiler/java/java_context.h | 113 - .../protobuf/compiler/java/java_doc_comment.h | 101 - .../google/protobuf/compiler/java/java_enum.h | 100 - .../protobuf/compiler/java/java_enum_field.h | 157 - .../compiler/java/java_enum_field_lite.h | 136 - .../protobuf/compiler/java/java_enum_lite.h | 98 - .../protobuf/compiler/java/java_extension.h | 115 - .../compiler/java/java_extension_lite.h | 75 - .../protobuf/compiler/java/java_field.h | 188 - .../google/protobuf/compiler/java/java_file.h | 119 - .../protobuf/compiler/java/java_generator.h | 76 - .../compiler/java/java_generator_factory.h | 103 - .../protobuf/compiler/java/java_helpers.h | 458 - .../protobuf/compiler/java/java_map_field.h | 80 - .../compiler/java/java_map_field_lite.h | 71 - .../protobuf/compiler/java/java_message.h | 145 - .../compiler/java/java_message_builder.h | 89 - .../compiler/java/java_message_builder_lite.h | 86 - .../compiler/java/java_message_field.h | 175 - .../compiler/java/java_message_field_lite.h | 136 - .../compiler/java/java_message_lite.h | 82 - .../compiler/java/java_name_resolver.h | 127 - .../protobuf/compiler/java/java_names.h | 112 - .../protobuf/compiler/java/java_options.h | 73 - .../compiler/java/java_primitive_field.h | 158 - .../compiler/java/java_primitive_field_lite.h | 137 - .../protobuf/compiler/java/java_service.h | 139 - .../java/java_shared_code_generator.h | 90 - .../compiler/java/java_string_field.h | 156 - .../compiler/java/java_string_field_lite.h | 135 - .../protobuf/compiler/js/js_generator.h | 339 - .../compiler/js/well_known_types_embed.h | 43 - .../protobuf/compiler/mock_code_generator.h | 135 - .../compiler/objectivec/objectivec_enum.h | 71 - .../objectivec/objectivec_enum_field.h | 78 - .../objectivec/objectivec_extension.h | 67 - .../compiler/objectivec/objectivec_field.h | 194 - .../compiler/objectivec/objectivec_file.h | 84 - .../objectivec/objectivec_generator.h | 79 - .../compiler/objectivec/objectivec_helpers.h | 329 - .../objectivec/objectivec_map_field.h | 71 - .../compiler/objectivec/objectivec_message.h | 99 - .../objectivec/objectivec_message_field.h | 87 - .../objectivec/objectivec_nsobject_methods.h | 197 - .../compiler/objectivec/objectivec_oneof.h | 76 - .../objectivec/objectivec_primitive_field.h | 95 - .../google/protobuf/compiler/package_info.h | 63 - .../include/google/protobuf/compiler/parser.h | 600 - .../protobuf/compiler/php/php_generator.h | 92 - .../include/google/protobuf/compiler/plugin.h | 94 - .../google/protobuf/compiler/plugin.pb.h | 1893 --- .../compiler/python/python_generator.h | 182 - .../protobuf/compiler/ruby/ruby_generator.h | 67 - .../include/google/protobuf/compiler/scc.h | 164 - .../google/protobuf/compiler/subprocess.h | 113 - .../google/protobuf/compiler/zip_writer.h | 63 - .../include/google/protobuf/descriptor.h | 2324 --- .../include/google/protobuf/descriptor.pb.h | 12926 ---------------- .../google/protobuf/descriptor_database.h | 394 - .../include/google/protobuf/duration.pb.h | 276 - .../include/google/protobuf/dynamic_message.h | 239 - .../third/include/google/protobuf/empty.pb.h | 212 - .../include/google/protobuf/extension_set.h | 1588 -- .../google/protobuf/extension_set_inl.h | 276 - .../include/google/protobuf/field_mask.pb.h | 314 - .../protobuf/generated_enum_reflection.h | 98 - .../google/protobuf/generated_enum_util.h | 83 - .../protobuf/generated_message_reflection.h | 339 - .../protobuf/generated_message_table_driven.h | 339 - .../generated_message_table_driven_lite.h | 876 -- .../google/protobuf/generated_message_util.h | 257 - .../third/include/google/protobuf/has_bits.h | 116 - .../google/protobuf/implicit_weak_message.h | 190 - .../google/protobuf/inlined_string_field.h | 260 - .../include/google/protobuf/io/coded_stream.h | 1714 -- .../include/google/protobuf/io/gzip_stream.h | 202 - .../include/google/protobuf/io/io_win32.h | 139 - .../include/google/protobuf/io/package_info.h | 53 - .../include/google/protobuf/io/printer.h | 385 - .../third/include/google/protobuf/io/strtod.h | 55 - .../include/google/protobuf/io/tokenizer.h | 413 - .../google/protobuf/io/zero_copy_stream.h | 253 - .../protobuf/io/zero_copy_stream_impl.h | 337 - .../protobuf/io/zero_copy_stream_impl_lite.h | 406 - .../third/include/google/protobuf/map.h | 1339 -- .../third/include/google/protobuf/map_entry.h | 160 - .../include/google/protobuf/map_entry_lite.h | 654 - .../third/include/google/protobuf/map_field.h | 894 -- .../include/google/protobuf/map_field_inl.h | 367 - .../include/google/protobuf/map_field_lite.h | 183 - .../google/protobuf/map_lite_test_util.h | 80 - .../include/google/protobuf/map_test_util.h | 1638 -- .../include/google/protobuf/map_test_util.inc | 271 - .../google/protobuf/map_test_util_impl.h | 476 - .../google/protobuf/map_type_handler.h | 688 - .../third/include/google/protobuf/message.h | 1358 -- .../include/google/protobuf/message_lite.h | 603 - .../google/protobuf/message_unittest.inc | 633 - .../third/include/google/protobuf/metadata.h | 36 - .../include/google/protobuf/metadata_lite.h | 248 - .../include/google/protobuf/package_info.h | 66 - .../include/google/protobuf/parse_context.h | 805 - .../third/include/google/protobuf/port.h | 43 - .../include/google/protobuf/port_def.inc | 536 - .../include/google/protobuf/port_undef.inc | 110 - .../google/protobuf/proto3_lite_unittest.inc | 135 - .../include/google/protobuf/reflection.h | 563 - .../google/protobuf/reflection_internal.h | 363 - .../include/google/protobuf/reflection_ops.h | 91 - .../include/google/protobuf/repeated_field.h | 2846 ---- .../third/include/google/protobuf/service.h | 293 - .../google/protobuf/source_context.pb.h | 294 - .../third/include/google/protobuf/struct.pb.h | 1167 -- .../google/protobuf/stubs/bytestream.h | 351 - .../include/google/protobuf/stubs/callback.h | 583 - .../include/google/protobuf/stubs/casts.h | 139 - .../include/google/protobuf/stubs/common.h | 202 - .../include/google/protobuf/stubs/fastmem.h | 157 - .../include/google/protobuf/stubs/hash.h | 122 - .../include/google/protobuf/stubs/int128.h | 387 - .../include/google/protobuf/stubs/logging.h | 241 - .../include/google/protobuf/stubs/macros.h | 120 - .../include/google/protobuf/stubs/map_util.h | 769 - .../include/google/protobuf/stubs/mathutil.h | 162 - .../include/google/protobuf/stubs/mutex.h | 186 - .../include/google/protobuf/stubs/once.h | 55 - .../google/protobuf/stubs/platform_macros.h | 134 - .../include/google/protobuf/stubs/port.h | 418 - .../include/google/protobuf/stubs/status.h | 130 - .../google/protobuf/stubs/status_macros.h | 89 - .../include/google/protobuf/stubs/statusor.h | 272 - .../include/google/protobuf/stubs/stl_util.h | 71 - .../google/protobuf/stubs/stringpiece.h | 489 - .../google/protobuf/stubs/stringprintf.h | 83 - .../include/google/protobuf/stubs/strutil.h | 947 -- .../google/protobuf/stubs/substitute.h | 174 - .../google/protobuf/stubs/template_util.h | 138 - .../include/google/protobuf/stubs/time.h | 80 - .../third/include/google/protobuf/test_util.h | 1263 -- .../include/google/protobuf/test_util.inc | 2406 --- .../include/google/protobuf/test_util2.h | 82 - .../include/google/protobuf/test_util_lite.h | 101 - .../include/google/protobuf/testing/file.h | 105 - .../google/protobuf/testing/googletest.h | 104 - .../include/google/protobuf/text_format.h | 646 - .../include/google/protobuf/timestamp.pb.h | 276 - .../third/include/google/protobuf/type.pb.h | 2602 ---- .../google/protobuf/unknown_field_set.h | 411 - .../protobuf/util/delimited_message_util.h | 108 - .../google/protobuf/util/field_comparator.h | 261 - .../google/protobuf/util/field_mask_util.h | 261 - .../google/protobuf/util/internal/constants.h | 99 - .../google/protobuf/util/internal/datapiece.h | 220 - .../internal/default_value_objectwriter.h | 331 - .../protobuf/util/internal/error_listener.h | 109 - .../util/internal/expecting_objectwriter.h | 247 - .../util/internal/field_mask_utility.h | 74 - .../protobuf/util/internal/json_escaping.h | 96 - .../util/internal/json_objectwriter.h | 275 - .../util/internal/json_stream_parser.h | 302 - .../protobuf/util/internal/location_tracker.h | 69 - .../util/internal/mock_error_listener.h | 68 - .../util/internal/object_location_tracker.h | 64 - .../protobuf/util/internal/object_source.h | 84 - .../protobuf/util/internal/object_writer.h | 147 - .../protobuf/util/internal/proto_writer.h | 378 - .../util/internal/protostream_objectsource.h | 342 - .../util/internal/protostream_objectwriter.h | 433 - .../util/internal/structured_objectwriter.h | 119 - .../google/protobuf/util/internal/type_info.h | 97 - .../util/internal/type_info_test_helper.h | 95 - .../google/protobuf/util/internal/utility.h | 203 - .../include/google/protobuf/util/json_util.h | 203 - .../protobuf/util/message_differencer.h | 931 -- .../google/protobuf/util/package_info.h | 46 - .../include/google/protobuf/util/time_util.h | 312 - .../google/protobuf/util/type_resolver.h | 75 - .../google/protobuf/util/type_resolver_util.h | 57 - .../include/google/protobuf/wire_format.h | 407 - .../google/protobuf/wire_format_lite.h | 1866 --- .../include/google/protobuf/wrappers.pb.h | 1671 -- .../webrtc/webrtc_demo/third/include/libyuv.h | 33 - .../third/include/libyuv/basic_types.h | 68 - .../third/include/libyuv/compare.h | 111 - .../third/include/libyuv/compare_row.h | 141 - .../third/include/libyuv/convert.h | 847 - .../third/include/libyuv/convert_argb.h | 1746 --- .../third/include/libyuv/convert_from.h | 203 - .../third/include/libyuv/convert_from_argb.h | 311 - .../webrtc_demo/third/include/libyuv/cpu_id.h | 122 - .../third/include/libyuv/macros_msa.h | 236 - .../third/include/libyuv/mjpeg_decoder.h | 195 - .../third/include/libyuv/planar_functions.h | 990 -- .../webrtc_demo/third/include/libyuv/rotate.h | 182 - .../third/include/libyuv/rotate_argb.h | 37 - .../third/include/libyuv/rotate_row.h | 223 - .../webrtc_demo/third/include/libyuv/row.h | 4683 ------ .../webrtc_demo/third/include/libyuv/scale.h | 254 - .../third/include/libyuv/scale_argb.h | 76 - .../third/include/libyuv/scale_row.h | 1673 -- .../third/include/libyuv/scale_uv.h | 51 - .../third/include/libyuv/version.h | 16 - .../third/include/libyuv/video_common.h | 218 - .../rtc_event_log/encoder/blob_encoding.h | 53 - .../rtc_event_log/encoder/delta_encoding.h | 48 - .../encoder/rtc_event_log_encoder.h | 36 - .../encoder/rtc_event_log_encoder_common.h | 93 - .../encoder/rtc_event_log_encoder_legacy.h | 107 - .../rtc_event_log_encoder_new_format.h | 157 - .../logging/rtc_event_log/encoder/var_int.h | 52 - .../events/rtc_event_alr_state.h | 53 - .../rtc_event_audio_network_adaptation.h | 59 - .../events/rtc_event_audio_playout.h | 56 - .../rtc_event_audio_receive_stream_config.h | 57 - .../rtc_event_audio_send_stream_config.h | 55 - .../events/rtc_event_bwe_update_delay_based.h | 65 - .../events/rtc_event_bwe_update_loss_based.h | 70 - .../events/rtc_event_dtls_transport_state.h | 53 - .../events/rtc_event_dtls_writable_state.h | 53 - .../events/rtc_event_frame_decoded.h | 73 - .../events/rtc_event_generic_ack_received.h | 100 - .../rtc_event_generic_packet_received.h | 65 - .../events/rtc_event_generic_packet_sent.h | 90 - .../events/rtc_event_ice_candidate_pair.h | 79 - .../rtc_event_ice_candidate_pair_config.h | 133 - .../events/rtc_event_probe_cluster_created.h | 76 - .../events/rtc_event_probe_result_failure.h | 68 - .../events/rtc_event_probe_result_success.h | 61 - .../events/rtc_event_remote_estimate.h | 48 - .../events/rtc_event_route_change.h | 58 - .../events/rtc_event_rtcp_packet_incoming.h | 46 - .../events/rtc_event_rtcp_packet_outgoing.h | 46 - .../events/rtc_event_rtp_packet_incoming.h | 55 - .../events/rtc_event_rtp_packet_outgoing.h | 59 - .../rtc_event_video_receive_stream_config.h | 57 - .../rtc_event_video_send_stream_config.h | 55 - .../rtc_event_log/fake_rtc_event_log.h | 42 - .../fake_rtc_event_log_factory.h | 37 - .../logging/rtc_event_log/ice_logger.h | 56 - .../logging/rtc_event_log/logged_events.h | 344 - .../rtc_event_log/mock/mock_rtc_event_log.h | 42 - .../output/rtc_event_log_output_file.h | 19 - .../rtc_event_log/rtc_event_log_impl.h | 94 - .../rtc_event_log/rtc_event_log_parser.h | 943 -- .../rtc_event_log_unittest_helper.h | 330 - .../rtc_event_log/rtc_event_processor.h | 131 - .../logging/rtc_event_log/rtc_stream_config.h | 61 - .../media/base/adapted_video_track_source.h | 100 - .../third/include/media/base/audio_source.h | 58 - .../third/include/media/base/codec.h | 253 - .../third/include/media/base/delayable.h | 38 - .../include/media/base/fake_frame_source.h | 50 - .../include/media/base/fake_media_engine.h | 633 - .../media/base/fake_network_interface.h | 233 - .../third/include/media/base/fake_rtp.h | 301 - .../include/media/base/fake_video_renderer.h | 151 - .../media/base/h264_profile_level_id.h | 116 - .../third/include/media/base/media_channel.h | 1042 -- .../third/include/media/base/media_config.h | 87 - .../include/media/base/media_constants.h | 154 - .../third/include/media/base/media_engine.h | 184 - .../include/media/base/rid_description.h | 93 - .../include/media/base/rtp_data_engine.h | 111 - .../third/include/media/base/rtp_utils.h | 100 - .../third/include/media/base/sdp_fmtp_utils.h | 32 - .../third/include/media/base/stream_params.h | 330 - .../third/include/media/base/test_utils.h | 68 - .../third/include/media/base/turn_utils.h | 32 - .../third/include/media/base/video_adapter.h | 155 - .../include/media/base/video_broadcaster.h | 69 - .../third/include/media/base/video_common.h | 224 - .../include/media/base/video_source_base.h | 49 - .../third/include/media/base/vp9_profile.h | 53 - .../third/include/media/engine/adm_helpers.h | 25 - .../media/engine/encoder_simulcast_proxy.h | 68 - .../media/engine/fake_video_codec_factory.h | 53 - .../include/media/engine/fake_webrtc_call.h | 395 - .../media/engine/fake_webrtc_video_engine.h | 142 - .../media/engine/internal_decoder_factory.h | 33 - .../media/engine/internal_encoder_factory.h | 35 - .../media/engine/multiplex_codec_factory.h | 79 - .../media/engine/null_webrtc_video_engine.h | 59 - .../media/engine/payload_type_mapper.h | 57 - .../third/include/media/engine/simulcast.h | 72 - .../media/engine/simulcast_encoder_adapter.h | 185 - .../media/engine/unhandled_packets_buffer.h | 55 - .../media/engine/webrtc_media_engine.h | 82 - .../engine/webrtc_media_engine_defaults.h | 24 - .../media/engine/webrtc_video_engine.h | 698 - .../media/engine/webrtc_voice_engine.h | 363 - .../third/include/media/sctp/sctp_transport.h | 308 - .../media/sctp/sctp_transport_internal.h | 147 - .../async_audio_processing.h | 76 - .../audio_coding/acm2/acm_receive_test.h | 98 - .../modules/audio_coding/acm2/acm_receiver.h | 230 - .../modules/audio_coding/acm2/acm_remixing.h | 34 - .../modules/audio_coding/acm2/acm_resampler.h | 41 - .../modules/audio_coding/acm2/acm_send_test.h | 90 - .../audio_coding/acm2/call_statistics.h | 64 - .../audio_network_adaptor_impl.h | 89 - .../bitrate_controller.h | 58 - .../channel_controller.h | 57 - .../audio_network_adaptor/controller.h | 42 - .../controller_manager.h | 123 - .../audio_network_adaptor/debug_dump_writer.h | 55 - .../audio_network_adaptor/dtx_controller.h | 51 - .../audio_network_adaptor/event_log_writer.h | 42 - .../fec_controller_plr_based.h | 74 - .../frame_length_controller.h | 93 - .../frame_length_controller_v2.h | 44 - .../include/audio_network_adaptor.h | 49 - .../include/audio_network_adaptor_config.h | 51 - .../mock/mock_audio_network_adaptor.h | 57 - .../mock/mock_controller.h | 35 - .../mock/mock_controller_manager.h | 34 - .../mock/mock_debug_dump_writer.h | 44 - .../util/threshold_curve.h | 118 - .../audio_coding/codecs/audio_decoder.h | 20 - .../audio_coding/codecs/audio_encoder.h | 20 - .../codecs/cng/audio_encoder_cng.h | 49 - .../audio_coding/codecs/cng/webrtc_cng.h | 99 - .../codecs/g711/audio_decoder_pcm.h | 76 - .../codecs/g711/audio_encoder_pcm.h | 125 - .../audio_coding/codecs/g711/g711_interface.h | 135 - .../codecs/g722/audio_decoder_g722.h | 79 - .../codecs/g722/audio_encoder_g722.h | 70 - .../audio_coding/codecs/g722/g722_interface.h | 173 - .../audio_coding/codecs/ilbc/abs_quant.h | 42 - .../audio_coding/codecs/ilbc/abs_quant_loop.h | 36 - .../codecs/ilbc/audio_decoder_ilbc.h | 52 - .../codecs/ilbc/audio_encoder_ilbc.h | 60 - .../codecs/ilbc/augmented_cb_corr.h | 42 - .../audio_coding/codecs/ilbc/bw_expand.h | 37 - .../audio_coding/codecs/ilbc/cb_construct.h | 44 - .../audio_coding/codecs/ilbc/cb_mem_energy.h | 37 - .../codecs/ilbc/cb_mem_energy_augmentation.h | 34 - .../codecs/ilbc/cb_mem_energy_calc.h | 36 - .../audio_coding/codecs/ilbc/cb_search.h | 40 - .../audio_coding/codecs/ilbc/cb_search_core.h | 41 - .../codecs/ilbc/cb_update_best_index.h | 39 - .../audio_coding/codecs/ilbc/chebyshev.h | 38 - .../audio_coding/codecs/ilbc/comp_corr.h | 39 - .../audio_coding/codecs/ilbc/constants.h | 95 - .../codecs/ilbc/create_augmented_vec.h | 38 - .../modules/audio_coding/codecs/ilbc/decode.h | 42 - .../codecs/ilbc/decode_residual.h | 45 - .../codecs/ilbc/decoder_interpolate_lsf.h | 41 - .../audio_coding/codecs/ilbc/defines.h | 225 - .../modules/audio_coding/codecs/ilbc/do_plc.h | 44 - .../modules/audio_coding/codecs/ilbc/encode.h | 38 - .../audio_coding/codecs/ilbc/energy_inverse.h | 36 - .../audio_coding/codecs/ilbc/enh_upsample.h | 33 - .../audio_coding/codecs/ilbc/enhancer.h | 40 - .../codecs/ilbc/enhancer_interface.h | 36 - .../codecs/ilbc/filtered_cb_vecs.h | 39 - .../audio_coding/codecs/ilbc/frame_classify.h | 34 - .../audio_coding/codecs/ilbc/gain_dequant.h | 36 - .../audio_coding/codecs/ilbc/gain_quant.h | 36 - .../audio_coding/codecs/ilbc/get_cd_vec.h | 40 - .../audio_coding/codecs/ilbc/get_lsp_poly.h | 46 - .../audio_coding/codecs/ilbc/get_sync_seq.h | 41 - .../audio_coding/codecs/ilbc/hp_input.h | 38 - .../audio_coding/codecs/ilbc/hp_output.h | 38 - .../modules/audio_coding/codecs/ilbc/ilbc.h | 251 - .../audio_coding/codecs/ilbc/index_conv_dec.h | 27 - .../audio_coding/codecs/ilbc/index_conv_enc.h | 31 - .../audio_coding/codecs/ilbc/init_decode.h | 38 - .../audio_coding/codecs/ilbc/init_encode.h | 36 - .../audio_coding/codecs/ilbc/interpolate.h | 35 - .../codecs/ilbc/interpolate_samples.h | 35 - .../audio_coding/codecs/ilbc/lpc_encode.h | 42 - .../audio_coding/codecs/ilbc/lsf_check.h | 32 - .../codecs/ilbc/lsf_interpolate_to_poly_dec.h | 37 - .../codecs/ilbc/lsf_interpolate_to_poly_enc.h | 38 - .../audio_coding/codecs/ilbc/lsf_to_lsp.h | 34 - .../audio_coding/codecs/ilbc/lsf_to_poly.h | 33 - .../audio_coding/codecs/ilbc/lsp_to_lsf.h | 35 - .../audio_coding/codecs/ilbc/my_corr.h | 36 - .../codecs/ilbc/nearest_neighbor.h | 37 - .../audio_coding/codecs/ilbc/pack_bits.h | 34 - .../audio_coding/codecs/ilbc/poly_to_lsf.h | 32 - .../audio_coding/codecs/ilbc/poly_to_lsp.h | 36 - .../audio_coding/codecs/ilbc/refiner.h | 44 - .../codecs/ilbc/simple_interpolate_lsf.h | 48 - .../codecs/ilbc/simple_lpc_analysis.h | 37 - .../codecs/ilbc/simple_lsf_dequant.h | 34 - .../codecs/ilbc/simple_lsf_quant.h | 37 - .../modules/audio_coding/codecs/ilbc/smooth.h | 35 - .../codecs/ilbc/smooth_out_data.h | 33 - .../audio_coding/codecs/ilbc/sort_sq.h | 36 - .../audio_coding/codecs/ilbc/split_vq.h | 38 - .../codecs/ilbc/state_construct.h | 38 - .../audio_coding/codecs/ilbc/state_search.h | 41 - .../audio_coding/codecs/ilbc/swap_bytes.h | 35 - .../audio_coding/codecs/ilbc/unpack_bits.h | 39 - .../modules/audio_coding/codecs/ilbc/vq3.h | 36 - .../modules/audio_coding/codecs/ilbc/vq4.h | 36 - .../audio_coding/codecs/ilbc/window32_w32.h | 35 - .../audio_coding/codecs/ilbc/xcorr_coef.h | 39 - .../codecs/isac/audio_decoder_isac_t.h | 54 - .../codecs/isac/audio_decoder_isac_t_impl.h | 84 - .../codecs/isac/audio_encoder_isac_t.h | 108 - .../codecs/isac/audio_encoder_isac_t_impl.h | 224 - .../audio_coding/codecs/isac/bandwidth_info.h | 24 - .../isac/fix/include/audio_decoder_isacfix.h | 22 - .../isac/fix/include/audio_encoder_isacfix.h | 22 - .../codecs/isac/fix/include/isacfix.h | 486 - .../codecs/isac/fix/source/arith_routins.h | 149 - .../isac/fix/source/bandwidth_estimator.h | 128 - .../codecs/isac/fix/source/codec.h | 212 - .../codecs/isac/fix/source/entropy_coding.h | 177 - .../audio_coding/codecs/isac/fix/source/fft.h | 39 - .../isac/fix/source/filterbank_internal.h | 87 - .../isac/fix/source/filterbank_tables.h | 52 - .../codecs/isac/fix/source/isac_fix_type.h | 106 - .../isac/fix/source/lpc_masking_model.h | 69 - .../codecs/isac/fix/source/lpc_tables.h | 97 - .../codecs/isac/fix/source/pitch_estimator.h | 67 - .../isac/fix/source/pitch_gain_tables.h | 46 - .../codecs/isac/fix/source/pitch_lag_tables.h | 99 - .../codecs/isac/fix/source/settings.h | 211 - .../fix/source/spectrum_ar_model_tables.h | 97 - .../codecs/isac/fix/source/structs.h | 345 - .../isac/main/include/audio_decoder_isac.h | 22 - .../isac/main/include/audio_encoder_isac.h | 22 - .../codecs/isac/main/include/isac.h | 617 - .../codecs/isac/main/source/arith_routines.h | 67 - .../isac/main/source/bandwidth_estimator.h | 165 - .../codecs/isac/main/source/codec.h | 223 - .../codecs/isac/main/source/crc.h | 41 - .../codecs/isac/main/source/encode_lpc_swb.h | 246 - .../codecs/isac/main/source/entropy_coding.h | 347 - .../isac/main/source/filter_functions.h | 23 - .../codecs/isac/main/source/isac_float_type.h | 100 - .../codecs/isac/main/source/isac_vad.h | 45 - .../codecs/isac/main/source/lpc_analysis.h | 46 - .../isac/main/source/lpc_gain_swb_tables.h | 50 - .../isac/main/source/lpc_shape_swb12_tables.h | 66 - .../isac/main/source/lpc_shape_swb16_tables.h | 81 - .../codecs/isac/main/source/lpc_tables.h | 99 - .../isac/main/source/os_specific_inline.h | 42 - .../codecs/isac/main/source/pitch_estimator.h | 32 - .../codecs/isac/main/source/pitch_filter.h | 42 - .../isac/main/source/pitch_gain_tables.h | 48 - .../isac/main/source/pitch_lag_tables.h | 116 - .../codecs/isac/main/source/settings.h | 196 - .../main/source/spectrum_ar_model_tables.h | 79 - .../codecs/isac/main/source/structs.h | 448 - .../codecs/isac/main/util/utility.h | 108 - .../codecs/legacy_encoded_audio_frame.h | 53 - .../codecs/opus/audio_coder_opus_common.h | 88 - .../audio_decoder_multi_channel_opus_impl.h | 71 - .../codecs/opus/audio_decoder_opus.h | 63 - .../audio_encoder_multi_channel_opus_impl.h | 89 - .../codecs/opus/audio_encoder_opus.h | 183 - .../audio_coding/codecs/opus/opus_inst.h | 43 - .../audio_coding/codecs/opus/opus_interface.h | 547 - .../codecs/opus/test/audio_ring_buffer.h | 57 - .../audio_coding/codecs/opus/test/blocker.h | 127 - .../codecs/opus/test/lapped_transform.h | 175 - .../codecs/pcm16b/audio_decoder_pcm16b.h | 50 - .../codecs/pcm16b/audio_encoder_pcm16b.h | 47 - .../audio_coding/codecs/pcm16b/pcm16b.h | 63 - .../codecs/pcm16b/pcm16b_common.h | 22 - .../codecs/red/audio_encoder_copy_red.h | 102 - .../codecs/tools/audio_codec_speed_test.h | 93 - .../include/audio_coding_module.h | 244 - .../include/audio_coding_module_typedefs.h | 134 - .../modules/audio_coding/neteq/accelerate.h | 80 - .../audio_coding/neteq/audio_multi_vector.h | 139 - .../modules/audio_coding/neteq/audio_vector.h | 172 - .../audio_coding/neteq/background_noise.h | 138 - .../audio_coding/neteq/buffer_level_filter.h | 54 - .../audio_coding/neteq/comfort_noise.h | 72 - .../audio_coding/neteq/cross_correlation.h | 51 - .../audio_coding/neteq/decision_logic.h | 200 - .../audio_coding/neteq/decoder_database.h | 216 - .../neteq/default_neteq_factory.h | 41 - .../audio_coding/neteq/delay_manager.h | 137 - .../modules/audio_coding/neteq/dsp_helper.h | 161 - .../modules/audio_coding/neteq/dtmf_buffer.h | 105 - .../audio_coding/neteq/dtmf_tone_generator.h | 56 - .../modules/audio_coding/neteq/expand.h | 155 - .../audio_coding/neteq/expand_uma_logger.h | 56 - .../modules/audio_coding/neteq/histogram.h | 64 - .../modules/audio_coding/neteq/merge.h | 101 - .../neteq/mock/mock_buffer_level_filter.h | 28 - .../neteq/mock/mock_decoder_database.h | 51 - .../neteq/mock/mock_delay_manager.h | 43 - .../neteq/mock/mock_dtmf_buffer.h | 35 - .../neteq/mock/mock_dtmf_tone_generator.h | 33 - .../audio_coding/neteq/mock/mock_expand.h | 60 - .../audio_coding/neteq/mock/mock_histogram.h | 30 - .../neteq/mock/mock_neteq_controller.h | 62 - .../neteq/mock/mock_packet_buffer.h | 82 - .../neteq/mock/mock_red_payload_splitter.h | 30 - .../neteq/mock/mock_statistics_calculator.h | 30 - .../modules/audio_coding/neteq/nack_tracker.h | 211 - .../modules/audio_coding/neteq/neteq_impl.h | 424 - .../modules/audio_coding/neteq/normal.h | 76 - .../modules/audio_coding/neteq/packet.h | 128 - .../audio_coding/neteq/packet_buffer.h | 180 - .../audio_coding/neteq/post_decode_vad.h | 71 - .../audio_coding/neteq/preemptive_expand.h | 85 - .../audio_coding/neteq/random_vector.h | 47 - .../audio_coding/neteq/red_payload_splitter.h | 52 - .../neteq/statistics_calculator.h | 205 - .../modules/audio_coding/neteq/sync_buffer.h | 110 - .../neteq/test/neteq_decoding_test.h | 95 - .../audio_coding/neteq/test/result_sink.h | 51 - .../modules/audio_coding/neteq/time_stretch.h | 114 - .../audio_coding/neteq/timestamp_scaler.h | 67 - .../audio_coding/neteq/tools/audio_checksum.h | 65 - .../audio_coding/neteq/tools/audio_loop.h | 56 - .../audio_coding/neteq/tools/audio_sink.h | 69 - .../neteq/tools/constant_pcm_packet_source.h | 55 - .../neteq/tools/encode_neteq_input.h | 69 - .../neteq/tools/fake_decode_from_file.h | 77 - .../initial_packet_inserter_neteq_input.h | 46 - .../neteq/tools/input_audio_file.h | 60 - .../neteq/tools/neteq_delay_analyzer.h | 75 - .../neteq/tools/neteq_event_log_input.h | 50 - .../audio_coding/neteq/tools/neteq_input.h | 107 - .../neteq/tools/neteq_packet_source_input.h | 69 - .../neteq/tools/neteq_performance_test.h | 32 - .../neteq/tools/neteq_quality_test.h | 176 - .../neteq/tools/neteq_replacement_input.h | 51 - .../neteq/tools/neteq_stats_getter.h | 106 - .../neteq/tools/neteq_stats_plotter.h | 46 - .../audio_coding/neteq/tools/neteq_test.h | 129 - .../neteq/tools/neteq_test_factory.h | 171 - .../neteq/tools/output_audio_file.h | 51 - .../neteq/tools/output_wav_file.h | 45 - .../modules/audio_coding/neteq/tools/packet.h | 124 - .../audio_coding/neteq/tools/packet_source.h | 44 - .../neteq/tools/resample_input_audio_file.h | 53 - .../neteq/tools/rtc_event_log_source.h | 70 - .../neteq/tools/rtp_file_source.h | 68 - .../audio_coding/neteq/tools/rtp_generator.h | 81 - .../modules/audio_coding/test/Channel.h | 117 - .../audio_coding/test/EncodeDecodeTest.h | 110 - .../modules/audio_coding/test/PCMFile.h | 76 - .../audio_coding/test/PacketLossTest.h | 76 - .../modules/audio_coding/test/RTPFile.h | 132 - .../modules/audio_coding/test/TestAllCodecs.h | 83 - .../modules/audio_coding/test/TestRedFec.h | 54 - .../modules/audio_coding/test/TestStereo.h | 100 - .../modules/audio_coding/test/TestVADDTX.h | 114 - .../audio_coding/test/TwoWayCommunication.h | 62 - .../modules/audio_coding/test/iSACTest.h | 95 - .../modules/audio_coding/test/opus_test.h | 59 - .../audio_device/android/aaudio_player.h | 147 - .../audio_device/android/aaudio_recorder.h | 129 - .../audio_device/android/aaudio_wrapper.h | 127 - .../audio_device/android/audio_common.h | 28 - .../android/audio_device_template.h | 435 - .../audio_device/android/audio_manager.h | 225 - .../audio_device/android/audio_record_jni.h | 168 - .../audio_device/android/audio_track_jni.h | 161 - .../modules/audio_device/android/build_info.h | 86 - .../audio_device/android/ensure_initialized.h | 17 - .../audio_device/android/opensles_common.h | 62 - .../audio_device/android/opensles_player.h | 195 - .../audio_device/android/opensles_recorder.h | 193 - .../audio_device/audio_device_buffer.h | 231 - .../audio_device/audio_device_config.h | 30 - .../audio_device/audio_device_generic.h | 145 - .../modules/audio_device/audio_device_impl.h | 180 - .../modules/audio_device/audio_device_name.h | 48 - .../audio_device/dummy/audio_device_dummy.h | 117 - .../audio_device/dummy/file_audio_device.h | 165 - .../dummy/file_audio_device_factory.h | 42 - .../modules/audio_device/fine_audio_buffer.h | 94 - .../audio_device/include/audio_device.h | 179 - .../include/audio_device_data_observer.h | 72 - .../include/audio_device_default.h | 132 - .../include/audio_device_defines.h | 156 - .../include/audio_device_factory.h | 59 - .../audio_device/include/fake_audio_device.h | 32 - .../audio_device/include/mock_audio_device.h | 157 - .../include/mock_audio_transport.h | 66 - .../audio_device/include/test_audio_device.h | 152 - .../linux/alsasymboltable_linux.h | 148 - .../linux/audio_device_alsa_linux.h | 210 - .../linux/audio_device_pulse_linux.h | 350 - .../linux/audio_mixer_manager_alsa_linux.h | 71 - .../linux/audio_mixer_manager_pulse_linux.h | 114 - .../linux/latebindingsymboltable_linux.h | 167 - .../linux/pulseaudiosymboltable_linux.h | 106 - .../audio_device/mac/audio_device_mac.h | 353 - .../mac/audio_mixer_manager_mac.h | 73 - .../audio_device/mock_audio_device_buffer.h | 35 - .../audio_device/win/audio_device_core_win.h | 300 - .../win/audio_device_module_win.h | 87 - .../audio_device/win/core_audio_base_win.h | 202 - .../audio_device/win/core_audio_input_win.h | 73 - .../audio_device/win/core_audio_output_win.h | 72 - .../audio_device/win/core_audio_utility_win.h | 557 - .../audio_mixer/audio_frame_manipulator.h | 33 - .../modules/audio_mixer/audio_mixer_impl.h | 94 - .../default_output_rate_calculator.h | 36 - .../modules/audio_mixer/frame_combiner.h | 62 - .../audio_mixer/gain_change_calculator.h | 42 - .../audio_mixer/output_rate_calculator.h | 32 - .../modules/audio_mixer/sine_wave_generator.h | 40 - .../aec3/adaptive_fir_filter.h | 191 - .../aec3/adaptive_fir_filter_erl.h | 54 - .../audio_processing/aec3/aec3_common.h | 114 - .../modules/audio_processing/aec3/aec3_fft.h | 75 - .../modules/audio_processing/aec3/aec_state.h | 294 - .../audio_processing/aec3/alignment_mixer.h | 58 - .../aec3/api_call_jitter_metrics.h | 60 - .../audio_processing/aec3/block_buffer.h | 62 - .../aec3/block_delay_buffer.h | 43 - .../audio_processing/aec3/block_framer.h | 48 - .../audio_processing/aec3/block_processor.h | 82 - .../aec3/block_processor_metrics.h | 47 - .../aec3/clockdrift_detector.h | 40 - .../aec3/coarse_filter_update_gain.h | 74 - .../aec3/comfort_noise_generator.h | 78 - .../modules/audio_processing/aec3/decimator.h | 41 - .../audio_processing/aec3/delay_estimate.h | 31 - .../aec3/dominant_nearend_detector.h | 56 - .../aec3/downsampled_render_buffer.h | 58 - .../audio_processing/aec3/echo_audibility.h | 86 - .../audio_processing/aec3/echo_canceller3.h | 202 - .../aec3/echo_path_delay_estimator.h | 79 - .../aec3/echo_path_variability.h | 37 - .../audio_processing/aec3/echo_remover.h | 61 - .../aec3/echo_remover_metrics.h | 78 - .../audio_processing/aec3/erl_estimator.h | 57 - .../audio_processing/aec3/erle_estimator.h | 99 - .../audio_processing/aec3/fft_buffer.h | 60 - .../modules/audio_processing/aec3/fft_data.h | 104 - .../audio_processing/aec3/filter_analyzer.h | 149 - .../audio_processing/aec3/frame_blocker.h | 50 - .../aec3/fullband_erle_estimator.h | 118 - .../audio_processing/aec3/matched_filter.h | 149 - .../aec3/matched_filter_lag_aggregator.h | 58 - .../aec3/mock/mock_block_processor.h | 56 - .../aec3/mock/mock_echo_remover.h | 56 - .../aec3/mock/mock_render_delay_buffer.h | 67 - .../aec3/mock/mock_render_delay_controller.h | 42 - .../audio_processing/aec3/moving_average.h | 45 - .../audio_processing/aec3/nearend_detector.h | 42 - .../aec3/refined_filter_update_gain.h | 90 - .../audio_processing/aec3/render_buffer.h | 116 - .../aec3/render_delay_buffer.h | 86 - .../aec3/render_delay_controller.h | 50 - .../aec3/render_delay_controller_metrics.h | 55 - .../aec3/render_signal_analyzer.h | 62 - .../aec3/residual_echo_estimator.h | 78 - .../aec3/reverb_decay_estimator.h | 112 - .../aec3/reverb_frequency_response.h | 53 - .../audio_processing/aec3/reverb_model.h | 58 - .../aec3/reverb_model_estimator.h | 67 - .../aec3/signal_dependent_erle_estimator.h | 98 - .../audio_processing/aec3/spectrum_buffer.h | 62 - .../aec3/stationarity_estimator.h | 122 - .../aec3/subband_erle_estimator.h | 93 - .../aec3/subband_nearend_detector.h | 52 - .../audio_processing/aec3/subtractor.h | 139 - .../audio_processing/aec3/subtractor_output.h | 52 - .../aec3/subtractor_output_analyzer.h | 45 - .../aec3/suppression_filter.h | 48 - .../audio_processing/aec3/suppression_gain.h | 132 - .../audio_processing/aec3/transparent_mode.h | 47 - .../audio_processing/aec3/vector_math.h | 229 - .../aec_dump/aec_dump_factory.h | 48 - .../audio_processing/aec_dump/aec_dump_impl.h | 88 - .../aec_dump/capture_stream_info.h | 69 - .../audio_processing/aec_dump/mock_aec_dump.h | 82 - .../aec_dump/write_to_file_task.h | 57 - .../modules/audio_processing/aecm/aecm_core.h | 441 - .../audio_processing/aecm/aecm_defines.h | 87 - .../aecm/echo_control_mobile.h | 209 - .../modules/audio_processing/agc/agc.h | 51 - .../audio_processing/agc/agc_manager_direct.h | 181 - .../audio_processing/agc/gain_control.h | 105 - .../audio_processing/agc/gain_map_internal.h | 40 - .../audio_processing/agc/legacy/analog_agc.h | 118 - .../audio_processing/agc/legacy/digital_agc.h | 75 - .../agc/legacy/gain_control.h | 253 - .../audio_processing/agc/loudness_histogram.h | 90 - .../modules/audio_processing/agc/mock_agc.h | 34 - .../modules/audio_processing/agc/utility.h | 27 - .../audio_processing/agc2/adaptive_agc.h | 57 - .../agc2/adaptive_digital_gain_applier.h | 68 - .../agc2/adaptive_mode_level_estimator.h | 76 - .../audio_processing/agc2/agc2_common.h | 73 - .../agc2/agc2_testing_common.h | 82 - .../audio_processing/agc2/biquad_filter.h | 66 - .../agc2/compute_interpolated_gain_curve.h | 48 - .../audio_processing/agc2/cpu_features.h | 39 - .../audio_processing/agc2/down_sampler.h | 42 - .../agc2/fixed_digital_level_estimator.h | 65 - .../audio_processing/agc2/gain_applier.h | 44 - .../agc2/interpolated_gain_curve.h | 152 - .../modules/audio_processing/agc2/limiter.h | 64 - .../agc2/limiter_db_gain_curve.h | 76 - .../agc2/noise_level_estimator.h | 40 - .../agc2/noise_spectrum_estimator.h | 42 - .../agc2/rnn_vad/auto_correlation.h | 49 - .../audio_processing/agc2/rnn_vad/common.h | 77 - .../agc2/rnn_vad/features_extraction.h | 61 - .../agc2/rnn_vad/lp_residual.h | 41 - .../agc2/rnn_vad/pitch_search.h | 54 - .../agc2/rnn_vad/pitch_search_internal.h | 114 - .../agc2/rnn_vad/ring_buffer.h | 65 - .../audio_processing/agc2/rnn_vad/rnn.h | 53 - .../audio_processing/agc2/rnn_vad/rnn_fc.h | 72 - .../audio_processing/agc2/rnn_vad/rnn_gru.h | 70 - .../agc2/rnn_vad/sequence_buffer.h | 79 - .../agc2/rnn_vad/spectral_features.h | 79 - .../agc2/rnn_vad/spectral_features_internal.h | 100 - .../agc2/rnn_vad/symmetric_matrix_buffer.h | 95 - .../agc2/rnn_vad/test_utils.h | 129 - .../agc2/rnn_vad/vector_math.h | 114 - .../agc2/saturation_protector.h | 47 - .../agc2/saturation_protector_buffer.h | 59 - .../audio_processing/agc2/signal_classifier.h | 73 - .../audio_processing/agc2/vad_with_level.h | 66 - .../agc2/vector_float_frame.h | 42 - .../modules/audio_processing/audio_buffer.h | 178 - .../audio_processing/audio_processing_impl.h | 537 - .../audio_samples_scaler.h | 46 - .../capture_levels_adjuster.h | 88 - .../include/modules/audio_processing/common.h | 38 - .../echo_control_mobile_impl.h | 86 - .../echo_detector/circular_buffer.h | 44 - .../echo_detector/mean_variance_estimator.h | 33 - .../echo_detector/moving_max.h | 36 - .../normalized_covariance_estimator.h | 43 - .../audio_processing/gain_control_impl.h | 92 - .../audio_processing/gain_controller2.h | 57 - .../audio_processing/high_pass_filter.h | 45 - .../audio_processing/include/aec_dump.h | 115 - .../include/audio_frame_proxies.h | 41 - .../include/audio_frame_view.h | 67 - .../include/audio_processing.h | 953 -- .../include/audio_processing_statistics.h | 73 - .../modules/audio_processing/include/config.h | 131 - .../include/mock_audio_processing.h | 165 - .../audio_processing/level_estimator.h | 47 - .../logging/apm_data_dumper.h | 393 - .../modules/audio_processing/ns/fast_math.h | 38 - .../modules/audio_processing/ns/histograms.h | 55 - .../audio_processing/ns/noise_estimator.h | 77 - .../audio_processing/ns/noise_suppressor.h | 92 - .../modules/audio_processing/ns/ns_common.h | 34 - .../modules/audio_processing/ns/ns_config.h | 24 - .../modules/audio_processing/ns/ns_fft.h | 45 - .../audio_processing/ns/prior_signal_model.h | 32 - .../ns/prior_signal_model_estimator.h | 39 - .../ns/quantile_noise_estimator.h | 45 - .../audio_processing/ns/signal_model.h | 34 - .../ns/signal_model_estimator.h | 58 - .../ns/speech_probability_estimator.h | 51 - .../audio_processing/ns/suppression_params.h | 30 - .../audio_processing/ns/wiener_filter.h | 57 - .../optionally_built_submodule_creators.h | 38 - .../render_queue_item_verifier.h | 36 - .../audio_processing/residual_echo_detector.h | 90 - .../modules/audio_processing/rms_level.h | 77 - .../audio_processing/splitting_filter.h | 72 - .../test/aec_dump_based_simulator.h | 82 - .../test/api_call_statistics.h | 46 - .../test/audio_buffer_tools.h | 42 - .../audio_processing_builder_for_testing.h | 81 - .../test/audio_processing_simulator.h | 250 - .../test/audioproc_float_impl.h | 51 - .../test/bitexactness_tools.h | 56 - .../test/conversational_speech/config.h | 41 - .../conversational_speech/mock_wavreader.h | 48 - .../mock_wavreader_factory.h | 58 - .../conversational_speech/multiend_call.h | 103 - .../test/conversational_speech/simulator.h | 44 - .../test/conversational_speech/timing.h | 50 - .../wavreader_abstract_factory.h | 34 - .../conversational_speech/wavreader_factory.h | 36 - .../wavreader_interface.h | 40 - .../test/debug_dump_replayer.h | 78 - .../test/echo_canceller_test_tools.h | 47 - .../audio_processing/test/echo_control_mock.h | 46 - .../test/fake_recording_device.h | 74 - .../audio_processing/test/performance_timer.h | 47 - .../audio_processing/test/protobuf_utils.h | 40 - .../test/runtime_setting_util.h | 23 - .../audio_processing/test/simulator_buffers.h | 66 - .../audio_processing/test/test_utils.h | 196 - .../test/wav_based_simulator.h | 62 - .../audio_processing/three_band_filter_bank.h | 77 - .../audio_processing/transient/common.h | 27 - .../transient/daubechies_8_wavelet_coeffs.h | 44 - .../transient/dyadic_decimator.h | 68 - .../audio_processing/transient/file_utils.h | 117 - .../transient/moving_moments.h | 53 - .../transient/transient_detector.h | 89 - .../transient/transient_suppressor.h | 60 - .../transient/transient_suppressor_impl.h | 123 - .../transient/windows_private.h | 557 - .../audio_processing/transient/wpd_node.h | 45 - .../audio_processing/transient/wpd_tree.h | 92 - .../audio_processing/typing_detection.h | 92 - .../utility/cascaded_biquad_filter.h | 80 - .../utility/delay_estimator.h | 257 - .../utility/delay_estimator_internal.h | 51 - .../utility/delay_estimator_wrapper.h | 248 - .../audio_processing/utility/pffft_wrapper.h | 94 - .../modules/audio_processing/vad/common.h | 29 - .../modules/audio_processing/vad/gmm.h | 45 - .../audio_processing/vad/noise_gmm_tables.h | 82 - .../audio_processing/vad/pitch_based_vad.h | 57 - .../audio_processing/vad/pitch_internal.h | 30 - .../audio_processing/vad/pole_zero_filter.h | 51 - .../audio_processing/vad/standalone_vad.h | 69 - .../audio_processing/vad/vad_audio_proc.h | 94 - .../vad/vad_audio_proc_internal.h | 79 - .../vad/vad_circular_buffer.h | 69 - .../vad/voice_activity_detector.h | 72 - .../audio_processing/vad/voice_gmm_tables.h | 77 - .../audio_processing/voice_detection.h | 59 - .../goog_cc/acknowledged_bitrate_estimator.h | 52 - ...acknowledged_bitrate_estimator_interface.h | 80 - .../goog_cc/alr_detector.h | 76 - .../goog_cc/bitrate_estimator.h | 62 - .../congestion_window_pushback_controller.h | 48 - .../goog_cc/delay_based_bwe.h | 136 - .../goog_cc/delay_based_bwe_unittest_helper.h | 182 - .../delay_increase_detector_interface.h | 41 - .../goog_cc/goog_cc_network_control.h | 148 - .../goog_cc/inter_arrival_delta.h | 90 - .../goog_cc/link_capacity_estimator.h | 38 - .../goog_cc/loss_based_bandwidth_estimation.h | 97 - .../goog_cc/probe_bitrate_estimator.h | 58 - .../goog_cc/probe_controller.h | 152 - .../goog_cc/robust_throughput_estimator.h | 48 - .../goog_cc/send_side_bandwidth_estimation.h | 196 - .../goog_cc/test/goog_cc_printer.h | 75 - .../goog_cc/trendline_estimator.h | 126 - .../receive_side_congestion_controller.h | 112 - .../pcc/bitrate_controller.h | 74 - .../pcc/monitor_interval.h | 71 - .../congestion_controller/pcc/pcc_factory.h | 30 - .../pcc/pcc_network_controller.h | 125 - .../congestion_controller/pcc/rtt_tracker.h | 39 - .../pcc/utility_function.h | 78 - .../rtp/control_handler.h | 54 - .../rtp/transport_feedback_adapter.h | 101 - .../rtp/transport_feedback_demuxer.h | 49 - .../blank_detector_desktop_capturer_wrapper.h | 78 - .../desktop_capture/cropped_desktop_frame.h | 33 - .../cropping_window_capturer.h | 84 - .../desktop_and_cursor_composer.h | 93 - .../desktop_capture/desktop_capture_options.h | 167 - .../desktop_capture/desktop_capture_types.h | 54 - .../desktop_capture/desktop_capturer.h | 159 - .../desktop_capturer_differ_wrapper.h | 68 - .../desktop_capturer_wrapper.h | 48 - .../modules/desktop_capture/desktop_frame.h | 216 - .../desktop_capture/desktop_frame_generator.h | 121 - .../desktop_capture/desktop_frame_rotation.h | 52 - .../desktop_capture/desktop_frame_win.h | 49 - .../desktop_capture/desktop_geometry.h | 169 - .../modules/desktop_capture/desktop_region.h | 169 - .../modules/desktop_capture/differ_block.h | 42 - .../desktop_capture/differ_vector_sse2.h | 31 - .../desktop_capture/fake_desktop_capturer.h | 76 - .../fallback_desktop_capturer_wrapper.h | 64 - .../full_screen_application_handler.h | 48 - .../full_screen_window_detector.h | 80 - .../linux/base_capturer_pipewire.h | 214 - .../linux/mouse_cursor_monitor_x11.h | 68 - .../linux/screen_capturer_x11.h | 147 - .../desktop_capture/linux/shared_x_display.h | 83 - .../linux/window_capturer_x11.h | 74 - .../desktop_capture/linux/window_finder_x11.h | 35 - .../desktop_capture/linux/window_list_utils.h | 56 - .../desktop_capture/linux/x_atom_cache.h | 45 - .../desktop_capture/linux/x_error_trap.h | 39 - .../linux/x_server_pixel_buffer.h | 89 - .../desktop_capture/linux/x_window_property.h | 63 - .../mac/desktop_configuration.h | 96 - .../mac/desktop_configuration_monitor.h | 54 - .../mac/desktop_frame_cgimage.h | 57 - .../mac/desktop_frame_iosurface.h | 44 - .../mac/desktop_frame_provider.h | 58 - .../mac/full_screen_mac_application_handler.h | 24 - .../desktop_capture/mac/screen_capturer_mac.h | 120 - .../desktop_capture/mac/window_list_utils.h | 117 - .../mock_desktop_capturer_callback.h | 38 - .../modules/desktop_capture/mouse_cursor.h | 49 - .../desktop_capture/mouse_cursor_monitor.h | 111 - .../desktop_capture/resolution_tracker.h | 34 - .../modules/desktop_capture/rgba_color.h | 59 - .../screen_capture_frame_queue.h | 80 - .../desktop_capture/screen_capturer_helper.h | 91 - .../modules/desktop_capture/screen_drawer.h | 79 - .../screen_drawer_lock_posix.h | 38 - .../desktop_capture/shared_desktop_frame.h | 65 - .../modules/desktop_capture/shared_memory.h | 81 - .../modules/desktop_capture/test_utils.h | 27 - .../modules/desktop_capture/win/cursor.h | 25 - .../win/cursor_unittest_resources.h | 24 - .../modules/desktop_capture/win/d3d_device.h | 59 - .../modules/desktop_capture/win/desktop.h | 65 - .../win/desktop_capture_utils.h | 29 - .../win/display_configuration_monitor.h | 38 - .../win/dxgi_adapter_duplicator.h | 92 - .../desktop_capture/win/dxgi_context.h | 62 - .../win/dxgi_duplicator_controller.h | 246 - .../modules/desktop_capture/win/dxgi_frame.h | 63 - .../win/dxgi_output_duplicator.h | 144 - .../desktop_capture/win/dxgi_texture.h | 73 - .../win/dxgi_texture_mapping.h | 47 - .../win/dxgi_texture_staging.h | 68 - .../win/full_screen_win_application_handler.h | 24 - .../desktop_capture/win/scoped_gdi_object.h | 92 - .../win/scoped_thread_desktop.h | 55 - .../win/screen_capture_utils.h | 57 - .../win/screen_capturer_win_directx.h | 96 - .../win/screen_capturer_win_gdi.h | 83 - .../win/screen_capturer_win_magnifier.h | 139 - .../win/selected_window_context.h | 45 - .../win/test_support/test_window.h | 48 - .../desktop_capture/win/wgc_capture_session.h | 110 - .../desktop_capture/win/wgc_capture_source.h | 122 - .../desktop_capture/win/wgc_capturer_win.h | 131 - .../desktop_capture/win/wgc_desktop_frame.h | 46 - .../win/window_capture_utils.h | 125 - .../win/window_capturer_win_gdi.h | 76 - .../modules/desktop_capture/window_finder.h | 65 - .../desktop_capture/window_finder_mac.h | 37 - .../desktop_capture/window_finder_win.h | 30 - .../third/include/modules/include/module.h | 63 - .../modules/include/module_common_types.h | 66 - .../include/module_common_types_public.h | 111 - .../modules/include/module_fec_types.h | 34 - .../include/modules/pacing/bitrate_prober.h | 132 - .../include/modules/pacing/interval_budget.h | 44 - .../include/modules/pacing/paced_sender.h | 168 - .../modules/pacing/pacing_controller.h | 237 - .../include/modules/pacing/packet_router.h | 139 - .../modules/pacing/round_robin_packet_queue.h | 178 - .../include/modules/pacing/rtp_packet_pacer.h | 72 - .../modules/pacing/task_queue_paced_sender.h | 173 - .../aimd_rate_control.h | 119 - .../include/bwe_defines.h | 49 - .../include/remote_bitrate_estimator.h | 91 - .../remote_bitrate_estimator/inter_arrival.h | 95 - .../overuse_detector.h | 62 - .../overuse_estimator.h | 83 - .../remote_bitrate_estimator_abs_send_time.h | 154 - .../remote_bitrate_estimator_single_stream.h | 87 - ...remote_bitrate_estimator_unittest_helper.h | 221 - .../remote_estimator_proxy.h | 115 - .../test/bwe_test_logging.h | 359 - .../remote_bitrate_estimator/tools/bwe_rtp.h | 36 - .../rtp_rtcp/include/flexfec_receiver.h | 78 - .../modules/rtp_rtcp/include/flexfec_sender.h | 102 - .../rtp_rtcp/include/receive_statistics.h | 82 - .../include/remote_ntp_time_estimator.h | 60 - .../rtp_rtcp/include/report_block_data.h | 59 - .../rtp_rtcp/include/rtcp_statistics.h | 111 - .../modules/rtp_rtcp/include/rtp_cvo.h | 56 - .../include/rtp_header_extension_map.h | 73 - .../rtp_rtcp/include/rtp_packet_sender.h | 35 - .../modules/rtp_rtcp/include/rtp_rtcp.h | 43 - .../rtp_rtcp/include/rtp_rtcp_defines.h | 483 - .../rtp_rtcp/include/ulpfec_receiver.h | 58 - .../mocks/mock_recovered_packet_receiver.h | 29 - .../mocks/mock_rtcp_bandwidth_observer.h | 28 - .../rtp_rtcp/mocks/mock_rtcp_rtt_stats.h | 25 - .../modules/rtp_rtcp/mocks/mock_rtp_rtcp.h | 190 - .../source/absolute_capture_time_receiver.h | 100 - .../source/absolute_capture_time_sender.h | 88 - .../source/active_decode_targets_helper.h | 63 - .../include/modules/rtp_rtcp/source/byte_io.h | 402 - .../source/create_video_rtp_depacketizer.h | 26 - .../deprecated/deprecated_rtp_sender_egress.h | 149 - .../modules/rtp_rtcp/source/dtmf_queue.h | 43 - .../source/fec_private_tables_bursty.h | 37 - .../source/fec_private_tables_random.h | 27 - .../modules/rtp_rtcp/source/fec_test_helper.h | 125 - .../source/flexfec_header_reader_writer.h | 88 - .../source/forward_error_correction.h | 419 - .../forward_error_correction_internal.h | 121 - .../rtp_rtcp/source/packet_loss_stats.h | 58 - .../rtp_rtcp/source/packet_sequencer.h | 75 - .../rtp_rtcp/source/receive_statistics_impl.h | 240 - .../modules/rtp_rtcp/source/rtcp_nack_stats.h | 40 - .../modules/rtp_rtcp/source/rtcp_packet.h | 111 - .../modules/rtp_rtcp/source/rtcp_packet/app.h | 67 - .../modules/rtp_rtcp/source/rtcp_packet/bye.h | 56 - .../source/rtcp_packet/common_header.h | 52 - .../source/rtcp_packet/compound_packet.h | 48 - .../rtp_rtcp/source/rtcp_packet/dlrr.h | 70 - .../rtcp_packet/extended_jitter_report.h | 54 - .../source/rtcp_packet/extended_reports.h | 73 - .../modules/rtp_rtcp/source/rtcp_packet/fir.h | 62 - .../source/rtcp_packet/loss_notification.h | 82 - .../rtp_rtcp/source/rtcp_packet/nack.h | 59 - .../modules/rtp_rtcp/source/rtcp_packet/pli.h | 39 - .../rtp_rtcp/source/rtcp_packet/psfb.h | 48 - .../source/rtcp_packet/rapid_resync_request.h | 40 - .../source/rtcp_packet/receiver_report.h | 60 - .../rtp_rtcp/source/rtcp_packet/remb.h | 59 - .../source/rtcp_packet/remote_estimate.h | 59 - .../source/rtcp_packet/report_block.h | 72 - .../rtp_rtcp/source/rtcp_packet/rrtr.h | 51 - .../rtp_rtcp/source/rtcp_packet/rtpfb.h | 47 - .../rtp_rtcp/source/rtcp_packet/sdes.h | 55 - .../source/rtcp_packet/sender_report.h | 81 - .../source/rtcp_packet/target_bitrate.h | 63 - .../rtp_rtcp/source/rtcp_packet/tmmb_item.h | 52 - .../rtp_rtcp/source/rtcp_packet/tmmbn.h | 55 - .../rtp_rtcp/source/rtcp_packet/tmmbr.h | 54 - .../source/rtcp_packet/transport_feedback.h | 180 - .../modules/rtp_rtcp/source/rtcp_receiver.h | 298 - .../modules/rtp_rtcp/source/rtcp_sender.h | 276 - .../rtp_rtcp/source/rtcp_transceiver.h | 102 - .../rtp_rtcp/source/rtcp_transceiver_config.h | 108 - .../rtp_rtcp/source/rtcp_transceiver_impl.h | 114 - .../rtp_dependency_descriptor_extension.h | 60 - .../source/rtp_dependency_descriptor_reader.h | 75 - .../source/rtp_dependency_descriptor_writer.h | 89 - .../source/rtp_descriptor_authentication.h | 27 - .../modules/rtp_rtcp/source/rtp_format.h | 61 - .../modules/rtp_rtcp/source/rtp_format_h264.h | 89 - .../source/rtp_format_video_generic.h | 71 - .../modules/rtp_rtcp/source/rtp_format_vp8.h | 74 - .../source/rtp_format_vp8_test_helper.h | 55 - .../modules/rtp_rtcp/source/rtp_format_vp9.h | 72 - .../source/rtp_generic_frame_descriptor.h | 79 - .../rtp_generic_frame_descriptor_extension.h | 40 - .../source/rtp_header_extension_size.h | 32 - .../rtp_rtcp/source/rtp_header_extensions.h | 327 - .../modules/rtp_rtcp/source/rtp_packet.h | 252 - .../rtp_rtcp/source/rtp_packet_history.h | 220 - .../rtp_rtcp/source/rtp_packet_received.h | 74 - .../rtp_rtcp/source/rtp_packet_to_send.h | 136 - .../rtp_rtcp/source/rtp_packetizer_av1.h | 72 - .../modules/rtp_rtcp/source/rtp_rtcp_config.h | 23 - .../modules/rtp_rtcp/source/rtp_rtcp_impl.h | 320 - .../modules/rtp_rtcp/source/rtp_rtcp_impl2.h | 315 - .../rtp_rtcp/source/rtp_rtcp_interface.h | 441 - .../modules/rtp_rtcp/source/rtp_sender.h | 234 - .../rtp_rtcp/source/rtp_sender_audio.h | 120 - .../rtp_rtcp/source/rtp_sender_egress.h | 182 - .../rtp_rtcp/source/rtp_sender_video.h | 259 - ..._sender_video_frame_transformer_delegate.h | 84 - .../rtp_rtcp/source/rtp_sequence_number_map.h | 85 - .../modules/rtp_rtcp/source/rtp_utility.h | 55 - .../rtp_rtcp/source/rtp_video_header.h | 88 - .../rtp_video_layers_allocation_extension.h | 35 - .../modules/rtp_rtcp/source/source_tracker.h | 130 - .../modules/rtp_rtcp/source/time_util.h | 56 - .../modules/rtp_rtcp/source/tmmbr_help.h | 35 - .../rtp_rtcp/source/ulpfec_generator.h | 123 - .../source/ulpfec_header_reader_writer.h | 69 - .../rtp_rtcp/source/ulpfec_receiver_impl.h | 64 - .../rtp_rtcp/source/video_fec_generator.h | 54 - .../rtp_rtcp/source/video_rtp_depacketizer.h | 41 - .../source/video_rtp_depacketizer_av1.h | 42 - .../source/video_rtp_depacketizer_generic.h | 30 - .../source/video_rtp_depacketizer_h264.h | 28 - .../source/video_rtp_depacketizer_raw.h | 30 - .../source/video_rtp_depacketizer_vp8.h | 42 - .../source/video_rtp_depacketizer_vp9.h | 42 - .../testFec/average_residual_loss_xor_codes.h | 57 - .../include/modules/third_party/fft/fft.h | 58 - .../include/modules/third_party/g711/g711.h | 350 - .../modules/third_party/g722/g722_enc_dec.h | 153 - .../third_party/portaudio/pa_memorybarrier.h | 132 - .../third_party/portaudio/pa_ringbuffer.h | 250 - .../modules/utility/include/helpers_android.h | 80 - .../modules/utility/include/jvm_android.h | 193 - .../include/mock/mock_process_thread.h | 41 - .../modules/utility/include/process_thread.h | 60 - .../utility/source/process_thread_impl.h | 120 - .../modules/video_capture/device_info_impl.h | 62 - .../video_capture/linux/device_info_linux.h | 51 - .../video_capture/linux/video_capture_linux.h | 66 - .../modules/video_capture/video_capture.h | 115 - .../video_capture/video_capture_config.h | 33 - .../video_capture/video_capture_defines.h | 59 - .../video_capture/video_capture_factory.h | 40 - .../video_capture/video_capture_impl.h | 108 - .../video_capture/windows/device_info_ds.h | 99 - .../video_capture/windows/help_functions_ds.h | 118 - .../video_capture/windows/sink_filter_ds.h | 162 - .../video_capture/windows/video_capture_ds.h | 74 - .../video_coding/chain_diff_calculator.h | 46 - .../modules/video_coding/codec_timer.h | 50 - .../video_coding/codecs/av1/av1_svc_config.h | 22 - .../codecs/av1/libaom_av1_decoder.h | 26 - .../codecs/av1/libaom_av1_encoder.h | 26 - .../codecs/h264/h264_color_space.h | 38 - .../codecs/h264/h264_decoder_impl.h | 117 - .../codecs/h264/h264_encoder_impl.h | 117 - .../video_coding/codecs/h264/include/h264.h | 63 - .../codecs/h264/include/h264_globals.h | 85 - .../codecs/interface/common_constants.h | 28 - .../codecs/interface/libvpx_interface.h | 128 - .../codecs/interface/mock_libvpx_interface.h | 147 - .../include/augmented_video_frame_buffer.h | 62 - .../include/multiplex_decoder_adapter.h | 81 - .../include/multiplex_encoder_adapter.h | 91 - .../multiplex_encoded_image_packer.h | 120 - .../test/android_codec_factory_helper.h | 30 - .../test/encoded_video_frame_producer.h | 92 - .../codecs/test/objc_codec_factory_helper.h | 28 - .../codecs/test/video_codec_unittest.h | 128 - .../test/videocodec_test_fixture_impl.h | 107 - .../codecs/test/videocodec_test_stats_impl.h | 84 - .../video_coding/codecs/test/videoprocessor.h | 280 - .../codecs/vp8/default_temporal_layers.h | 168 - .../vp8/include/temporal_layers_checker.h | 63 - .../video_coding/codecs/vp8/include/vp8.h | 56 - .../codecs/vp8/include/vp8_globals.h | 49 - .../codecs/vp8/libvpx_vp8_decoder.h | 75 - .../codecs/vp8/libvpx_vp8_encoder.h | 158 - .../codecs/vp8/screenshare_layers.h | 164 - .../video_coding/codecs/vp8/temporal_layers.h | 17 - .../video_coding/codecs/vp9/include/vp9.h | 51 - .../codecs/vp9/include/vp9_globals.h | 223 - .../codecs/vp9/libvpx_vp9_decoder.h | 70 - .../codecs/vp9/libvpx_vp9_encoder.h | 248 - .../video_coding/codecs/vp9/svc_config.h | 31 - .../codecs/vp9/svc_rate_allocator.h | 17 - .../codecs/vp9/vp9_frame_buffer_pool.h | 133 - .../modules/video_coding/decoder_database.h | 85 - .../modules/video_coding/decoding_state.h | 89 - .../video_coding/deprecated/nack_module.h | 132 - .../modules/video_coding/encoded_frame.h | 127 - .../modules/video_coding/event_wrapper.h | 46 - .../video_coding/fec_controller_default.h | 66 - .../modules/video_coding/fec_rate_table.h | 461 - .../modules/video_coding/frame_buffer.h | 89 - .../modules/video_coding/frame_buffer2.h | 196 - .../frame_dependencies_calculator.h | 49 - .../modules/video_coding/frame_object.h | 68 - .../modules/video_coding/generic_decoder.h | 116 - .../video_coding/h264_sprop_parameter_sets.h | 37 - .../video_coding/h264_sps_pps_tracker.h | 76 - .../include/modules/video_coding/histogram.h | 46 - .../include/video_codec_initializer.h | 45 - .../include/video_codec_interface.h | 119 - .../video_coding/include/video_coding.h | 148 - .../include/video_coding_defines.h | 117 - .../video_coding/include/video_error_codes.h | 30 - .../modules/video_coding/inter_frame_delay.h | 60 - .../modules/video_coding/internal_defines.h | 23 - .../modules/video_coding/jitter_buffer.h | 273 - .../video_coding/jitter_buffer_common.h | 59 - .../modules/video_coding/jitter_estimator.h | 159 - .../loss_notification_controller.h | 111 - .../modules/video_coding/media_opt_util.h | 350 - .../modules/video_coding/nack_module2.h | 140 - .../include/modules/video_coding/packet.h | 79 - .../modules/video_coding/packet_buffer.h | 154 - .../include/modules/video_coding/receiver.h | 65 - .../rtp_frame_id_only_ref_finder.h | 38 - .../video_coding/rtp_frame_reference_finder.h | 69 - .../video_coding/rtp_generic_ref_finder.h | 32 - .../rtp_seq_num_only_ref_finder.h | 70 - .../modules/video_coding/rtp_vp8_ref_finder.h | 76 - .../modules/video_coding/rtp_vp9_ref_finder.h | 100 - .../include/modules/video_coding/rtt_filter.h | 66 - .../modules/video_coding/session_info.h | 123 - .../svc/create_scalability_structure.h | 29 - .../svc/scalability_structure_full_svc.h | 163 - .../svc/scalability_structure_key_svc.h | 122 - .../scalability_structure_l2t2_key_shift.h | 64 - .../svc/scalability_structure_simulcast.h | 89 - .../svc/scalability_structure_test_helpers.h | 59 - .../svc/scalable_video_controller.h | 137 - .../scalable_video_controller_no_layering.h | 40 - .../video_coding/svc/svc_rate_allocator.h | 69 - .../video_coding/test/stream_generator.h | 73 - .../modules/video_coding/timestamp_map.h | 63 - .../include/modules/video_coding/timing.h | 145 - .../video_coding/unique_timestamp_counter.h | 44 - .../utility/decoded_frames_history.h | 52 - .../video_coding/utility/frame_dropper.h | 94 - .../utility/framerate_controller.h | 46 - .../video_coding/utility/ivf_file_reader.h | 80 - .../video_coding/utility/ivf_file_writer.h | 66 - .../modules/video_coding/utility/qp_parser.h | 45 - .../video_coding/utility/quality_scaler.h | 122 - .../utility/simulcast_rate_allocator.h | 70 - .../utility/simulcast_test_fixture_impl.h | 93 - .../video_coding/utility/simulcast_utility.h | 33 - .../video_coding/utility/vp8_header_parser.h | 40 - .../utility/vp9_uncompressed_header_parser.h | 89 - .../modules/video_coding/video_coding_impl.h | 140 - .../modules/video_coding/video_receiver2.h | 76 - .../video_processing/util/denoiser_filter.h | 50 - .../video_processing/util/denoiser_filter_c.h | 40 - .../util/denoiser_filter_neon.h | 38 - .../util/denoiser_filter_sse2.h | 40 - .../video_processing/util/noise_estimation.h | 63 - .../video_processing/util/skin_detection.h | 30 - .../modules/video_processing/video_denoiser.h | 86 - .../net/dcsctp/common/internal_types.h | 41 - .../third/include/net/dcsctp/common/math.h | 24 - .../include/net/dcsctp/common/pair_hash.h | 31 - .../net/dcsctp/common/sequence_numbers.h | 150 - .../include/net/dcsctp/common/str_join.h | 56 - .../net/dcsctp/packet/bounded_byte_reader.h | 99 - .../net/dcsctp/packet/bounded_byte_writer.h | 100 - .../net/dcsctp/packet/chunk/abort_chunk.h | 64 - .../include/net/dcsctp/packet/chunk/chunk.h | 63 - .../dcsctp/packet/chunk/cookie_ack_chunk.h | 46 - .../dcsctp/packet/chunk/cookie_echo_chunk.h | 53 - .../net/dcsctp/packet/chunk/data_chunk.h | 70 - .../net/dcsctp/packet/chunk/data_common.h | 97 - .../net/dcsctp/packet/chunk/error_chunk.h | 57 - .../dcsctp/packet/chunk/forward_tsn_chunk.h | 55 - .../dcsctp/packet/chunk/forward_tsn_common.h | 66 - .../dcsctp/packet/chunk/heartbeat_ack_chunk.h | 63 - .../packet/chunk/heartbeat_request_chunk.h | 62 - .../net/dcsctp/packet/chunk/idata_chunk.h | 70 - .../dcsctp/packet/chunk/iforward_tsn_chunk.h | 54 - .../net/dcsctp/packet/chunk/init_ack_chunk.h | 77 - .../net/dcsctp/packet/chunk/init_chunk.h | 77 - .../net/dcsctp/packet/chunk/reconfig_chunk.h | 56 - .../net/dcsctp/packet/chunk/sack_chunk.h | 79 - .../dcsctp/packet/chunk/shutdown_ack_chunk.h | 47 - .../net/dcsctp/packet/chunk/shutdown_chunk.h | 53 - .../packet/chunk/shutdown_complete_chunk.h | 54 - .../third/include/net/dcsctp/packet/crc32c.h | 24 - .../third/include/net/dcsctp/packet/data.h | 103 - ...ookie_received_while_shutting_down_cause.h | 50 - .../dcsctp/packet/error_cause/error_cause.h | 38 - .../invalid_mandatory_parameter_cause.h | 48 - .../invalid_stream_identifier_cause.h | 56 - .../missing_mandatory_parameter_cause.h | 60 - .../packet/error_cause/no_user_data_cause.h | 53 - .../error_cause/out_of_resource_error_cause.h | 48 - .../error_cause/protocol_violation_cause.h | 56 - ...of_an_association_with_new_address_cause.h | 59 - .../error_cause/stale_cookie_error_cause.h | 54 - .../unrecognized_chunk_type_cause.h | 59 - .../unrecognized_parameter_cause.h | 60 - .../error_cause/unresolvable_address_cause.h | 60 - .../error_cause/user_initiated_abort_cause.h | 56 - .../add_incoming_streams_request_parameter.h | 63 - .../add_outgoing_streams_request_parameter.h | 63 - .../forward_tsn_supported_parameter.h | 49 - .../parameter/heartbeat_info_parameter.h | 54 - .../incoming_ssn_reset_request_parameter.h | 66 - .../outgoing_ssn_reset_request_parameter.h | 78 - .../net/dcsctp/packet/parameter/parameter.h | 96 - .../reconfiguration_response_parameter.h | 92 - .../ssn_tsn_reset_request_parameter.h | 59 - .../packet/parameter/state_cookie_parameter.h | 55 - .../supported_extensions_parameter.h | 62 - .../include/net/dcsctp/packet/tlv_trait.h | 164 - .../include/net/dcsctp/public/strong_alias.h | 84 - .../third/include/net/dcsctp/public/types.h | 33 - .../net/dcsctp/testing/testing_macros.h | 29 - .../webrtc_demo/third/include/openssl/aead.h | 483 - .../webrtc_demo/third/include/openssl/aes.h | 207 - .../third/include/openssl/arm_arch.h | 175 - .../webrtc_demo/third/include/openssl/asn1.h | 1095 -- .../third/include/openssl/asn1_mac.h | 18 - .../webrtc_demo/third/include/openssl/asn1t.h | 725 - .../webrtc_demo/third/include/openssl/base.h | 591 - .../third/include/openssl/base64.h | 190 - .../webrtc_demo/third/include/openssl/bio.h | 937 -- .../third/include/openssl/blake2.h | 62 - .../third/include/openssl/blowfish.h | 93 - .../webrtc_demo/third/include/openssl/bn.h | 1057 -- .../webrtc_demo/third/include/openssl/buf.h | 137 - .../third/include/openssl/buffer.h | 18 - .../third/include/openssl/bytestring.h | 576 - .../webrtc_demo/third/include/openssl/cast.h | 96 - .../third/include/openssl/chacha.h | 41 - .../third/include/openssl/cipher.h | 655 - .../webrtc_demo/third/include/openssl/cmac.h | 91 - .../webrtc_demo/third/include/openssl/conf.h | 180 - .../webrtc_demo/third/include/openssl/cpu.h | 202 - .../third/include/openssl/crypto.h | 167 - .../third/include/openssl/curve25519.h | 201 - .../webrtc_demo/third/include/openssl/des.h | 183 - .../webrtc_demo/third/include/openssl/dh.h | 361 - .../third/include/openssl/digest.h | 341 - .../webrtc_demo/third/include/openssl/dsa.h | 457 - .../webrtc_demo/third/include/openssl/dtls1.h | 16 - .../webrtc_demo/third/include/openssl/e_os2.h | 18 - .../webrtc_demo/third/include/openssl/ec.h | 442 - .../third/include/openssl/ec_key.h | 372 - .../webrtc_demo/third/include/openssl/ecdh.h | 118 - .../webrtc_demo/third/include/openssl/ecdsa.h | 224 - .../third/include/openssl/engine.h | 109 - .../webrtc_demo/third/include/openssl/err.h | 465 - .../webrtc_demo/third/include/openssl/evp.h | 1095 -- .../third/include/openssl/evp_errors.h | 99 - .../third/include/openssl/ex_data.h | 203 - .../webrtc_demo/third/include/openssl/hkdf.h | 64 - .../webrtc_demo/third/include/openssl/hmac.h | 186 - .../webrtc_demo/third/include/openssl/hrss.h | 100 - .../third/include/openssl/is_boringssl.h | 16 - .../webrtc_demo/third/include/openssl/lhash.h | 282 - .../webrtc_demo/third/include/openssl/md4.h | 108 - .../webrtc_demo/third/include/openssl/md5.h | 109 - .../webrtc_demo/third/include/openssl/mem.h | 175 - .../webrtc_demo/third/include/openssl/nid.h | 4259 ----- .../webrtc_demo/third/include/openssl/obj.h | 249 - .../third/include/openssl/obj_mac.h | 18 - .../third/include/openssl/objects.h | 18 - .../third/include/openssl/opensslconf.h | 70 - .../third/include/openssl/opensslv.h | 18 - .../third/include/openssl/ossl_typ.h | 18 - .../webrtc_demo/third/include/openssl/pem.h | 503 - .../third/include/openssl/pkcs12.h | 18 - .../webrtc_demo/third/include/openssl/pkcs7.h | 217 - .../webrtc_demo/third/include/openssl/pkcs8.h | 277 - .../third/include/openssl/poly1305.h | 49 - .../webrtc_demo/third/include/openssl/pool.h | 102 - .../webrtc_demo/third/include/openssl/rand.h | 114 - .../webrtc_demo/third/include/openssl/rc4.h | 96 - .../third/include/openssl/ripemd.h | 108 - .../webrtc_demo/third/include/openssl/rsa.h | 818 - .../third/include/openssl/safestack.h | 16 - .../webrtc_demo/third/include/openssl/sha.h | 294 - .../third/include/openssl/siphash.h | 37 - .../webrtc_demo/third/include/openssl/span.h | 200 - .../webrtc_demo/third/include/openssl/srtp.h | 18 - .../webrtc_demo/third/include/openssl/ssl.h | 5330 ------- .../webrtc_demo/third/include/openssl/ssl3.h | 333 - .../webrtc_demo/third/include/openssl/stack.h | 542 - .../third/include/openssl/thread.h | 191 - .../webrtc_demo/third/include/openssl/tls1.h | 654 - .../third/include/openssl/trust_token.h | 310 - .../third/include/openssl/type_check.h | 90 - .../webrtc_demo/third/include/openssl/x509.h | 1803 --- .../third/include/openssl/x509_vfy.h | 681 - .../third/include/openssl/x509v3.h | 986 -- .../include/p2p/base/async_stun_tcp_socket.h | 52 - .../p2p/base/basic_async_resolver_factory.h | 50 - .../include/p2p/base/basic_ice_controller.h | 165 - .../p2p/base/basic_packet_socket_factory.h | 61 - .../p2p/base/candidate_pair_interface.h | 28 - .../third/include/p2p/base/connection.h | 486 - .../third/include/p2p/base/connection_info.h | 80 - .../p2p/base/default_ice_transport_factory.h | 58 - .../third/include/p2p/base/dtls_transport.h | 256 - .../include/p2p/base/dtls_transport_factory.h | 40 - .../p2p/base/dtls_transport_internal.h | 162 - .../include/p2p/base/fake_dtls_transport.h | 306 - .../include/p2p/base/fake_ice_transport.h | 440 - .../include/p2p/base/fake_packet_transport.h | 143 - .../include/p2p/base/fake_port_allocator.h | 249 - .../base/ice_controller_factory_interface.h | 40 - .../p2p/base/ice_controller_interface.h | 151 - .../p2p/base/ice_credentials_iterator.h | 37 - .../include/p2p/base/ice_transport_internal.h | 331 - .../third/include/p2p/base/mdns_message.h | 206 - .../include/p2p/base/mock_async_resolver.h | 56 - .../include/p2p/base/mock_ice_transport.h | 90 - .../third/include/p2p/base/p2p_constants.h | 114 - .../include/p2p/base/p2p_transport_channel.h | 455 - .../p2p_transport_channel_ice_field_trials.h | 68 - .../p2p/base/packet_transport_internal.h | 108 - .../webrtc_demo/third/include/p2p/base/port.h | 499 - .../third/include/p2p/base/port_allocator.h | 670 - .../third/include/p2p/base/port_interface.h | 145 - .../third/include/p2p/base/pseudo_tcp.h | 295 - .../include/p2p/base/regathering_controller.h | 97 - .../third/include/p2p/base/stun_port.h | 295 - .../third/include/p2p/base/stun_request.h | 157 - .../third/include/p2p/base/stun_server.h | 71 - .../third/include/p2p/base/tcp_port.h | 191 - .../third/include/p2p/base/test_stun_server.h | 45 - .../include/p2p/base/test_turn_customizer.h | 59 - .../third/include/p2p/base/test_turn_server.h | 155 - .../include/p2p/base/transport_description.h | 153 - .../p2p/base/transport_description_factory.h | 86 - .../third/include/p2p/base/transport_info.h | 42 - .../third/include/p2p/base/turn_port.h | 438 - .../third/include/p2p/base/turn_server.h | 359 - .../third/include/p2p/base/udp_port.h | 17 - .../include/p2p/client/basic_port_allocator.h | 413 - .../p2p/client/relay_port_factory_interface.h | 70 - .../include/p2p/client/turn_port_factory.h | 37 - .../include/p2p/stunprober/stun_prober.h | 250 - .../third/include/pc/audio_rtp_receiver.h | 149 - .../third/include/pc/audio_track.h | 61 - .../webrtc_demo/third/include/pc/channel.h | 574 - .../third/include/pc/channel_interface.h | 77 - .../third/include/pc/channel_manager.h | 160 - .../third/include/pc/connection_context.h | 130 - .../include/pc/data_channel_controller.h | 250 - .../third/include/pc/data_channel_utils.h | 64 - .../third/include/pc/dtls_srtp_transport.h | 104 - .../third/include/pc/dtls_transport.h | 76 - .../third/include/pc/dtmf_sender.h | 122 - .../third/include/pc/external_hmac.h | 72 - .../third/include/pc/ice_server_parsing.h | 37 - .../third/include/pc/ice_transport.h | 53 - .../third/include/pc/jitter_buffer_delay.h | 51 - .../pc/jitter_buffer_delay_interface.h | 39 - .../include/pc/jitter_buffer_delay_proxy.h | 31 - .../third/include/pc/jsep_transport.h | 334 - .../include/pc/jsep_transport_controller.h | 505 - .../third/include/pc/local_audio_source.h | 50 - .../third/include/pc/media_protocol_names.h | 35 - .../third/include/pc/media_session.h | 447 - .../third/include/pc/media_stream.h | 58 - .../third/include/pc/media_stream_observer.h | 48 - .../third/include/pc/peer_connection.h | 720 - .../include/pc/peer_connection_factory.h | 167 - .../include/pc/peer_connection_internal.h | 93 - .../pc/peer_connection_message_handler.h | 62 - .../include/pc/peer_connection_wrapper.h | 196 - .../third/include/pc/remote_audio_source.h | 102 - .../third/include/pc/rtc_stats_collector.h | 314 - .../third/include/pc/rtc_stats_traversal.h | 44 - .../third/include/pc/rtcp_mux_filter.h | 78 - .../third/include/pc/rtp_data_channel.h | 205 - .../third/include/pc/rtp_media_utils.h | 63 - .../include/pc/rtp_parameters_conversion.h | 105 - .../third/include/pc/rtp_receiver.h | 106 - .../webrtc_demo/third/include/pc/rtp_sender.h | 384 - .../third/include/pc/rtp_transceiver.h | 297 - .../include/pc/rtp_transmission_manager.h | 269 - .../third/include/pc/rtp_transport.h | 144 - .../third/include/pc/rtp_transport_internal.h | 105 - .../third/include/pc/sctp_data_channel.h | 290 - .../include/pc/sctp_data_channel_transport.h | 54 - .../third/include/pc/sctp_transport.h | 90 - .../webrtc_demo/third/include/pc/sctp_utils.h | 49 - .../third/include/pc/sdp_offer_answer.h | 677 - .../third/include/pc/sdp_serializer.h | 61 - .../third/include/pc/sdp_state_provider.h | 54 - .../webrtc_demo/third/include/pc/sdp_utils.h | 62 - .../third/include/pc/session_description.h | 646 - .../third/include/pc/simulcast_description.h | 113 - .../third/include/pc/srtp_filter.h | 148 - .../third/include/pc/srtp_session.h | 149 - .../third/include/pc/srtp_transport.h | 174 - .../third/include/pc/stats_collector.h | 167 - .../include/pc/stats_collector_interface.h | 43 - .../third/include/pc/stream_collection.h | 102 - .../pc/test/android_test_initializer.h | 20 - .../pc/test/fake_audio_capture_module.h | 238 - .../pc/test/fake_data_channel_provider.h | 156 - .../pc/test/fake_peer_connection_base.h | 307 - .../pc/test/fake_peer_connection_for_stats.h | 440 - .../pc/test/fake_periodic_video_source.h | 101 - .../test/fake_periodic_video_track_source.h | 45 - .../pc/test/fake_rtc_certificate_generator.h | 244 - .../pc/test/fake_video_track_renderer.h | 33 - .../include/pc/test/fake_video_track_source.h | 54 - ...me_generator_capturer_video_track_source.h | 86 - .../pc/test/integration_test_helpers.h | 1850 --- .../include/pc/test/mock_channel_interface.h | 70 - .../third/include/pc/test/mock_data_channel.h | 72 - .../third/include/pc/test/mock_delayable.h | 36 - .../pc/test/mock_peer_connection_observers.h | 554 - .../pc/test/mock_rtp_receiver_internal.h | 80 - .../pc/test/mock_rtp_sender_internal.h | 83 - .../pc/test/peer_connection_test_wrapper.h | 133 - .../include/pc/test/rtc_stats_obtainer.h | 53 - .../include/pc/test/rtp_transport_test_util.h | 78 - .../third/include/pc/test/srtp_test_util.h | 45 - .../third/include/pc/test/test_sdp_strings.h | 184 - .../third/include/pc/track_media_info_map.h | 134 - .../third/include/pc/transceiver_list.h | 114 - .../third/include/pc/transport_stats.h | 49 - .../third/include/pc/usage_pattern.h | 77 - .../webrtc_demo/third/include/pc/used_ids.h | 168 - .../third/include/pc/video_rtp_receiver.h | 161 - .../third/include/pc/video_rtp_track_source.h | 92 - .../third/include/pc/video_track.h | 68 - .../third/include/pc/video_track_source.h | 66 - .../webrtc_demo/third/include/pc/webrtc_sdp.h | 117 - .../pc/webrtc_session_description_factory.h | 167 - .../third/include/rtc_base/arraysize.h | 32 - .../third/include/rtc_base/async_invoker.h | 173 - .../include/rtc_base/async_invoker_inl.h | 59 - .../include/rtc_base/async_packet_socket.h | 146 - .../third/include/rtc_base/async_resolver.h | 72 - .../rtc_base/async_resolver_interface.h | 51 - .../third/include/rtc_base/async_socket.h | 86 - .../third/include/rtc_base/async_tcp_socket.h | 112 - .../third/include/rtc_base/async_udp_socket.h | 72 - .../third/include/rtc_base/atomic_ops.h | 79 - .../third/include/rtc_base/bit_buffer.h | 146 - .../include/rtc_base/boringssl_certificate.h | 80 - .../include/rtc_base/boringssl_identity.h | 76 - .../include/rtc_base/bounded_inline_vector.h | 155 - .../rtc_base/bounded_inline_vector_impl.h | 225 - .../third/include/rtc_base/buffer.h | 437 - .../third/include/rtc_base/buffer_queue.h | 70 - .../third/include/rtc_base/byte_buffer.h | 171 - .../third/include/rtc_base/byte_order.h | 192 - .../third/include/rtc_base/callback_list.h | 214 - .../third/include/rtc_base/checks.h | 508 - .../third/include/rtc_base/compile_assert_c.h | 25 - .../include/rtc_base/constructor_magic.h | 20 - .../include/rtc_base/copy_on_write_buffer.h | 286 - .../third/include/rtc_base/cpu_time.h | 28 - .../third/include/rtc_base/crc32.h | 35 - .../third/include/rtc_base/crypt_string.h | 70 - .../include/rtc_base/data_rate_limiter.h | 58 - .../deprecated/recursive_critical_section.h | 104 - .../webrtc_demo/third/include/rtc_base/dscp.h | 45 - .../third/include/rtc_base/event.h | 86 - .../third/include/rtc_base/event_tracer.h | 82 - .../rtc_base/experiments/alr_experiment.h | 48 - .../balanced_degradation_settings.h | 142 - .../experiments/cpu_speed_experiment.h | 65 - .../experiments/encoder_info_settings.h | 83 - .../rtc_base/experiments/field_trial_list.h | 224 - .../rtc_base/experiments/field_trial_parser.h | 288 - .../rtc_base/experiments/field_trial_units.h | 40 - .../jitter_upper_bound_experiment.h | 31 - .../experiments/keyframe_interval_settings.h | 40 - .../min_video_bitrate_experiment.h | 28 - .../normalize_simulcast_size_experiment.h | 25 - .../experiments/quality_rampup_experiment.h | 52 - .../experiments/quality_scaler_settings.h | 47 - .../experiments/quality_scaling_experiment.h | 58 - .../experiments/rate_control_settings.h | 105 - .../experiments/rtt_mult_experiment.h | 35 - .../stable_target_rate_experiment.h | 44 - .../experiments/struct_parameters_parser.h | 110 - .../third/include/rtc_base/fake_clock.h | 83 - .../include/rtc_base/fake_mdns_responder.h | 74 - .../third/include/rtc_base/fake_network.h | 149 - .../include/rtc_base/fake_ssl_identity.h | 82 - .../include/rtc_base/file_rotating_stream.h | 170 - .../include/rtc_base/firewall_socket_server.h | 132 - .../third/include/rtc_base/format_macros.h | 59 - .../third/include/rtc_base/gtest_prod_util.h | 38 - .../third/include/rtc_base/gunit.h | 168 - .../third/include/rtc_base/helpers.h | 73 - .../third/include/rtc_base/http_common.h | 52 - .../third/include/rtc_base/ifaddrs_android.h | 38 - .../include/rtc_base/ifaddrs_converter.h | 45 - .../third/include/rtc_base/ignore_wundef.h | 33 - .../rtc_base/internal/default_socket_server.h | 24 - .../third/include/rtc_base/ip_address.h | 204 - .../third/include/rtc_base/location.h | 58 - .../third/include/rtc_base/log_sinks.h | 73 - .../third/include/rtc_base/logging.h | 712 - .../rtc_base/mdns_responder_interface.h | 50 - .../include/rtc_base/memory/aligned_malloc.h | 57 - .../include/rtc_base/memory/fifo_buffer.h | 146 - .../third/include/rtc_base/memory_stream.h | 61 - .../third/include/rtc_base/memory_usage.h | 24 - .../include/rtc_base/message_buffer_reader.h | 37 - .../third/include/rtc_base/message_digest.h | 131 - .../third/include/rtc_base/message_handler.h | 49 - .../third/include/rtc_base/nat_server.h | 130 - .../include/rtc_base/nat_socket_factory.h | 179 - .../third/include/rtc_base/nat_types.h | 47 - .../third/include/rtc_base/net_helper.h | 32 - .../third/include/rtc_base/net_helpers.h | 34 - .../third/include/rtc_base/network.h | 514 - .../include/rtc_base/network/sent_packet.h | 69 - .../include/rtc_base/network_constants.h | 57 - .../third/include/rtc_base/network_monitor.h | 117 - .../rtc_base/network_monitor_factory.h | 37 - .../third/include/rtc_base/network_route.h | 95 - .../include/rtc_base/null_socket_server.h | 39 - .../include/rtc_base/numerics/divide_round.h | 48 - .../event_based_exponential_moving_average.h | 70 - .../rtc_base/numerics/event_rate_counter.h | 44 - .../include/rtc_base/numerics/exp_filter.h | 48 - .../numerics/histogram_percentile_counter.h | 45 - .../include/rtc_base/numerics/math_utils.h | 75 - .../third/include/rtc_base/numerics/mod_ops.h | 142 - .../rtc_base/numerics/moving_average.h | 66 - .../rtc_base/numerics/moving_max_counter.h | 116 - .../rtc_base/numerics/moving_median_filter.h | 90 - .../rtc_base/numerics/percentile_filter.h | 124 - .../rtc_base/numerics/running_statistics.h | 161 - .../include/rtc_base/numerics/safe_compare.h | 176 - .../rtc_base/numerics/safe_conversions.h | 74 - .../rtc_base/numerics/safe_conversions_impl.h | 177 - .../include/rtc_base/numerics/safe_minmax.h | 335 - .../rtc_base/numerics/sample_counter.h | 58 - .../include/rtc_base/numerics/sample_stats.h | 77 - .../rtc_base/numerics/sequence_number_util.h | 119 - .../third/include/rtc_base/one_time_event.h | 60 - .../third/include/rtc_base/openssl.h | 25 - .../third/include/rtc_base/openssl_adapter.h | 209 - .../include/rtc_base/openssl_certificate.h | 78 - .../third/include/rtc_base/openssl_digest.h | 50 - .../third/include/rtc_base/openssl_identity.h | 75 - .../third/include/rtc_base/openssl_key_pair.h | 60 - .../include/rtc_base/openssl_session_cache.h | 68 - .../include/rtc_base/openssl_stream_adapter.h | 256 - .../third/include/rtc_base/openssl_utility.h | 58 - .../third/include/rtc_base/operations_chain.h | 201 - .../include/rtc_base/physical_socket_server.h | 270 - .../third/include/rtc_base/platform_thread.h | 104 - .../include/rtc_base/platform_thread_types.h | 62 - .../third/include/rtc_base/protobuf_utils.h | 30 - .../third/include/rtc_base/proxy_info.h | 39 - .../third/include/rtc_base/proxy_server.h | 104 - .../third/include/rtc_base/race_checker.h | 78 - .../third/include/rtc_base/random.h | 96 - .../third/include/rtc_base/rate_limiter.h | 60 - .../third/include/rtc_base/rate_statistics.h | 105 - .../third/include/rtc_base/rate_tracker.h | 72 - .../third/include/rtc_base/ref_count.h | 67 - .../include/rtc_base/ref_counted_object.h | 88 - .../third/include/rtc_base/ref_counter.h | 75 - .../include/rtc_base/rolling_accumulator.h | 145 - .../third/include/rtc_base/rtc_certificate.h | 95 - .../rtc_base/rtc_certificate_generator.h | 89 - .../third/include/rtc_base/sanitizer.h | 144 - .../include/rtc_base/server_socket_adapters.h | 72 - .../third/include/rtc_base/sigslot_repeater.h | 56 - .../third/include/rtc_base/sigslot_tester.h | 240 - .../third/include/rtc_base/socket.h | 136 - .../third/include/rtc_base/socket_adapters.h | 170 - .../third/include/rtc_base/socket_address.h | 203 - .../include/rtc_base/socket_address_pair.h | 43 - .../third/include/rtc_base/socket_factory.h | 33 - .../third/include/rtc_base/socket_server.h | 63 - .../third/include/rtc_base/socket_stream.h | 64 - .../third/include/rtc_base/socket_unittest.h | 105 - .../third/include/rtc_base/ssl_adapter.h | 107 - .../third/include/rtc_base/ssl_certificate.h | 138 - .../third/include/rtc_base/ssl_fingerprint.h | 74 - .../third/include/rtc_base/ssl_identity.h | 172 - .../third/include/rtc_base/ssl_roots.h | 2761 ---- .../include/rtc_base/ssl_stream_adapter.h | 281 - .../third/include/rtc_base/stream.h | 164 - .../third/include/rtc_base/string_encode.h | 154 - .../third/include/rtc_base/string_to_number.h | 116 - .../third/include/rtc_base/string_utils.h | 93 - .../rtc_base/strings/audio_format_to_string.h | 24 - .../third/include/rtc_base/strings/json.h | 88 - .../include/rtc_base/strings/string_builder.h | 175 - .../include/rtc_base/strings/string_format.h | 31 - .../third/include/rtc_base/swap_queue.h | 249 - .../include/rtc_base/synchronization/mutex.h | 108 - .../rtc_base/synchronization/mutex_abseil.h | 38 - .../synchronization/mutex_critical_section.h | 55 - .../rtc_base/synchronization/mutex_pthread.h | 54 - .../sequence_checker_internal.h | 93 - .../include/rtc_base/synchronization/yield.h | 20 - .../rtc_base/synchronization/yield_policy.h | 38 - .../third/include/rtc_base/system/arch.h | 90 - .../include/rtc_base/system/asm_defines.h | 72 - .../third/include/rtc_base/system/assume.h | 73 - .../include/rtc_base/system/cocoa_threading.h | 24 - .../include/rtc_base/system/file_wrapper.h | 113 - .../include/rtc_base/system/gcd_helpers.h | 29 - .../include/rtc_base/system/ignore_warnings.h | 29 - .../third/include/rtc_base/system/inline.h | 31 - .../rtc_base/system/no_unique_address.h | 35 - .../include/rtc_base/system/rtc_export.h | 43 - .../rtc_base/system/rtc_export_template.h | 197 - .../include/rtc_base/system/thread_registry.h | 46 - .../third/include/rtc_base/system/unused.h | 24 - .../warn_current_thread_is_deadlocked.h | 24 - .../third/include/rtc_base/system_time.h | 22 - .../third/include/rtc_base/task_queue.h | 134 - .../include/rtc_base/task_queue_for_test.h | 81 - .../third/include/rtc_base/task_queue_gcd.h | 24 - .../include/rtc_base/task_queue_libevent.h | 24 - .../include/rtc_base/task_queue_stdlib.h | 24 - .../third/include/rtc_base/task_queue_win.h | 24 - .../task_utils/pending_task_safety_flag.h | 141 - .../rtc_base/task_utils/repeating_task.h | 142 - .../rtc_base/task_utils/to_queued_task.h | 111 - .../third/include/rtc_base/test_base64.h | 2111 --- .../rtc_base/test_certificate_verifier.h | 34 - .../third/include/rtc_base/test_client.h | 118 - .../third/include/rtc_base/test_echo_server.h | 72 - .../third/include/rtc_base/test_utils.h | 101 - .../rtc_base/third_party/base64/base64.h | 125 - .../rtc_base/third_party/sigslot/sigslot.h | 643 - .../third/include/rtc_base/thread.h | 713 - .../include/rtc_base/thread_annotations.h | 95 - .../third/include/rtc_base/thread_message.h | 117 - .../rtc_base/time/timestamp_extrapolator.h | 52 - .../third/include/rtc_base/time_utils.h | 145 - .../include/rtc_base/timestamp_aligner.h | 85 - .../third/include/rtc_base/trace_event.h | 1022 -- .../third/include/rtc_base/type_traits.h | 140 - .../include/rtc_base/unique_id_generator.h | 134 - .../third/include/rtc_base/units/unit_base.h | 306 - .../third/include/rtc_base/untyped_function.h | 324 - .../include/rtc_base/virtual_socket_server.h | 455 - .../third/include/rtc_base/weak_ptr.h | 275 - .../rtc_base/win/create_direct3d_device.h | 34 - .../rtc_base/win/get_activation_factory.h | 53 - .../third/include/rtc_base/win/hstring.h | 30 - .../rtc_base/win/scoped_com_initializer.h | 56 - .../include/rtc_base/win/windows_version.h | 152 - .../third/include/rtc_base/win32.h | 104 - .../include/rtc_base/win32_socket_init.h | 41 - .../include/rtc_base/win32_socket_server.h | 153 - .../third/include/rtc_base/win32_window.h | 70 - .../third/include/rtc_base/zero_memory.h | 35 - .../third/include/sdk/media_constraints.h | 137 - .../third/include/stats/test/rtc_test_stats.h | 49 - .../include/system_wrappers/include/clock.h | 91 - .../include/cpu_features_wrapper.h | 42 - .../system_wrappers/include/cpu_info.h | 28 - .../system_wrappers/include/field_trial.h | 102 - .../include/system_wrappers/include/metrics.h | 438 - .../system_wrappers/include/ntp_time.h | 124 - .../include/rtp_to_ntp_estimator.h | 81 - .../include/system_wrappers/include/sleep.h | 24 - .../video/adaptation/balanced_constraint.h | 51 - .../video/adaptation/bitrate_constraint.h | 53 - .../video/adaptation/encode_usage_resource.h | 70 - .../video/adaptation/overuse_frame_detector.h | 170 - .../video/adaptation/pixel_limit_resource.h | 60 - .../quality_rampup_experiment_helper.h | 68 - .../adaptation/quality_scaler_resource.h | 61 - .../video_stream_encoder_resource.h | 55 - .../video_stream_encoder_resource_manager.h | 222 - .../third/include/video/alignment_adjuster.h | 42 - .../include/video/buffered_frame_decryptor.h | 102 - .../third/include/video/call_stats.h | 123 - .../third/include/video/call_stats2.h | 135 - .../include/video/encoder_bitrate_adjuster.h | 75 - .../video/encoder_overshoot_detector.h | 78 - .../include/video/encoder_rtcp_feedback.h | 61 - .../end_to_end_tests/multi_stream_tester.h | 63 - .../include/video/frame_dumping_decoder.h | 28 - .../video/frame_encode_metadata_writer.h | 84 - .../video/quality_limitation_reason_tracker.h | 56 - .../third/include/video/quality_threshold.h | 53 - .../include/video/receive_statistics_proxy.h | 205 - .../include/video/receive_statistics_proxy2.h | 223 - .../third/include/video/report_block_stats.h | 62 - .../include/video/rtp_streams_synchronizer.h | 67 - .../include/video/rtp_streams_synchronizer2.h | 75 - .../include/video/rtp_video_stream_receiver.h | 405 - .../video/rtp_video_stream_receiver2.h | 355 - ...ream_receiver_frame_transformer_delegate.h | 74 - .../third/include/video/send_delay_stats.h | 88 - .../include/video/send_statistics_proxy.h | 381 - .../third/include/video/stats_counter.h | 292 - .../include/video/stream_synchronization.h | 71 - .../video/test/mock_video_stream_encoder.h | 66 - .../third/include/video/transport_adapter.h | 43 - .../third/include/video/video_analyzer.h | 320 - .../third/include/video/video_loopback.h | 19 - .../include/video/video_quality_observer.h | 99 - .../include/video/video_quality_observer2.h | 101 - .../third/include/video/video_quality_test.h | 147 - .../include/video/video_receive_stream.h | 237 - .../include/video/video_receive_stream2.h | 282 - .../third/include/video/video_send_stream.h | 114 - .../include/video/video_send_stream_impl.h | 203 - .../video/video_source_sink_controller.h | 91 - .../include/video/video_stream_decoder.h | 63 - .../include/video/video_stream_decoder2.h | 59 - .../include/video/video_stream_decoder_impl.h | 123 - .../include/video/video_stream_encoder.h | 424 - client/webrtc/webrtc_demo/webrtc_demo.pro | 41 - .../webrtc/webrtc_demo/webrtc_demo.pro.user | 319 - .../webrtc_demo/webrtc_demo.pro.user.978c9f3 | 319 - 3553 files changed, 564649 deletions(-) rename client/{qt_gl_ => rtmp_demo}/yuvgl/components/toast.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/components/toast.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/components/toast.ui (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/conanfile.txt (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/cplaywidget.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/cplaywidget.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/inc/Base64.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/inc/BitmapEx.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/inc/qedit.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/inc/utils.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/inc/winuuids.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/inc/zlib.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/COPYING (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/Makefile (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/amf.c (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/amf.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/bytes.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/dh.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/dhgroups.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/handshake.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/hashswf.c (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/http.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/librtmp.3 (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/librtmp.3.html (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/librtmp.pc.in (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/log.c (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/log.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/parseurl.c (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/rtmp.c (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/rtmp.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/rtmp_sys.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/strncasecmp.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/librtmp/zlib.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/main.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/mainwindow.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/mainwindow.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/mainwindow.ui (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/AACAudioCoder.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/AACAudioCoder.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/AACDecoder.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/AACDecoder.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/AudioCapture.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/AudioCapture.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/AudioPlayer.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/AudioPlayer.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/CameraCapture.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/CameraCapture.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/DXGICapture.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/DXGICapture.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/DXGICaptureHelper.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/DXGICaptureTypes.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/Debuger.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/H264Docoder.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/H264Docoder.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/ImageUtil.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/ImageUtil.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/RtmpPuller.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/RtmpPuller.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/RtmpPuller2.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/RtmpPuller2.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/RtmpPusher.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/RtmpPusher.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/SdlPlayer.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/VideoCoder.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/VideoCoder.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/audiocaptureff.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/audiocaptureff.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/imgutil.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/librtmp_send264.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/screen_capture.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/screen_capture.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/sps_decode.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/media/sps_decode.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/qedit.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/readme.md (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/ui_mainwindow.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/ui_process.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/ui_qsstoast.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/ui_toast.h (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/utils/Base64.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/utils/Debuger.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/utils/utils.cpp (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/yuvgl.pro (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/yuvgl.pro.user (100%) rename client/{qt_gl_ => rtmp_demo}/yuvgl/zlib.h (100%) delete mode 100644 client/webrtc/webrtc_demo/src/cplaywidget.cpp delete mode 100644 client/webrtc/webrtc_demo/src/cplaywidget.h delete mode 100644 client/webrtc/webrtc_demo/src/main.cpp delete mode 100644 client/webrtc/webrtc_demo/src/mainwindow.cpp delete mode 100644 client/webrtc/webrtc_demo/src/mainwindow.h delete mode 100644 client/webrtc/webrtc_demo/src/mainwindow.ui delete mode 100644 client/webrtc/webrtc_demo/src/video_capture.cpp delete mode 100644 client/webrtc/webrtc_demo/src/video_capture.h delete mode 100644 client/webrtc/webrtc_demo/src/video_capturer_test.cpp delete mode 100644 client/webrtc/webrtc_demo/src/video_capturer_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/algorithm/algorithm.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/algorithm/container.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/attributes.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/call_once.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/casts.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/const_init.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/dynamic_annotations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/atomic_hook.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/atomic_hook_test_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/cycleclock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/direct_mmap.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/endian.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/errno_saver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/exception_safety_testing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/exception_testing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/exponential_biased.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/fast_type_id.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/hide_ptr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/identity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/inline_variable.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/inline_variable_testing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/invoke.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/low_level_alloc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/low_level_scheduling.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/per_thread_tls.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/periodic_sampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/pretty_function.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/raw_logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/scheduling_mode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/scoped_set_env.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_akaros.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_linux.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_posix.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_wait.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_win32.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/strerror.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/sysinfo.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/thread_identity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/throw_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/tsan_mutex_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/unaligned_access.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/internal/unscaledcycleclock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/log_severity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/optimization.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/options.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/policy_checks.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/base/thread_annotations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/cleanup/cleanup.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/cleanup/internal/cleanup.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/btree_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/btree_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/btree_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/fixed_array.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/flat_hash_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/flat_hash_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/inlined_vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/btree.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/btree_container.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/compressed_tuple.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/container_memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/counting_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_function_defaults.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_generator_testing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_policy_testing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_policy_traits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtable_debug.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtable_debug_hooks.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtablez_sampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/have_sse.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/inlined_vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/layout.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/node_hash_policy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/raw_hash_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/raw_hash_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/test_instance_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/tracked.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_constructor_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_lookup_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_members_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_modifiers_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_constructor_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_lookup_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_members_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_modifiers_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/node_hash_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/container/node_hash_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/failure_signal_handler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/address_is_readable.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/demangle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/elf_mem_image.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/examine_stack.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stack_consumption.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_aarch64-inl.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_arm-inl.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_generic-inl.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_powerpc-inl.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_unimplemented-inl.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_win32-inl.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_x86-inl.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/symbolize.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/internal/vdso_support.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/leak_check.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/stacktrace.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_darwin.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_elf.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_unimplemented.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_win32.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/commandlineflag.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/declare.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/flag.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/commandlineflag.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/flag.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/parse.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/path_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/private_handle_accessor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/program_name.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/registry.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/sequence_lock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/internal/usage.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/marshalling.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/parse.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/reflection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/usage.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/flags/usage_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/functional/bind_front.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/functional/function_ref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/functional/internal/front_binder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/functional/internal/function_ref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/hash/hash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/hash/hash_testing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/hash/internal/city.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/hash/internal/hash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/hash/internal/spy_hash_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/hash/internal/wyhash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/memory/memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/meta/type_traits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/numeric/bits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/numeric/int128.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/numeric/int128_have_intrinsic.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/numeric/int128_no_intrinsic.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/numeric/internal/bits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/numeric/internal/representation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/bernoulli_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/beta_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/bit_gen_ref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/discrete_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/distributions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/exponential_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/gaussian_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/chi_square.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/distribution_caller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/distribution_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/explicit_seed_seq.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/fast_uniform_bits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/fastmath.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/generate_real.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/iostream_state_saver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/mock_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/mock_overload_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/nanobenchmark.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/nonsecure_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/pcg_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/platform.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/pool_urbg.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/randen.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/randen_detect.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/randen_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/randen_hwaes.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/randen_slow.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/randen_traits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/salted_seed_seq.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/seed_material.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/sequence_urbg.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/traits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/uniform_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/internal/wide_multiply.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/log_uniform_int_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/mock_distributions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/mocking_bit_gen.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/poisson_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/random.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/seed_gen_exception.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/seed_sequences.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/uniform_int_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/uniform_real_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/random/zipf_distribution.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/status/internal/status_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/status/internal/statusor_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/status/status.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/status/status_payload_printer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/status/statusor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/ascii.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/charconv.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/cord.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/cord_test_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/escaping.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/char_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/charconv_bigint.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/charconv_parse.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/cord_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/cord_rep_flat.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/cord_rep_ring.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/cord_rep_ring_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/escaping.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/escaping_test_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/memutil.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/numbers_test_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/ostringstream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/pow10_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/resize_uninitialized.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/stl_type_traits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_format/arg.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_format/bind.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_format/checker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_format/extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_format/float_conversion.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_format/output.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_format/parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_join_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/str_split_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/string_constant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/internal/utf8.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/match.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/numbers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/str_cat.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/str_format.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/str_join.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/str_replace.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/str_split.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/string_view.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/strip.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/strings/substitute.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/barrier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/blocking_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/internal/create_thread_identity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/internal/futex.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/internal/graphcycles.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/internal/kernel_timeout.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/internal/per_thread_sem.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/internal/thread_pool.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/internal/waiter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/mutex.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/synchronization/notification.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/civil_time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/include/cctz/civil_time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/include/cctz/civil_time_detail.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/include/cctz/time_zone.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/include/cctz/zone_info_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/src/time_zone_fixed.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/src/time_zone_if.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/src/time_zone_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/src/time_zone_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/src/time_zone_libc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/src/time_zone_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/cctz/src/tzfile.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/get_current_time_chrono.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/get_current_time_posix.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/internal/zoneinfo.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/time/time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/any.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/bad_any_cast.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/bad_optional_access.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/bad_variant_access.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/compare.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/conformance_aliases.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/conformance_archetype.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/conformance_profile.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/conformance_testing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/conformance_testing_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/optional.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/parentheses.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/span.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/transform_args.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/internal/variant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/optional.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/span.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/types/variant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/absl/utility/utility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/adaptation/resource.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/array_view.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/async_dns_resolver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/async_resolver_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/audio_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/audio_frame_processor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/audio_mixer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/channel_layout.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/echo_canceller3_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/echo_canceller3_config_json.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/echo_canceller3_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/echo_control.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio/echo_detector_creator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/L16/audio_decoder_L16.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/L16/audio_encoder_L16.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/audio_codec_pair_id.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/audio_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/audio_decoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/audio_decoder_factory_template.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/audio_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/audio_encoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/audio_encoder_factory_template.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/audio_format.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/builtin_audio_decoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/builtin_audio_encoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/g711/audio_decoder_g711.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/g711/audio_encoder_g711.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/g722/audio_decoder_g722.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/g722/audio_encoder_g722.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/g722/audio_encoder_g722_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/ilbc/audio_decoder_ilbc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/ilbc/audio_encoder_ilbc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/ilbc/audio_encoder_ilbc_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/isac/audio_decoder_isac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/isac/audio_decoder_isac_fix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/isac/audio_decoder_isac_float.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/isac/audio_encoder_isac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/isac/audio_encoder_isac_fix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/isac/audio_encoder_isac_float.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus/audio_decoder_multi_channel_opus_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus/audio_decoder_opus.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus/audio_encoder_multi_channel_opus_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus/audio_encoder_opus.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus/audio_encoder_opus_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus_audio_decoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_codecs/opus_audio_encoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/audio_options.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/call/audio_sink.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/call/bitrate_allocation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/call/call_factory_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/call/transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/candidate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/create_peerconnection_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/crypto/crypto_options.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/crypto/frame_decryptor_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/crypto/frame_encryptor_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/crypto_params.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/data_channel_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/dtls_transport_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/dtmf_sender_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/fec_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/fec_controller_override.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/frame_transformer_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/function_view.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/ice_transport_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/ice_transport_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/jsep.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/jsep_ice_candidate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/jsep_session_description.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/media_stream_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/media_stream_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/media_stream_track.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/media_stream_track_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/media_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/neteq/custom_neteq_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/neteq/default_neteq_controller_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/neteq/neteq.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/neteq/neteq_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/neteq/neteq_controller_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/neteq/neteq_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/neteq/tick_timer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/network_state_predictor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/notifier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/numerics/samples_stats_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/packet_socket_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/peer_connection_factory_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/peer_connection_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/peer_connection_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/priority.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/ref_counted_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtc_error.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtc_event_log/rtc_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtc_event_log/rtc_event_log.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtc_event_log/rtc_event_log_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtc_event_log/rtc_event_log_factory_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtc_event_log_output.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtc_event_log_output_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtp_headers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtp_packet_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtp_packet_infos.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtp_parameters.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtp_receiver_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtp_sender_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtp_transceiver_direction.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/rtp_transceiver_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/scoped_refptr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/sctp_transport_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/sequence_checker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/set_local_description_observer_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/set_remote_description_observer_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/stats/rtc_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/stats/rtc_stats_collector_callback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/stats/rtc_stats_report.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/stats/rtcstats_objects.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/stats_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/task_queue/default_task_queue_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/task_queue/queued_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/task_queue/task_queue_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/task_queue/task_queue_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/task_queue/task_queue_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/audio_quality_analyzer_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/audioproc_float.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/create_frame_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/create_network_emulation_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/create_peer_connection_quality_test_frame_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/create_peerconnection_quality_test_fixture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/create_simulcast_test_fixture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/create_time_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/create_video_quality_test_fixture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/create_videocodec_test_fixture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/dummy_peer_connection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/fake_frame_decryptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/fake_frame_encryptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/frame_generator_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_audio_mixer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_data_channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_fec_controller_override.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_frame_decryptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_frame_encryptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_media_stream_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_peer_connection_factory_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_peerconnectioninterface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_rtp_transceiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_rtpreceiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_rtpsender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_transformable_video_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_video_bitrate_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_video_bitrate_allocator_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_video_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_video_decoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_video_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/mock_video_encoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/neteq_simulator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/neteq_simulator_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/network_emulation/create_cross_traffic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/network_emulation/cross_traffic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/network_emulation/network_emulation_interfaces.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/network_emulation_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/peerconnection_quality_test_fixture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/simulated_network.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/simulcast_test_fixture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/stats_observer_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/test_dependency_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/time_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/track_id_stream_info_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/video/function_video_decoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/video/function_video_encoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/video_quality_analyzer_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/video_quality_test_fixture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/videocodec_test_fixture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/test/videocodec_test_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/bitrate_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/data_channel_transport_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/enums.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/field_trial_based_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/goog_cc_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/network_control.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/network_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/rtp/dependency_descriptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/rtp/rtp_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/sctp_transport_factory_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/stun.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/test/create_feedback_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/test/feedback_generator_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/test/mock_network_control.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/transport/webrtc_key_value_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/turn_customizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/uma_metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/units/data_rate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/units/data_size.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/units/frequency.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/units/time_delta.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/units/timestamp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/builtin_video_bitrate_allocator_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/color_space.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/encoded_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/encoded_image.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/hdr_metadata.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/i010_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/i420_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/nv12_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/recordable_encoded_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/test/mock_recordable_encoded_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_adaptation_counters.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_adaptation_reason.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_bitrate_allocation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_bitrate_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_bitrate_allocator_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_codec_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_codec_type.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_content_type.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_frame_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_frame_metadata.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_frame_type.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_layers_allocation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_rotation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_sink_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_source_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_stream_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_stream_decoder_create.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_stream_encoder_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_stream_encoder_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_stream_encoder_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video/video_timing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/bitstream_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/builtin_video_decoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/builtin_video_encoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/sdp_video_format.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/spatial_layer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/video_codec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/video_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/video_decoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/video_decoder_software_fallback_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/video_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/video_encoder_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/video_encoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/video_encoder_software_fallback_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/vp8_frame_buffer_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/vp8_frame_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/vp8_temporal_layers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_codecs/vp8_temporal_layers_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/video_track_source_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/test/mock_voip_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/voip_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/voip_codec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/voip_dtmf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/voip_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/voip_engine_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/voip_network.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/voip_statistics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/api/voip/voip_volume_control.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/audio_level.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/audio_receive_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/audio_send_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/audio_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/audio_transport_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/channel_receive.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/channel_receive_frame_transformer_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/channel_send.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/channel_send_frame_transformer_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/conversion.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/mock_voe_channel_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/null_audio_poller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/remix_resample.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/test/audio_bwe_integration_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/test/audio_end_to_end_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/utility/audio_frame_operations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/utility/channel_mixer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/utility/channel_mixing_matrix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/voip/audio_channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/voip/audio_egress.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/voip/audio_ingress.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/voip/test/mock_task_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/audio/voip/voip_core.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_check.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_interception_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_internals.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_override_cpp_symbols.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_override_glibc_weak_symbols.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_override_libc_symbols.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_override_linker_wrapped_symbols.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_override_mac_default_zone.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_override_mac_symbols.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/allocator_shim_override_ucrt_symbols_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/malloc_zone_functions_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/address_pool_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/address_pool_manager_bitmap.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/address_pool_manager_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/address_space_randomization.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/arm_bti_test_functions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/extended_api.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/memory_reclaimer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/oom.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/oom_callback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/page_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/page_allocator_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/page_allocator_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/page_allocator_internals_fuchsia.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/page_allocator_internals_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/page_allocator_internals_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_address_space.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_alloc-inl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_alloc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_alloc_check.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_alloc_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_alloc_features.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_alloc_forward.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_alloc_hooks.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_bucket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_cookie.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_direct_map_extent.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_freelist_entry.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_lock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_oom.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_page.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_ref_count.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_root.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/partition_tls.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/random.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/spinning_mutex.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/starscan/object_bitmap.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/starscan/pcscan.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/thread_cache.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/partition_allocator/yield_processor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/allocator/winheap_stubs_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/android_hardware_buffer_compat.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/android_image_reader_abi.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/android_image_reader_compat.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/apk_assets.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/application_status_listener.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/base_jni_onload.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/build_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/bundle_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/callback_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/child_process_binding_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/content_uri_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/early_trace_event_binding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/event_log.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/int_string_callback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/java_exception_reporter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/java_handler_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/java_heap_dump_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/java_runtime.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_array.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_generator/jni_generator_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_generator/sample_for_tests.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_int_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_registrar.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_string.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/jni_weak_ref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/library_loader/anchor_functions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/library_loader/library_loader_hooks.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/library_loader/library_prefetcher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/linker/legacy_linker_jni.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/linker/linker_jni.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/linker/modern_linker_jni.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/locale_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/memory_pressure_listener_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/orderfile/orderfile_instrumentation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/path_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/radio_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/reached_addresses_bitset.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/reached_code_profiler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/scoped_hardware_buffer_fence_sync.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/scoped_hardware_buffer_handle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/scoped_java_ref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/sys_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/task_scheduler/post_task_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/task_scheduler/task_runner_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/timezone_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/trace_event_binding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/android/unguessable_token_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/at_exit.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/atomic_ref_count.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/atomic_sequence_num.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/atomicops.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/atomicops_internals_atomicword_compat.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/atomicops_internals_portable.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/atomicops_internals_x86_msvc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/auto_reset.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/barrier_closure.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base64.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base64url.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base_export.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base_paths.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base_paths_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base_paths_fuchsia.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base_paths_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base_paths_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base_paths_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/base_switches.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/big_endian.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/bind.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/bind_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/bind_post_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/bind_post_task_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/bit_cast.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/bits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/build_time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/callback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/callback_forward.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/callback_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/callback_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/callback_list.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/cancelable_callback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/check.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/check_op.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/command_line.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/compiler_specific.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/component_export.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/adapters.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/buffer_iterator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/checked_iterators.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/checked_range.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/circular_deque.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/contains.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/contiguous_iterator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/fixed_flat_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/fixed_flat_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/flat_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/flat_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/flat_tree.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/id_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/intrusive_heap.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/linked_list.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/mru_cache.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/ring_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/small_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/span.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/stack.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/stack_container.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/unique_ptr_adapters.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/containers/vector_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/cpu.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/cpu_affinity_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/critical_closure.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/dcheck_is_on.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/activity_analyzer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/activity_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/alias.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/asan_invalid_access.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/close_handle_hook_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/crash_logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/debugger.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/dump_without_crashing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/elf_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/gdi_debug_util_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/invalid_access_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/leak_annotations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/proc_maps_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/profiler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/stack_trace.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/task_trace.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/debug/test_elf_image_builder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/deferred_sequenced_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/enterprise_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/environment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/export_template.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/feature_list.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/file_descriptor_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/file_descriptor_store.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/file_version_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/file_version_info_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/file_version_info_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/dir_reader_fallback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/dir_reader_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/dir_reader_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_descriptor_watcher_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_enumerator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_path.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_path_watcher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_path_watcher_fsevents.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_path_watcher_kqueue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_path_watcher_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_tracing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/file_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/important_file_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/important_file_writer_cleaner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/memory_mapped_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/platform_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/scoped_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/files/scoped_temp_dir.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/format_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/default_job.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/file_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/filtered_service_directory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/fuchsia_logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/intl_profile_watcher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/process_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/scoped_fx_logger.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/scoped_service_binding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/scoped_service_publisher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/service_directory_test_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/service_provider_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/startup_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/test_component_context_for_process.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/test_component_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/test_interface_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/fuchsia/test_log_listener_safe.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/functional/identity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/functional/invoke.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/functional/not_fn.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/gtest_prod_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/guid.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/hash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/legacy_hash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/md5.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/md5_boringssl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/md5_constexpr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/md5_constexpr_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/md5_nacl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/sha1.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/sha1_boringssl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/hash/sha1_nacl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/base_i18n_export.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/base_i18n_switches.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/break_iterator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/case_conversion.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/char_iterator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/character_encoding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/encoding_detection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/file_util_icu.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/i18n_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/icu_string_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/icu_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/message_formatter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/number_formatting.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/rtl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/streaming_utf8_validator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/string_compare.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/string_search.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/time_formatting.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/timezone.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/unicodestring.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/i18n/utf8_validator_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/immediate_crash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ios/block_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ios/crb_protocol_observers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ios/device_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ios/ios_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ios/ns_error_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ios/ns_range.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ios/scoped_critical_action.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ios/weak_nsobject.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/json/json_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/json/json_file_value_serializer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/json/json_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/json/json_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/json/json_string_value_serializer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/json/json_value_converter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/json/json_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/json/string_escape.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/lazy_instance.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/lazy_instance_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/linux_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/location.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/logging_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/authorization_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/bundle_locations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/call_with_eh_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/dispatch_source_mach.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/foundation_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/launch_services_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/launchd.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/mac_logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/mac_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/mach_logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/mach_port_rendezvous.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/objc_release_properties.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/os_crash_dumps.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_aedesc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_authorizationref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_block.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_cffiledescriptorref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_cftyperef.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_dispatch_object.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_ionotificationportref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_ioobject.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_ioplugininterface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_launch_data.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_mach_msg_destroy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_mach_port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_mach_vm.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_nsautorelease_pool.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_nsobject.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_objc_class_swizzler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_sending_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/scoped_typeref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/mac/sdk_forward_declarations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/aligned_memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/checked_ptr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/discardable_memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/discardable_memory_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/discardable_memory_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/discardable_shared_memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/free_deleter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/madv_free_discardable_memory_allocator_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/madv_free_discardable_memory_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/memory_pressure_listener.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/memory_pressure_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/nonscannable_memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/platform_shared_memory_region.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/ptr_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/raw_scoped_refptr_mismatch_checker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/read_only_shared_memory_region.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/ref_counted.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/ref_counted_delete_on_sequence.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/ref_counted_memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/scoped_policy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/scoped_refptr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/shared_memory_hooks.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/shared_memory_mapping.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/shared_memory_security_policy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/shared_memory_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/singleton.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/tagging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/unsafe_shared_memory_pool.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/unsafe_shared_memory_region.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/weak_ptr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/memory/writable_shared_memory_region.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_default.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_for_io.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_for_ui.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_fuchsia.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_glib.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_io_ios.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_kqueue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_libevent.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_type.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/message_pump_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/timer_slack.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/watchable_io_message_pump_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/message_loop/work_id_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/bucket_ranges.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/crc32.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/dummy_histogram.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/field_trial.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/field_trial_param_associator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/field_trial_params.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_delta_serialization.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_flattener.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_functions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_macros_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_macros_local.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_samples.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/histogram_snapshot_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/metrics_hashes.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/persistent_histogram_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/persistent_histogram_storage.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/persistent_memory_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/persistent_sample_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/record_histogram_checker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/sample_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/sample_vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/single_sample_metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/sparse_histogram.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/statistics_recorder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/user_metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/metrics/user_metrics_action.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/native_library.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/nix/mime_util_xdg.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/nix/xdg_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/no_destructor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/notreached.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/checked_math.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/checked_math_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/clamped_math.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/clamped_math_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/math_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/ranges.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/safe_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/safe_conversions_arm_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/safe_conversions_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/safe_math.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/safe_math_arm_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/safe_math_clang_gcc_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/numerics/safe_math_shared_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/observer_list.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/observer_list_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/observer_list_threadsafe.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/observer_list_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/one_shot_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/optional.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/os_compat_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/os_compat_nacl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/parameter_pack.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/path_service.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/pending_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/pickle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/posix/can_lower_nice_to.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/posix/eintr_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/posix/file_descriptor_shuffle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/posix/global_descriptors.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/posix/safe_strerror.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/posix/unix_domain_socket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/post_task_and_reply_with_result_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/power_monitor/power_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/power_monitor/power_monitor_device_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/power_monitor/power_monitor_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/power_monitor/power_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/power_monitor/test/fake_power_monitor_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/power_monitor/thermal_state_observer_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/environment_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/internal_aix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/internal_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/kill.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/launch.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/memory_unittest_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/port_provider_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/process.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/process_handle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/process_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/process_iterator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/process_metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/process/process_metrics_iocounters.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/arm_cfi_table.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/chrome_unwinder_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/metadata_recorder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/module_cache.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/native_unwinder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/native_unwinder_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/native_unwinder_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/native_unwinder_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/profile_builder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/register_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/sample_metadata.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/sampling_profiler_thread_token.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/stack_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/stack_copier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/stack_copier_signal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/stack_copier_suspend.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/stack_sampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/stack_sampler_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/stack_sampling_profiler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/stack_sampling_profiler_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/suspendable_thread_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/suspendable_thread_delegate_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/suspendable_thread_delegate_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/thread_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/thread_delegate_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/unwinder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/profiler/win32_stack_frame_unwinder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/rand_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ranges/algorithm.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ranges/functional.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/ranges/ranges.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/run_loop.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sampling_heap_profiler/lock_free_address_hash_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sampling_heap_profiler/poisson_allocation_sampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sampling_heap_profiler/sampling_heap_profiler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/scoped_clear_last_error.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/scoped_generic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/scoped_multi_source_observation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/scoped_native_library.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/scoped_observation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/scoped_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sequence_checker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sequence_checker_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sequence_token.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sequenced_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sequenced_task_runner_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/single_thread_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/stl_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/abseil_string_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/char_traits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/escape.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/latin1_string_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/pattern.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/safe_sprintf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/strcat.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/strcat_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/strcat_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_number_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_number_conversions_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_number_conversions_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_piece.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_piece_forward.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_split.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_split_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_split_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_tokenizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_util_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_util_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/string_util_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/stringize_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/stringprintf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/sys_string_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/utf_offset_string_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/utf_string_conversion_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/strings/utf_string_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/supports_user_data.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sync_socket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/synchronization/atomic_flag.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/synchronization/condition_variable.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/synchronization/lock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/synchronization/lock_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/synchronization/waitable_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/synchronization/waitable_event_watcher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/sys_byteorder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/syslog_logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/system/sys_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/system/sys_info_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/system/system_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/cancelable_task_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/common/checked_lock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/common/checked_lock_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/common/intrusive_heap.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/common/operations_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/common/scoped_defer_task_posting.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/common/task_annotator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/current_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/lazy_thread_pool_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/post_job.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/post_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/scoped_set_task_priority_for_current_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/associated_thread_id.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/atomic_flag_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/enqueue_order.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/enqueue_order_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/lazily_deallocated_deque.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/lazy_now.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/real_time_domain.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/sequence_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/sequence_manager_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/sequenced_task_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/task_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/task_queue_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/task_queue_selector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/task_queue_selector_logic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/task_time_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/tasks.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/test/fake_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/test/mock_time_domain.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/test/mock_time_message_pump.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/test/sequence_manager_for_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/test/test_task_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/test/test_task_time_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/thread_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/thread_controller_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/thread_controller_power_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/thread_controller_with_message_pump_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/time_domain.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/work_deduplicator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/work_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/sequence_manager/work_queue_sets.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/simple_task_executor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/single_thread_task_executor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/single_thread_task_runner_thread_mode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/task_executor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/task_features.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/task_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/task_traits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/task_traits_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/test_task_traits_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/can_run_policy_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/delayed_task_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/environment_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/initialization_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/job_task_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/pooled_parallel_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/pooled_sequenced_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/pooled_single_thread_task_runner_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/pooled_task_runner_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/priority_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/sequence.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/service_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/task_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/task_source_sort_key.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/task_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/task_tracker_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/test_task_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/thread_group.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/thread_group_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/thread_group_native.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/thread_group_native_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/thread_group_native_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/thread_pool_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/thread_pool_instance.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/tracked_ref.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/worker_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/worker_thread_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task/thread_pool/worker_thread_stack.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/task_runner_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/template_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/android/java_handler_thread_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/android/url_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/async_results_test_values_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/bind.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/clang_profiling.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/copy_only_int.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/fake_iasync_operation_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/fontconfig_util_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/gmock_callback_support.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/gmock_move_support.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/gtest_links.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/gtest_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/gtest_xml_unittest_result_printer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/gtest_xml_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/icu_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/ios/google_test_runner_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/ios/wait_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/launcher/test_launcher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/launcher/test_launcher_nacl_nonsfi.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/launcher/test_launcher_test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/launcher/test_launcher_tracer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/launcher/test_result.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/launcher/test_results_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/launcher/unit_test_launcher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/malloc_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/metrics/histogram_enum_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/metrics/histogram_tester.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/metrics/user_action_tester.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/mock_callback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/mock_chrome_application_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/mock_devices_changed_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/mock_entropy_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/mock_log.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/move_only_int.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/multiprocess_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/native_library_test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/null_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/perf_log.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/perf_test_suite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/perf_time_logger.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/power_monitor_test_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_chromeos_version_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_command_line.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_environment_variable_override.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_feature_list.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_field_trial_list_resetter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_locale.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_logging_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_mock_clock_override.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_mock_time_message_loop_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_os_info_override_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_path_override.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_run_loop_timeout.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/scoped_running_on_chromeos.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/sequenced_task_runner_test_template.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/simple_test_clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/simple_test_tick_clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/spin_wait.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/task_environment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/task_runner_test_template.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_discardable_memory_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_file_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_io_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_listener_ios.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_message_loop.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_mock_time_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_pending_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_reg_util_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_shared_memory_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_shortcut_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_simple_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_suite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_support_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_support_ios.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_switches.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_timeouts.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/test_waitable_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/thread_test_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/trace_event_analyzer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/trace_to_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/values_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/test/with_feature_override.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/cityhash/city.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/cityhash_v103/src/city_v103.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/bignum-dtoa.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/bignum.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/cached-powers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/diy-fp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/double-conversion.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/double-to-string.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/fast-dtoa.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/fixed-dtoa.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/ieee.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/string-to-double.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/strtod.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/double_conversion/double-conversion/utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/dynamic_annotations/dynamic_annotations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/icu/icu_utf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/aix/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/aix/event-config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/android/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/android/event-config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/compat/sys/_libevent_time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/compat/sys/queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/evdns.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/event-config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/event-internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/evhttp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/evrpc-internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/evrpc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/evsignal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/evutil.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/freebsd/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/freebsd/event-config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/http-internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/linux/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/linux/event-config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/log.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/mac/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/mac/event-config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/min_heap.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/nacl_nonsfi/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/nacl_nonsfi/event-config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/solaris/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/solaris/event-config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/strlcpy-internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/libevent/test/regress.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/nspr/prtime.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/symbolize/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/symbolize/demangle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/symbolize/glog/logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/symbolize/glog/raw_logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/symbolize/symbolize.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/symbolize/utilities.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/valgrind/memcheck.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/valgrind/valgrind.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_mime/xdgmime.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_mime/xdgmimealias.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_mime/xdgmimecache.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_mime/xdgmimeglob.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_mime/xdgmimeicon.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_mime/xdgmimeint.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_mime/xdgmimemagic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_mime/xdgmimeparent.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/third_party/xdg_user_dirs/xdg_user_dir_lookup.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/thread_annotations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/hang_watcher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/platform_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/platform_thread_internal_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/platform_thread_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/post_task_and_reply_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/scoped_blocking_call.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/scoped_blocking_call_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/scoped_thread_priority.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/sequence_bound.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/sequence_local_storage_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/sequence_local_storage_slot.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/sequenced_task_runner_handle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/simple_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_checker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_checker_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_collision_warner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_id_name_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_local.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_local_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_local_storage.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_restrictions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/thread_task_runner_handle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/threading_features.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/threading/watchdog.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/time/clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/time/default_clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/time/default_tick_clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/time/tick_clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/time/time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/time/time_override.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/time/time_to_iso8601.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/timer/elapsed_timer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/timer/hi_res_timer_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/timer/lap_timer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/timer/mock_timer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/timer/timer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/token.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/application_state_proto_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/auto_open_close_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/base_tracing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/base_tracing_forward.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/blame_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/builtin_categories.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/category_registry.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/cfi_backtrace_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/common/trace_event_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/cpufreq_monitor_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/event_name_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/heap_profiler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/heap_profiler_allocation_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/heap_profiler_allocation_context_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/heap_profiler_event_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/interned_args_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/java_heap_dump_provider_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/log_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/malloc_dump_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_allocator_dump.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_allocator_dump_guid.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_dump_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_dump_manager_test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_dump_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_dump_provider_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_dump_request_args.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_dump_scheduler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_infra_background_allowlist.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_pressure_level_proto.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/memory_usage_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/optional_trace_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/process_memory_dump.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/task_execution_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/thread_instruction_count.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_arguments.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_category.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_config_category_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_config_memory_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_conversion_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_event_etw_export_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_event_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_event_filter_test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_event_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_event_memory_overhead.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_event_stub.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_id_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_log.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/trace_logging_minimal_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/traced_value.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/traced_value_support.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/tracing_agent.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/typed_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/typed_macros_embedder_support.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/trace_event/typed_macros_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/tracing/perfetto_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/tracing/tracing_tls.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/traits_bag.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/tuple.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/types/pass_key.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/types/strong_alias.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/unguessable_token.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/updateable_sequenced_task_runner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/memory_pressure/fake_memory_pressure_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/memory_pressure/memory_pressure_voter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/memory_pressure/multi_source_memory_pressure_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/memory_pressure/system_memory_pressure_evaluator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/memory_pressure/system_memory_pressure_evaluator_fuchsia.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/memory_pressure/system_memory_pressure_evaluator_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/memory_pressure/system_memory_pressure_evaluator_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/memory_pressure/system_memory_pressure_evaluator_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/timer/wall_clock_timer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/type_safety/id_type.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/type_safety/token_type.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/util/values/values_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/value_iterators.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/values.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/version.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/vlog.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/async_operation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/atl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/atl_throw.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/com_init_balancer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/com_init_check_hook.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/com_init_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/core_winrt_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/current_module.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/dispatch_stub.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/embedded_i18n/language_selector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/enum_variant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/event_trace_consumer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/event_trace_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/event_trace_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/hstring_compare.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/hstring_reference.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/i18n.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/iat_patch_function.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/message_window.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/object_watcher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/patch_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/pe_image.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/pe_image_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/post_async_results.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/process_startup_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/propvarutil.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/reference.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/registry.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/resource_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_bstr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_co_mem.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_com_initializer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_devinfo.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_gdi_object.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_handle.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_handle_verifier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_hdc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_hglobal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_hstring.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_process_information.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_propvariant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_safearray.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_select_object.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_variant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_windows_thread_environment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/scoped_winrt_initializer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/shlwapi.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/shortcut.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/sphelper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/startup_information.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/static_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/variant_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/variant_vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/win_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/wincrypt_shim.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/windows_full.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/windows_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/windows_version.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/windowsx_shim.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/winrt_foundation_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/winrt_storage_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/wmi.h delete mode 100644 client/webrtc/webrtc_demo/third/include/base/win/wrapped_window_proc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/adaptation_constraint.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/broadcast_resource_listener.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/degradation_preference_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/encoder_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/resource_adaptation_processor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/resource_adaptation_processor_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/test/fake_adaptation_constraint.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/test/fake_frame_rate_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/test/fake_resource.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/test/fake_video_stream_input_state_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/test/mock_resource_listener.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/video_source_restrictions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/video_stream_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/video_stream_input_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/adaptation/video_stream_input_state_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/audio_receive_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/audio_send_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/audio_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/audio_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/bitrate_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/call.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/call_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/call_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/degraded_call.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/fake_network_pipe.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/flexfec_receive_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/flexfec_receive_stream_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/packet_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rampup_tests.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/receive_time_calculator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_bitrate_configurator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_demuxer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_packet_sink_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_payload_params.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_stream_receiver_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_stream_receiver_controller_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_transport_controller_send.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_transport_controller_send_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_video_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtp_video_sender_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/rtx_receive_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/simulated_network.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/simulated_packet_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/syncable.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/test/mock_audio_send_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/test/mock_bitrate_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/test/mock_rtp_packet_sink_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/test/mock_rtp_transport_controller_send.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/version.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/video_receive_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/call/video_send_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/ci/absl_alternate_options.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/audio_converter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/channel_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/fir_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/fir_filter_avx2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/fir_filter_c.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/fir_filter_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/fir_filter_neon.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/fir_filter_sse.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/include/audio_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/mocks/mock_smoothing_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/real_fourier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/real_fourier_ooura.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/resampler/include/push_resampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/resampler/include/resampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/resampler/push_sinc_resampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/resampler/sinc_resampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/resampler/sinusoidal_linear_chirp_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/ring_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/signal_processing/complex_fft_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/signal_processing/dot_product_with_scale.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/signal_processing/include/real_fft.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/signal_processing/include/signal_processing_library.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/signal_processing/include/spl_inl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/signal_processing/include/spl_inl_armv7.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/signal_processing/include/spl_inl_mips.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/signal_processing/resample_by_2_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/smoothing_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/third_party/ooura/fft_size_128/ooura_fft.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/third_party/ooura/fft_size_128/ooura_fft_tables_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/third_party/ooura/fft_size_128/ooura_fft_tables_neon_sse2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/third_party/ooura/fft_size_256/fft4g.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/vad/include/vad.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/vad/include/webrtc_vad.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/vad/mock/mock_vad.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/vad/vad_core.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/vad/vad_filterbank.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/vad/vad_gmm.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/vad/vad_sp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/vad/vad_unittest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/wav_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/wav_header.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_audio/window_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/frame_counts.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/frame_rate_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/generic_frame_descriptor/generic_frame_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/h264/h264_bitstream_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/h264/h264_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/h264/pps_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/h264/profile_level_id.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/h264/sps_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/h264/sps_vui_rewriter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/include/bitrate_adjuster.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/include/incoming_video_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/include/quality_limitation_reason.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/include/video_frame_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/include/video_frame_buffer_pool.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/libyuv/include/webrtc_libyuv.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/test/utilities.h delete mode 100644 client/webrtc/webrtc_demo/third/include/common_video/video_render_frames.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/any.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/any.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/api.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/arena.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/arena_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/arena_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/arenastring.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/annotation_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/code_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/command_line_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_enum.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_enum_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_map_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_message_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_message_layout_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_options.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_padding_optimizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_primitive_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_service.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_string_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_unittest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/cpp/cpp_unittest.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_doc_comment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_enum.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_enum_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_field_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_map_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_message_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_names.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_options.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_primitive_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_reflection_class.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_repeated_enum_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_repeated_message_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_source_generator_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/csharp/csharp_wrapper_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/importer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_doc_comment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_enum.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_enum_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_enum_field_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_enum_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_extension_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_generator_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_map_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_map_field_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_message_builder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_message_builder_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_message_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_message_field_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_message_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_name_resolver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_names.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_options.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_primitive_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_primitive_field_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_service.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_shared_code_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_string_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/java/java_string_field_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/js/js_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/js/well_known_types_embed.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/mock_code_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_enum.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_enum_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_map_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_message_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_nsobject_methods.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_oneof.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/objectivec/objectivec_primitive_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/package_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/php/php_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/plugin.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/plugin.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/python/python_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/ruby/ruby_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/scc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/subprocess.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/compiler/zip_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/descriptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/descriptor.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/descriptor_database.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/duration.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/dynamic_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/empty.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/extension_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/extension_set_inl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/field_mask.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/generated_enum_reflection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/generated_enum_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/generated_message_reflection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/generated_message_table_driven.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/generated_message_table_driven_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/generated_message_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/has_bits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/implicit_weak_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/inlined_string_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/coded_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/gzip_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/io_win32.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/package_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/printer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/strtod.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/tokenizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/zero_copy_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/zero_copy_stream_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/io/zero_copy_stream_impl_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_entry.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_entry_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_field_inl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_field_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_lite_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_test_util.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_test_util_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/map_type_handler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/message_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/message_unittest.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/metadata.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/metadata_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/package_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/parse_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/port_def.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/port_undef.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/proto3_lite_unittest.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/reflection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/reflection_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/reflection_ops.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/repeated_field.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/service.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/source_context.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/struct.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/bytestream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/callback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/casts.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/fastmem.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/hash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/int128.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/map_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/mathutil.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/mutex.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/once.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/platform_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/status.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/status_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/statusor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/stl_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/stringpiece.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/stringprintf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/strutil.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/substitute.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/template_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/stubs/time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/test_util.inc delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/test_util2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/test_util_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/testing/file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/testing/googletest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/text_format.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/timestamp.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/type.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/unknown_field_set.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/delimited_message_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/field_comparator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/field_mask_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/datapiece.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/default_value_objectwriter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/error_listener.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/expecting_objectwriter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/field_mask_utility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/json_escaping.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/json_objectwriter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/json_stream_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/location_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/mock_error_listener.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/object_location_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/object_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/object_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/proto_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/protostream_objectsource.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/protostream_objectwriter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/structured_objectwriter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/type_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/type_info_test_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/internal/utility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/json_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/message_differencer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/package_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/time_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/type_resolver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/util/type_resolver_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/wire_format.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/wire_format_lite.h delete mode 100644 client/webrtc/webrtc_demo/third/include/google/protobuf/wrappers.pb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/basic_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/compare.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/compare_row.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/convert.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/convert_argb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/convert_from.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/convert_from_argb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/cpu_id.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/macros_msa.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/mjpeg_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/planar_functions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/rotate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/rotate_argb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/rotate_row.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/row.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/scale.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/scale_argb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/scale_row.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/scale_uv.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/version.h delete mode 100644 client/webrtc/webrtc_demo/third/include/libyuv/video_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/encoder/blob_encoding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/encoder/delta_encoding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/encoder/rtc_event_log_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/encoder/rtc_event_log_encoder_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/encoder/rtc_event_log_encoder_legacy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/encoder/rtc_event_log_encoder_new_format.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/encoder/var_int.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_alr_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_audio_network_adaptation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_audio_playout.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_audio_receive_stream_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_audio_send_stream_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_bwe_update_delay_based.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_bwe_update_loss_based.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_dtls_transport_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_dtls_writable_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_frame_decoded.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_generic_ack_received.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_generic_packet_received.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_generic_packet_sent.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_probe_cluster_created.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_probe_result_failure.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_probe_result_success.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_remote_estimate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_route_change.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_rtcp_packet_incoming.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_rtcp_packet_outgoing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_rtp_packet_incoming.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_rtp_packet_outgoing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_video_receive_stream_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/events/rtc_event_video_send_stream_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/fake_rtc_event_log.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/fake_rtc_event_log_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/ice_logger.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/logged_events.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/mock/mock_rtc_event_log.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/output/rtc_event_log_output_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/rtc_event_log_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/rtc_event_log_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/rtc_event_log_unittest_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/rtc_event_processor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/logging/rtc_event_log/rtc_stream_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/adapted_video_track_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/audio_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/codec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/delayable.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/fake_frame_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/fake_media_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/fake_network_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/fake_rtp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/fake_video_renderer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/h264_profile_level_id.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/media_channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/media_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/media_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/media_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/rid_description.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/rtp_data_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/rtp_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/sdp_fmtp_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/stream_params.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/turn_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/video_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/video_broadcaster.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/video_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/video_source_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/base/vp9_profile.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/adm_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/encoder_simulcast_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/fake_video_codec_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/fake_webrtc_call.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/fake_webrtc_video_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/internal_decoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/internal_encoder_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/multiplex_codec_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/null_webrtc_video_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/payload_type_mapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/simulcast.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/simulcast_encoder_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/unhandled_packets_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/webrtc_media_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/webrtc_media_engine_defaults.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/webrtc_video_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/engine/webrtc_voice_engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/sctp/sctp_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/media/sctp/sctp_transport_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/async_audio_processing/async_audio_processing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/acm2/acm_receive_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/acm2/acm_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/acm2/acm_remixing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/acm2/acm_resampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/acm2/acm_send_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/acm2/call_statistics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/bitrate_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/channel_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/controller_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/debug_dump_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/dtx_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/event_log_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/frame_length_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/frame_length_controller_v2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/mock/mock_audio_network_adaptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/mock/mock_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/mock/mock_controller_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/mock/mock_debug_dump_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/audio_network_adaptor/util/threshold_curve.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/audio_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/audio_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/cng/audio_encoder_cng.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/cng/webrtc_cng.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/g711/audio_decoder_pcm.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/g711/audio_encoder_pcm.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/g711/g711_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/g722/audio_decoder_g722.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/g722/audio_encoder_g722.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/g722/g722_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/abs_quant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/abs_quant_loop.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/audio_decoder_ilbc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/augmented_cb_corr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/bw_expand.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/cb_construct.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/cb_mem_energy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/cb_mem_energy_augmentation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/cb_mem_energy_calc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/cb_search.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/cb_search_core.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/cb_update_best_index.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/chebyshev.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/comp_corr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/create_augmented_vec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/decode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/decode_residual.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/decoder_interpolate_lsf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/do_plc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/encode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/energy_inverse.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/enh_upsample.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/enhancer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/enhancer_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/filtered_cb_vecs.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/frame_classify.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/gain_dequant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/gain_quant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/get_cd_vec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/get_lsp_poly.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/get_sync_seq.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/hp_input.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/hp_output.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/ilbc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/index_conv_dec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/index_conv_enc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/init_decode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/init_encode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/interpolate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/interpolate_samples.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/lpc_encode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/lsf_check.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/lsf_interpolate_to_poly_dec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/lsf_interpolate_to_poly_enc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/lsf_to_lsp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/lsf_to_poly.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/lsp_to_lsf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/my_corr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/nearest_neighbor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/pack_bits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/poly_to_lsf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/poly_to_lsp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/refiner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/simple_interpolate_lsf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/simple_lpc_analysis.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/simple_lsf_dequant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/simple_lsf_quant.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/smooth.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/smooth_out_data.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/sort_sq.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/split_vq.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/state_construct.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/state_search.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/swap_bytes.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/unpack_bits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/vq3.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/vq4.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/window32_w32.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/ilbc/xcorr_coef.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/audio_decoder_isac_t.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/bandwidth_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/include/audio_decoder_isacfix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/include/audio_encoder_isacfix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/include/isacfix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/arith_routins.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/codec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/entropy_coding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/fft.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/filterbank_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/filterbank_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/isac_fix_type.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/lpc_masking_model.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/lpc_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/pitch_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/pitch_gain_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/pitch_lag_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/spectrum_ar_model_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/fix/source/structs.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/include/audio_decoder_isac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/include/audio_encoder_isac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/include/isac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/arith_routines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/bandwidth_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/codec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/crc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/encode_lpc_swb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/entropy_coding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/filter_functions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/isac_float_type.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/isac_vad.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/lpc_analysis.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/lpc_gain_swb_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/lpc_shape_swb12_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/lpc_shape_swb16_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/lpc_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/os_specific_inline.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/pitch_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/pitch_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/pitch_gain_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/pitch_lag_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/spectrum_ar_model_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/source/structs.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/isac/main/util/utility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/legacy_encoded_audio_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/audio_coder_opus_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/audio_decoder_multi_channel_opus_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/audio_decoder_opus.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/audio_encoder_multi_channel_opus_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/audio_encoder_opus.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/opus_inst.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/opus_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/test/audio_ring_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/test/blocker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/opus/test/lapped_transform.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/pcm16b/audio_decoder_pcm16b.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/pcm16b/pcm16b.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/pcm16b/pcm16b_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/red/audio_encoder_copy_red.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/codecs/tools/audio_codec_speed_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/include/audio_coding_module.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/include/audio_coding_module_typedefs.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/accelerate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/audio_multi_vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/audio_vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/background_noise.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/buffer_level_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/comfort_noise.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/cross_correlation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/decision_logic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/decoder_database.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/default_neteq_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/delay_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/dsp_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/dtmf_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/dtmf_tone_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/expand.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/expand_uma_logger.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/histogram.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/merge.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_buffer_level_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_decoder_database.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_delay_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_dtmf_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_dtmf_tone_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_expand.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_histogram.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_neteq_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_packet_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_red_payload_splitter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/mock/mock_statistics_calculator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/nack_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/neteq_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/normal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/packet.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/packet_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/post_decode_vad.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/preemptive_expand.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/random_vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/red_payload_splitter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/statistics_calculator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/sync_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/test/neteq_decoding_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/test/result_sink.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/time_stretch.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/timestamp_scaler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/audio_checksum.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/audio_loop.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/audio_sink.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/constant_pcm_packet_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/encode_neteq_input.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/fake_decode_from_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/initial_packet_inserter_neteq_input.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/input_audio_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_delay_analyzer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_event_log_input.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_input.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_packet_source_input.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_performance_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_quality_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_replacement_input.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_stats_getter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_stats_plotter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/neteq_test_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/output_audio_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/output_wav_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/packet.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/packet_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/resample_input_audio_file.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/rtc_event_log_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/rtp_file_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/neteq/tools/rtp_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/Channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/EncodeDecodeTest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/PCMFile.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/PacketLossTest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/RTPFile.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/TestAllCodecs.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/TestRedFec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/TestStereo.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/TestVADDTX.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/TwoWayCommunication.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/iSACTest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_coding/test/opus_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/aaudio_player.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/aaudio_recorder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/aaudio_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/audio_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/audio_device_template.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/audio_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/audio_record_jni.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/audio_track_jni.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/build_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/ensure_initialized.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/opensles_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/opensles_player.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/android/opensles_recorder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/audio_device_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/audio_device_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/audio_device_generic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/audio_device_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/audio_device_name.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/dummy/audio_device_dummy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/dummy/file_audio_device.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/dummy/file_audio_device_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/fine_audio_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/audio_device.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/audio_device_data_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/audio_device_default.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/audio_device_defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/audio_device_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/fake_audio_device.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/mock_audio_device.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/mock_audio_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/include/test_audio_device.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/linux/alsasymboltable_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/linux/audio_device_alsa_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/linux/audio_device_pulse_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/linux/audio_mixer_manager_pulse_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/linux/latebindingsymboltable_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/linux/pulseaudiosymboltable_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/mac/audio_device_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/mac/audio_mixer_manager_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/mock_audio_device_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/win/audio_device_core_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/win/audio_device_module_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/win/core_audio_base_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/win/core_audio_input_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/win/core_audio_output_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_device/win/core_audio_utility_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_mixer/audio_frame_manipulator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_mixer/audio_mixer_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_mixer/default_output_rate_calculator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_mixer/frame_combiner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_mixer/gain_change_calculator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_mixer/output_rate_calculator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_mixer/sine_wave_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/adaptive_fir_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/adaptive_fir_filter_erl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/aec3_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/aec3_fft.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/aec_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/alignment_mixer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/api_call_jitter_metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/block_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/block_delay_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/block_framer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/block_processor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/block_processor_metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/clockdrift_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/coarse_filter_update_gain.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/comfort_noise_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/decimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/delay_estimate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/dominant_nearend_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/downsampled_render_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/echo_audibility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/echo_canceller3.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/echo_path_delay_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/echo_path_variability.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/echo_remover.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/echo_remover_metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/erl_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/erle_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/fft_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/fft_data.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/filter_analyzer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/frame_blocker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/fullband_erle_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/matched_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/matched_filter_lag_aggregator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/mock/mock_block_processor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/mock/mock_echo_remover.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/mock/mock_render_delay_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/mock/mock_render_delay_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/moving_average.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/nearend_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/refined_filter_update_gain.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/render_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/render_delay_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/render_delay_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/render_delay_controller_metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/render_signal_analyzer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/residual_echo_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/reverb_decay_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/reverb_frequency_response.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/reverb_model.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/reverb_model_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/signal_dependent_erle_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/spectrum_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/stationarity_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/subband_erle_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/subband_nearend_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/subtractor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/subtractor_output.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/subtractor_output_analyzer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/suppression_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/suppression_gain.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/transparent_mode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec3/vector_math.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec_dump/aec_dump_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec_dump/aec_dump_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec_dump/capture_stream_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec_dump/mock_aec_dump.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aec_dump/write_to_file_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aecm/aecm_core.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aecm/aecm_defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/aecm/echo_control_mobile.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/agc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/agc_manager_direct.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/gain_control.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/gain_map_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/legacy/analog_agc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/legacy/digital_agc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/legacy/gain_control.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/loudness_histogram.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/mock_agc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc/utility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/adaptive_agc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/adaptive_digital_gain_applier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/adaptive_mode_level_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/agc2_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/agc2_testing_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/biquad_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/compute_interpolated_gain_curve.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/cpu_features.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/down_sampler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/fixed_digital_level_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/gain_applier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/interpolated_gain_curve.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/limiter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/limiter_db_gain_curve.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/noise_level_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/noise_spectrum_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/auto_correlation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/features_extraction.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/lp_residual.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/pitch_search.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/pitch_search_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/ring_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/rnn.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/rnn_fc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/rnn_gru.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/sequence_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/spectral_features.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/spectral_features_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/symmetric_matrix_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/rnn_vad/vector_math.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/saturation_protector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/saturation_protector_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/signal_classifier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/vad_with_level.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/agc2/vector_float_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/audio_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/audio_processing_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/capture_levels_adjuster/audio_samples_scaler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/capture_levels_adjuster/capture_levels_adjuster.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/echo_control_mobile_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/echo_detector/circular_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/echo_detector/mean_variance_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/echo_detector/moving_max.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/echo_detector/normalized_covariance_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/gain_control_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/gain_controller2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/high_pass_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/include/aec_dump.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/include/audio_frame_proxies.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/include/audio_frame_view.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/include/audio_processing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/include/audio_processing_statistics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/include/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/include/mock_audio_processing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/level_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/logging/apm_data_dumper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/fast_math.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/histograms.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/noise_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/noise_suppressor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/ns_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/ns_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/ns_fft.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/prior_signal_model.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/prior_signal_model_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/quantile_noise_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/signal_model.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/signal_model_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/speech_probability_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/suppression_params.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/ns/wiener_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/optionally_built_submodule_creators.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/render_queue_item_verifier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/residual_echo_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/rms_level.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/splitting_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/aec_dump_based_simulator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/api_call_statistics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/audio_buffer_tools.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/audio_processing_builder_for_testing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/audio_processing_simulator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/audioproc_float_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/bitexactness_tools.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/mock_wavreader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/mock_wavreader_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/multiend_call.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/simulator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/timing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/wavreader_abstract_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/wavreader_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/conversational_speech/wavreader_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/debug_dump_replayer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/echo_canceller_test_tools.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/echo_control_mock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/fake_recording_device.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/performance_timer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/protobuf_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/runtime_setting_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/simulator_buffers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/test/wav_based_simulator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/three_band_filter_bank.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/daubechies_8_wavelet_coeffs.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/dyadic_decimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/file_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/moving_moments.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/transient_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/transient_suppressor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/transient_suppressor_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/windows_private.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/wpd_node.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/transient/wpd_tree.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/typing_detection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/utility/cascaded_biquad_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/utility/delay_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/utility/delay_estimator_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/utility/delay_estimator_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/utility/pffft_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/gmm.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/noise_gmm_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/pitch_based_vad.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/pitch_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/pole_zero_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/standalone_vad.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/vad_audio_proc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/vad_audio_proc_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/vad_circular_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/voice_activity_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/vad/voice_gmm_tables.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/audio_processing/voice_detection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/acknowledged_bitrate_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/acknowledged_bitrate_estimator_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/alr_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/bitrate_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/delay_based_bwe.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/delay_based_bwe_unittest_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/delay_increase_detector_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/goog_cc_network_control.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/inter_arrival_delta.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/link_capacity_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/loss_based_bandwidth_estimation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/probe_bitrate_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/probe_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/robust_throughput_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/send_side_bandwidth_estimation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/test/goog_cc_printer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/goog_cc/trendline_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/include/receive_side_congestion_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/pcc/bitrate_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/pcc/monitor_interval.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/pcc/pcc_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/pcc/pcc_network_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/pcc/rtt_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/pcc/utility_function.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/rtp/control_handler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/rtp/transport_feedback_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/congestion_controller/rtp/transport_feedback_demuxer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/cropped_desktop_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/cropping_window_capturer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_and_cursor_composer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_capture_options.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_capture_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_capturer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_capturer_differ_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_capturer_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_frame_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_frame_rotation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_frame_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_geometry.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/desktop_region.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/differ_block.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/differ_vector_sse2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/fake_desktop_capturer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/fallback_desktop_capturer_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/full_screen_application_handler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/full_screen_window_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/base_capturer_pipewire.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/mouse_cursor_monitor_x11.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/screen_capturer_x11.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/shared_x_display.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/window_capturer_x11.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/window_finder_x11.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/window_list_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/x_atom_cache.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/x_error_trap.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/x_server_pixel_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/linux/x_window_property.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mac/desktop_configuration.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mac/desktop_configuration_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mac/desktop_frame_cgimage.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mac/desktop_frame_iosurface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mac/desktop_frame_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mac/full_screen_mac_application_handler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mac/screen_capturer_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mac/window_list_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mock_desktop_capturer_callback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mouse_cursor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/mouse_cursor_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/resolution_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/rgba_color.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/screen_capture_frame_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/screen_capturer_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/screen_drawer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/screen_drawer_lock_posix.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/shared_desktop_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/shared_memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/cursor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/cursor_unittest_resources.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/d3d_device.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/desktop.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/desktop_capture_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/display_configuration_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/dxgi_adapter_duplicator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/dxgi_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/dxgi_duplicator_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/dxgi_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/dxgi_output_duplicator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/dxgi_texture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/dxgi_texture_mapping.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/dxgi_texture_staging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/full_screen_win_application_handler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/scoped_gdi_object.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/scoped_thread_desktop.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/screen_capture_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/screen_capturer_win_directx.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/screen_capturer_win_gdi.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/screen_capturer_win_magnifier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/selected_window_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/test_support/test_window.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/wgc_capture_session.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/wgc_capture_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/wgc_capturer_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/wgc_desktop_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/window_capture_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/win/window_capturer_win_gdi.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/window_finder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/window_finder_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/desktop_capture/window_finder_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/include/module.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/include/module_common_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/include/module_common_types_public.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/include/module_fec_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/pacing/bitrate_prober.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/pacing/interval_budget.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/pacing/paced_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/pacing/pacing_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/pacing/packet_router.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/pacing/round_robin_packet_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/pacing/rtp_packet_pacer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/pacing/task_queue_paced_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/aimd_rate_control.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/include/bwe_defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/inter_arrival.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/overuse_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/overuse_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/remote_estimator_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/test/bwe_test_logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/remote_bitrate_estimator/tools/bwe_rtp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/flexfec_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/flexfec_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/receive_statistics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/remote_ntp_time_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/report_block_data.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/rtcp_statistics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/rtp_cvo.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/rtp_header_extension_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/rtp_packet_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/rtp_rtcp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/rtp_rtcp_defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/include/ulpfec_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/mocks/mock_recovered_packet_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/mocks/mock_rtcp_bandwidth_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/mocks/mock_rtcp_rtt_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/absolute_capture_time_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/absolute_capture_time_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/active_decode_targets_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/byte_io.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/create_video_rtp_depacketizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/deprecated/deprecated_rtp_sender_egress.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/dtmf_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/fec_private_tables_bursty.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/fec_private_tables_random.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/fec_test_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/flexfec_header_reader_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/forward_error_correction.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/forward_error_correction_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/packet_loss_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/packet_sequencer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/receive_statistics_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_nack_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/app.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/bye.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/common_header.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/dlrr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/fir.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/loss_notification.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/nack.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/pli.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/psfb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/remb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/remote_estimate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/report_block.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/rrtr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/rtpfb.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/sdes.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/sender_report.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/tmmb_item.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_transceiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_transceiver_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtcp_transceiver_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_dependency_descriptor_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_dependency_descriptor_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_dependency_descriptor_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_descriptor_authentication.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_format.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_format_h264.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_format_video_generic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_format_vp8.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_format_vp8_test_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_format_vp9.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_generic_frame_descriptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_header_extension_size.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_header_extensions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_packet.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_packet_history.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_packet_received.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_packet_to_send.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_packetizer_av1.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_rtcp_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_rtcp_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_rtcp_impl2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_rtcp_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_sender_audio.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_sender_egress.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_sender_video.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_sequence_number_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_utility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_video_header.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/rtp_video_layers_allocation_extension.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/source_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/time_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/tmmbr_help.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/ulpfec_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/ulpfec_header_reader_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/ulpfec_receiver_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/video_fec_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/video_rtp_depacketizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/video_rtp_depacketizer_av1.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/video_rtp_depacketizer_generic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/video_rtp_depacketizer_raw.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/video_rtp_depacketizer_vp8.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/source/video_rtp_depacketizer_vp9.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/rtp_rtcp/test/testFec/average_residual_loss_xor_codes.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/third_party/fft/fft.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/third_party/g711/g711.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/third_party/g722/g722_enc_dec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/third_party/portaudio/pa_memorybarrier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/third_party/portaudio/pa_ringbuffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/utility/include/helpers_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/utility/include/jvm_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/utility/include/mock/mock_process_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/utility/include/process_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/utility/source/process_thread_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/device_info_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/linux/device_info_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/linux/video_capture_linux.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/video_capture.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/video_capture_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/video_capture_defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/video_capture_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/video_capture_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/windows/device_info_ds.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/windows/help_functions_ds.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/windows/sink_filter_ds.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_capture/windows/video_capture_ds.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/chain_diff_calculator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codec_timer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/av1/av1_svc_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/av1/libaom_av1_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/av1/libaom_av1_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/h264/h264_color_space.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/h264/h264_decoder_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/h264/h264_encoder_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/h264/include/h264.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/h264/include/h264_globals.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/interface/common_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/interface/libvpx_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/interface/mock_libvpx_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/multiplex/include/augmented_video_frame_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/multiplex/include/multiplex_decoder_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/multiplex/include/multiplex_encoder_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/multiplex/multiplex_encoded_image_packer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/test/android_codec_factory_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/test/encoded_video_frame_producer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/test/objc_codec_factory_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/test/video_codec_unittest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/test/videocodec_test_fixture_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/test/videocodec_test_stats_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/test/videoprocessor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp8/default_temporal_layers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp8/include/temporal_layers_checker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp8/include/vp8.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp8/include/vp8_globals.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp8/libvpx_vp8_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp8/screenshare_layers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp8/temporal_layers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp9/include/vp9.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp9/include/vp9_globals.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp9/svc_config.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp9/svc_rate_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/decoder_database.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/decoding_state.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/deprecated/nack_module.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/encoded_frame.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/event_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/fec_controller_default.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/fec_rate_table.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/frame_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/frame_buffer2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/frame_dependencies_calculator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/frame_object.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/generic_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/h264_sprop_parameter_sets.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/h264_sps_pps_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/histogram.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/include/video_codec_initializer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/include/video_codec_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/include/video_coding.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/include/video_coding_defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/include/video_error_codes.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/inter_frame_delay.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/internal_defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/jitter_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/jitter_buffer_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/jitter_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/loss_notification_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/media_opt_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/nack_module2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/packet.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/packet_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/rtp_frame_id_only_ref_finder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/rtp_frame_reference_finder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/rtp_generic_ref_finder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/rtp_seq_num_only_ref_finder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/rtp_vp8_ref_finder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/rtp_vp9_ref_finder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/rtt_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/session_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/create_scalability_structure.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/scalability_structure_full_svc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/scalability_structure_key_svc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/scalability_structure_l2t2_key_shift.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/scalability_structure_simulcast.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/scalability_structure_test_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/scalable_video_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/scalable_video_controller_no_layering.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/svc/svc_rate_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/test/stream_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/timestamp_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/timing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/unique_timestamp_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/decoded_frames_history.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/frame_dropper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/framerate_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/ivf_file_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/ivf_file_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/qp_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/quality_scaler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/simulcast_rate_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/simulcast_test_fixture_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/simulcast_utility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/vp8_header_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/utility/vp9_uncompressed_header_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/video_coding_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_coding/video_receiver2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_processing/util/denoiser_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_processing/util/denoiser_filter_c.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_processing/util/denoiser_filter_neon.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_processing/util/denoiser_filter_sse2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_processing/util/noise_estimation.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_processing/util/skin_detection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/modules/video_processing/video_denoiser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/common/internal_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/common/math.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/common/pair_hash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/common/sequence_numbers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/common/str_join.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/bounded_byte_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/bounded_byte_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/abort_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/cookie_ack_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/cookie_echo_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/data_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/data_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/error_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/forward_tsn_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/forward_tsn_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/heartbeat_ack_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/heartbeat_request_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/idata_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/iforward_tsn_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/init_ack_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/init_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/reconfig_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/sack_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/shutdown_ack_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/shutdown_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/chunk/shutdown_complete_chunk.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/crc32c.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/data.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/cookie_received_while_shutting_down_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/error_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/invalid_mandatory_parameter_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/invalid_stream_identifier_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/missing_mandatory_parameter_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/no_user_data_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/out_of_resource_error_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/protocol_violation_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/restart_of_an_association_with_new_address_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/stale_cookie_error_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/unrecognized_chunk_type_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/unrecognized_parameter_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/unresolvable_address_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/error_cause/user_initiated_abort_cause.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/add_incoming_streams_request_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/add_outgoing_streams_request_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/forward_tsn_supported_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/heartbeat_info_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/incoming_ssn_reset_request_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/outgoing_ssn_reset_request_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/reconfiguration_response_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/ssn_tsn_reset_request_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/state_cookie_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/parameter/supported_extensions_parameter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/packet/tlv_trait.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/public/strong_alias.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/public/types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/net/dcsctp/testing/testing_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/aead.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/aes.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/arm_arch.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/asn1.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/asn1_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/asn1t.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/base64.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/bio.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/blake2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/blowfish.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/bn.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/buf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/bytestring.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/cast.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/chacha.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/cipher.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/cmac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/conf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/cpu.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/crypto.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/curve25519.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/des.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/dh.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/digest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/dsa.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/dtls1.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/e_os2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ec.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ec_key.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ecdh.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ecdsa.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/engine.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/err.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/evp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/evp_errors.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ex_data.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/hkdf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/hmac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/hrss.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/is_boringssl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/lhash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/md4.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/md5.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/mem.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/nid.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/obj.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/obj_mac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/objects.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/opensslconf.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/opensslv.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ossl_typ.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/pem.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/pkcs12.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/pkcs7.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/pkcs8.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/poly1305.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/pool.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/rand.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/rc4.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ripemd.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/rsa.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/safestack.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/sha.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/siphash.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/span.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/srtp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ssl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/ssl3.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/stack.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/tls1.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/trust_token.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/type_check.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/x509.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/x509_vfy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/openssl/x509v3.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/async_stun_tcp_socket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/basic_async_resolver_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/basic_ice_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/basic_packet_socket_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/candidate_pair_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/connection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/connection_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/default_ice_transport_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/dtls_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/dtls_transport_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/dtls_transport_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/fake_dtls_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/fake_ice_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/fake_packet_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/fake_port_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/ice_controller_factory_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/ice_controller_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/ice_credentials_iterator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/ice_transport_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/mdns_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/mock_async_resolver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/mock_ice_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/p2p_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/p2p_transport_channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/p2p_transport_channel_ice_field_trials.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/packet_transport_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/port_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/port_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/pseudo_tcp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/regathering_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/stun_port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/stun_request.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/stun_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/tcp_port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/test_stun_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/test_turn_customizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/test_turn_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/transport_description.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/transport_description_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/transport_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/turn_port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/turn_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/base/udp_port.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/client/basic_port_allocator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/client/relay_port_factory_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/client/turn_port_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/p2p/stunprober/stun_prober.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/audio_rtp_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/audio_track.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/channel_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/channel_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/connection_context.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/data_channel_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/data_channel_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/dtls_srtp_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/dtls_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/dtmf_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/external_hmac.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/ice_server_parsing.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/ice_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/jitter_buffer_delay.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/jitter_buffer_delay_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/jitter_buffer_delay_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/jsep_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/jsep_transport_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/local_audio_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/media_protocol_names.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/media_session.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/media_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/media_stream_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/peer_connection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/peer_connection_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/peer_connection_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/peer_connection_message_handler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/peer_connection_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/remote_audio_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtc_stats_collector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtc_stats_traversal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtcp_mux_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_data_channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_media_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_parameters_conversion.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_sender.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_transceiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_transmission_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/rtp_transport_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/sctp_data_channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/sctp_data_channel_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/sctp_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/sctp_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/sdp_offer_answer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/sdp_serializer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/sdp_state_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/sdp_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/session_description.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/simulcast_description.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/srtp_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/srtp_session.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/srtp_transport.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/stats_collector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/stats_collector_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/stream_collection.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/android_test_initializer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_audio_capture_module.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_data_channel_provider.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_peer_connection_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_peer_connection_for_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_periodic_video_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_periodic_video_track_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_rtc_certificate_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_video_track_renderer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/fake_video_track_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/frame_generator_capturer_video_track_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/integration_test_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/mock_channel_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/mock_data_channel.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/mock_delayable.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/mock_peer_connection_observers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/mock_rtp_receiver_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/mock_rtp_sender_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/peer_connection_test_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/rtc_stats_obtainer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/rtp_transport_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/srtp_test_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/test/test_sdp_strings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/track_media_info_map.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/transceiver_list.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/transport_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/usage_pattern.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/used_ids.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/video_rtp_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/video_rtp_track_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/video_track.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/video_track_source.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/webrtc_sdp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/pc/webrtc_session_description_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/arraysize.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/async_invoker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/async_invoker_inl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/async_packet_socket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/async_resolver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/async_resolver_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/async_socket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/async_tcp_socket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/async_udp_socket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/atomic_ops.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/bit_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/boringssl_certificate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/boringssl_identity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/bounded_inline_vector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/bounded_inline_vector_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/buffer_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/byte_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/byte_order.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/callback_list.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/checks.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/compile_assert_c.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/constructor_magic.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/copy_on_write_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/cpu_time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/crc32.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/crypt_string.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/data_rate_limiter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/deprecated/recursive_critical_section.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/dscp.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/event_tracer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/alr_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/balanced_degradation_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/cpu_speed_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/encoder_info_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/field_trial_list.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/field_trial_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/field_trial_units.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/jitter_upper_bound_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/keyframe_interval_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/min_video_bitrate_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/normalize_simulcast_size_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/quality_rampup_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/quality_scaler_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/quality_scaling_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/rate_control_settings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/rtt_mult_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/stable_target_rate_experiment.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/experiments/struct_parameters_parser.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/fake_clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/fake_mdns_responder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/fake_network.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/fake_ssl_identity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/file_rotating_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/firewall_socket_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/format_macros.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/gtest_prod_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/gunit.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/http_common.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ifaddrs_android.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ifaddrs_converter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ignore_wundef.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/internal/default_socket_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ip_address.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/location.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/log_sinks.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/logging.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/mdns_responder_interface.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/memory/aligned_malloc.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/memory/fifo_buffer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/memory_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/memory_usage.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/message_buffer_reader.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/message_digest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/message_handler.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/nat_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/nat_socket_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/nat_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/net_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/net_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/network.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/network/sent_packet.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/network_constants.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/network_monitor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/network_monitor_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/network_route.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/null_socket_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/divide_round.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/event_based_exponential_moving_average.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/event_rate_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/exp_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/histogram_percentile_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/math_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/mod_ops.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/moving_average.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/moving_max_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/moving_median_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/percentile_filter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/running_statistics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/safe_compare.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/safe_conversions.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/safe_conversions_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/safe_minmax.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/sample_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/sample_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/numerics/sequence_number_util.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/one_time_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl_certificate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl_digest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl_identity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl_key_pair.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl_session_cache.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl_stream_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/openssl_utility.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/operations_chain.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/physical_socket_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/platform_thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/platform_thread_types.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/protobuf_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/proxy_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/proxy_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/race_checker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/random.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/rate_limiter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/rate_statistics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/rate_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ref_count.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ref_counted_object.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ref_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/rolling_accumulator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/rtc_certificate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/rtc_certificate_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/sanitizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/server_socket_adapters.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/sigslot_repeater.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/sigslot_tester.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/socket.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/socket_adapters.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/socket_address.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/socket_address_pair.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/socket_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/socket_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/socket_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/socket_unittest.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ssl_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ssl_certificate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ssl_fingerprint.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ssl_identity.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ssl_roots.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/ssl_stream_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/string_encode.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/string_to_number.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/string_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/strings/audio_format_to_string.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/strings/json.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/strings/string_builder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/strings/string_format.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/swap_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/synchronization/mutex.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/synchronization/mutex_abseil.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/synchronization/mutex_critical_section.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/synchronization/mutex_pthread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/synchronization/sequence_checker_internal.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/synchronization/yield.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/synchronization/yield_policy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/arch.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/asm_defines.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/assume.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/cocoa_threading.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/file_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/gcd_helpers.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/ignore_warnings.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/inline.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/no_unique_address.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/rtc_export.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/rtc_export_template.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/thread_registry.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/unused.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system/warn_current_thread_is_deadlocked.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/system_time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_queue.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_queue_for_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_queue_gcd.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_queue_libevent.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_queue_stdlib.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_queue_win.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_utils/pending_task_safety_flag.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_utils/repeating_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/task_utils/to_queued_task.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/test_base64.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/test_certificate_verifier.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/test_client.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/test_echo_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/test_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/third_party/base64/base64.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/third_party/sigslot/sigslot.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/thread.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/thread_annotations.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/thread_message.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/time/timestamp_extrapolator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/time_utils.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/timestamp_aligner.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/trace_event.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/type_traits.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/unique_id_generator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/units/unit_base.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/untyped_function.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/virtual_socket_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/weak_ptr.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win/create_direct3d_device.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win/get_activation_factory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win/hstring.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win/scoped_com_initializer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win/windows_version.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win32.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win32_socket_init.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win32_socket_server.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/win32_window.h delete mode 100644 client/webrtc/webrtc_demo/third/include/rtc_base/zero_memory.h delete mode 100644 client/webrtc/webrtc_demo/third/include/sdk/media_constraints.h delete mode 100644 client/webrtc/webrtc_demo/third/include/stats/test/rtc_test_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/system_wrappers/include/clock.h delete mode 100644 client/webrtc/webrtc_demo/third/include/system_wrappers/include/cpu_features_wrapper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/system_wrappers/include/cpu_info.h delete mode 100644 client/webrtc/webrtc_demo/third/include/system_wrappers/include/field_trial.h delete mode 100644 client/webrtc/webrtc_demo/third/include/system_wrappers/include/metrics.h delete mode 100644 client/webrtc/webrtc_demo/third/include/system_wrappers/include/ntp_time.h delete mode 100644 client/webrtc/webrtc_demo/third/include/system_wrappers/include/rtp_to_ntp_estimator.h delete mode 100644 client/webrtc/webrtc_demo/third/include/system_wrappers/include/sleep.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/balanced_constraint.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/bitrate_constraint.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/encode_usage_resource.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/overuse_frame_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/pixel_limit_resource.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/quality_rampup_experiment_helper.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/quality_scaler_resource.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/video_stream_encoder_resource.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/adaptation/video_stream_encoder_resource_manager.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/alignment_adjuster.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/buffered_frame_decryptor.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/call_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/call_stats2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/encoder_bitrate_adjuster.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/encoder_overshoot_detector.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/encoder_rtcp_feedback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/end_to_end_tests/multi_stream_tester.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/frame_dumping_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/frame_encode_metadata_writer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/quality_limitation_reason_tracker.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/quality_threshold.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/receive_statistics_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/receive_statistics_proxy2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/report_block_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/rtp_streams_synchronizer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/rtp_streams_synchronizer2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/rtp_video_stream_receiver.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/rtp_video_stream_receiver2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/rtp_video_stream_receiver_frame_transformer_delegate.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/send_delay_stats.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/send_statistics_proxy.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/stats_counter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/stream_synchronization.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/test/mock_video_stream_encoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/transport_adapter.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_analyzer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_loopback.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_quality_observer.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_quality_observer2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_quality_test.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_receive_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_receive_stream2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_send_stream.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_send_stream_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_source_sink_controller.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_stream_decoder.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_stream_decoder2.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_stream_decoder_impl.h delete mode 100644 client/webrtc/webrtc_demo/third/include/video/video_stream_encoder.h delete mode 100644 client/webrtc/webrtc_demo/webrtc_demo.pro delete mode 100644 client/webrtc/webrtc_demo/webrtc_demo.pro.user delete mode 100644 client/webrtc/webrtc_demo/webrtc_demo.pro.user.978c9f3 diff --git a/client/qt_gl_/yuvgl/components/toast.cpp b/client/rtmp_demo/yuvgl/components/toast.cpp similarity index 100% rename from client/qt_gl_/yuvgl/components/toast.cpp rename to client/rtmp_demo/yuvgl/components/toast.cpp diff --git a/client/qt_gl_/yuvgl/components/toast.h b/client/rtmp_demo/yuvgl/components/toast.h similarity index 100% rename from client/qt_gl_/yuvgl/components/toast.h rename to client/rtmp_demo/yuvgl/components/toast.h diff --git a/client/qt_gl_/yuvgl/components/toast.ui b/client/rtmp_demo/yuvgl/components/toast.ui similarity index 100% rename from client/qt_gl_/yuvgl/components/toast.ui rename to client/rtmp_demo/yuvgl/components/toast.ui diff --git a/client/qt_gl_/yuvgl/conanfile.txt b/client/rtmp_demo/yuvgl/conanfile.txt similarity index 100% rename from client/qt_gl_/yuvgl/conanfile.txt rename to client/rtmp_demo/yuvgl/conanfile.txt diff --git a/client/qt_gl_/yuvgl/cplaywidget.cpp b/client/rtmp_demo/yuvgl/cplaywidget.cpp similarity index 100% rename from client/qt_gl_/yuvgl/cplaywidget.cpp rename to client/rtmp_demo/yuvgl/cplaywidget.cpp diff --git a/client/qt_gl_/yuvgl/cplaywidget.h b/client/rtmp_demo/yuvgl/cplaywidget.h similarity index 100% rename from client/qt_gl_/yuvgl/cplaywidget.h rename to client/rtmp_demo/yuvgl/cplaywidget.h diff --git a/client/qt_gl_/yuvgl/inc/Base64.h b/client/rtmp_demo/yuvgl/inc/Base64.h similarity index 100% rename from client/qt_gl_/yuvgl/inc/Base64.h rename to client/rtmp_demo/yuvgl/inc/Base64.h diff --git a/client/qt_gl_/yuvgl/inc/BitmapEx.h b/client/rtmp_demo/yuvgl/inc/BitmapEx.h similarity index 100% rename from client/qt_gl_/yuvgl/inc/BitmapEx.h rename to client/rtmp_demo/yuvgl/inc/BitmapEx.h diff --git a/client/qt_gl_/yuvgl/inc/qedit.h b/client/rtmp_demo/yuvgl/inc/qedit.h similarity index 100% rename from client/qt_gl_/yuvgl/inc/qedit.h rename to client/rtmp_demo/yuvgl/inc/qedit.h diff --git a/client/qt_gl_/yuvgl/inc/utils.h b/client/rtmp_demo/yuvgl/inc/utils.h similarity index 100% rename from client/qt_gl_/yuvgl/inc/utils.h rename to client/rtmp_demo/yuvgl/inc/utils.h diff --git a/client/qt_gl_/yuvgl/inc/winuuids.h b/client/rtmp_demo/yuvgl/inc/winuuids.h similarity index 100% rename from client/qt_gl_/yuvgl/inc/winuuids.h rename to client/rtmp_demo/yuvgl/inc/winuuids.h diff --git a/client/qt_gl_/yuvgl/inc/zlib.h b/client/rtmp_demo/yuvgl/inc/zlib.h similarity index 100% rename from client/qt_gl_/yuvgl/inc/zlib.h rename to client/rtmp_demo/yuvgl/inc/zlib.h diff --git a/client/qt_gl_/yuvgl/librtmp/COPYING b/client/rtmp_demo/yuvgl/librtmp/COPYING similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/COPYING rename to client/rtmp_demo/yuvgl/librtmp/COPYING diff --git a/client/qt_gl_/yuvgl/librtmp/Makefile b/client/rtmp_demo/yuvgl/librtmp/Makefile similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/Makefile rename to client/rtmp_demo/yuvgl/librtmp/Makefile diff --git a/client/qt_gl_/yuvgl/librtmp/amf.c b/client/rtmp_demo/yuvgl/librtmp/amf.c similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/amf.c rename to client/rtmp_demo/yuvgl/librtmp/amf.c diff --git a/client/qt_gl_/yuvgl/librtmp/amf.h b/client/rtmp_demo/yuvgl/librtmp/amf.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/amf.h rename to client/rtmp_demo/yuvgl/librtmp/amf.h diff --git a/client/qt_gl_/yuvgl/librtmp/bytes.h b/client/rtmp_demo/yuvgl/librtmp/bytes.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/bytes.h rename to client/rtmp_demo/yuvgl/librtmp/bytes.h diff --git a/client/qt_gl_/yuvgl/librtmp/dh.h b/client/rtmp_demo/yuvgl/librtmp/dh.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/dh.h rename to client/rtmp_demo/yuvgl/librtmp/dh.h diff --git a/client/qt_gl_/yuvgl/librtmp/dhgroups.h b/client/rtmp_demo/yuvgl/librtmp/dhgroups.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/dhgroups.h rename to client/rtmp_demo/yuvgl/librtmp/dhgroups.h diff --git a/client/qt_gl_/yuvgl/librtmp/handshake.h b/client/rtmp_demo/yuvgl/librtmp/handshake.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/handshake.h rename to client/rtmp_demo/yuvgl/librtmp/handshake.h diff --git a/client/qt_gl_/yuvgl/librtmp/hashswf.c b/client/rtmp_demo/yuvgl/librtmp/hashswf.c similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/hashswf.c rename to client/rtmp_demo/yuvgl/librtmp/hashswf.c diff --git a/client/qt_gl_/yuvgl/librtmp/http.h b/client/rtmp_demo/yuvgl/librtmp/http.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/http.h rename to client/rtmp_demo/yuvgl/librtmp/http.h diff --git a/client/qt_gl_/yuvgl/librtmp/librtmp.3 b/client/rtmp_demo/yuvgl/librtmp/librtmp.3 similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/librtmp.3 rename to client/rtmp_demo/yuvgl/librtmp/librtmp.3 diff --git a/client/qt_gl_/yuvgl/librtmp/librtmp.3.html b/client/rtmp_demo/yuvgl/librtmp/librtmp.3.html similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/librtmp.3.html rename to client/rtmp_demo/yuvgl/librtmp/librtmp.3.html diff --git a/client/qt_gl_/yuvgl/librtmp/librtmp.pc.in b/client/rtmp_demo/yuvgl/librtmp/librtmp.pc.in similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/librtmp.pc.in rename to client/rtmp_demo/yuvgl/librtmp/librtmp.pc.in diff --git a/client/qt_gl_/yuvgl/librtmp/log.c b/client/rtmp_demo/yuvgl/librtmp/log.c similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/log.c rename to client/rtmp_demo/yuvgl/librtmp/log.c diff --git a/client/qt_gl_/yuvgl/librtmp/log.h b/client/rtmp_demo/yuvgl/librtmp/log.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/log.h rename to client/rtmp_demo/yuvgl/librtmp/log.h diff --git a/client/qt_gl_/yuvgl/librtmp/parseurl.c b/client/rtmp_demo/yuvgl/librtmp/parseurl.c similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/parseurl.c rename to client/rtmp_demo/yuvgl/librtmp/parseurl.c diff --git a/client/qt_gl_/yuvgl/librtmp/rtmp.c b/client/rtmp_demo/yuvgl/librtmp/rtmp.c similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/rtmp.c rename to client/rtmp_demo/yuvgl/librtmp/rtmp.c diff --git a/client/qt_gl_/yuvgl/librtmp/rtmp.h b/client/rtmp_demo/yuvgl/librtmp/rtmp.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/rtmp.h rename to client/rtmp_demo/yuvgl/librtmp/rtmp.h diff --git a/client/qt_gl_/yuvgl/librtmp/rtmp_sys.h b/client/rtmp_demo/yuvgl/librtmp/rtmp_sys.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/rtmp_sys.h rename to client/rtmp_demo/yuvgl/librtmp/rtmp_sys.h diff --git a/client/qt_gl_/yuvgl/librtmp/strncasecmp.h b/client/rtmp_demo/yuvgl/librtmp/strncasecmp.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/strncasecmp.h rename to client/rtmp_demo/yuvgl/librtmp/strncasecmp.h diff --git a/client/qt_gl_/yuvgl/librtmp/zlib.h b/client/rtmp_demo/yuvgl/librtmp/zlib.h similarity index 100% rename from client/qt_gl_/yuvgl/librtmp/zlib.h rename to client/rtmp_demo/yuvgl/librtmp/zlib.h diff --git a/client/qt_gl_/yuvgl/main.cpp b/client/rtmp_demo/yuvgl/main.cpp similarity index 100% rename from client/qt_gl_/yuvgl/main.cpp rename to client/rtmp_demo/yuvgl/main.cpp diff --git a/client/qt_gl_/yuvgl/mainwindow.cpp b/client/rtmp_demo/yuvgl/mainwindow.cpp similarity index 100% rename from client/qt_gl_/yuvgl/mainwindow.cpp rename to client/rtmp_demo/yuvgl/mainwindow.cpp diff --git a/client/qt_gl_/yuvgl/mainwindow.h b/client/rtmp_demo/yuvgl/mainwindow.h similarity index 100% rename from client/qt_gl_/yuvgl/mainwindow.h rename to client/rtmp_demo/yuvgl/mainwindow.h diff --git a/client/qt_gl_/yuvgl/mainwindow.ui b/client/rtmp_demo/yuvgl/mainwindow.ui similarity index 100% rename from client/qt_gl_/yuvgl/mainwindow.ui rename to client/rtmp_demo/yuvgl/mainwindow.ui diff --git a/client/qt_gl_/yuvgl/media/AACAudioCoder.cpp b/client/rtmp_demo/yuvgl/media/AACAudioCoder.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/AACAudioCoder.cpp rename to client/rtmp_demo/yuvgl/media/AACAudioCoder.cpp diff --git a/client/qt_gl_/yuvgl/media/AACAudioCoder.h b/client/rtmp_demo/yuvgl/media/AACAudioCoder.h similarity index 100% rename from client/qt_gl_/yuvgl/media/AACAudioCoder.h rename to client/rtmp_demo/yuvgl/media/AACAudioCoder.h diff --git a/client/qt_gl_/yuvgl/media/AACDecoder.cpp b/client/rtmp_demo/yuvgl/media/AACDecoder.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/AACDecoder.cpp rename to client/rtmp_demo/yuvgl/media/AACDecoder.cpp diff --git a/client/qt_gl_/yuvgl/media/AACDecoder.h b/client/rtmp_demo/yuvgl/media/AACDecoder.h similarity index 100% rename from client/qt_gl_/yuvgl/media/AACDecoder.h rename to client/rtmp_demo/yuvgl/media/AACDecoder.h diff --git a/client/qt_gl_/yuvgl/media/AudioCapture.cpp b/client/rtmp_demo/yuvgl/media/AudioCapture.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/AudioCapture.cpp rename to client/rtmp_demo/yuvgl/media/AudioCapture.cpp diff --git a/client/qt_gl_/yuvgl/media/AudioCapture.h b/client/rtmp_demo/yuvgl/media/AudioCapture.h similarity index 100% rename from client/qt_gl_/yuvgl/media/AudioCapture.h rename to client/rtmp_demo/yuvgl/media/AudioCapture.h diff --git a/client/qt_gl_/yuvgl/media/AudioPlayer.cpp b/client/rtmp_demo/yuvgl/media/AudioPlayer.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/AudioPlayer.cpp rename to client/rtmp_demo/yuvgl/media/AudioPlayer.cpp diff --git a/client/qt_gl_/yuvgl/media/AudioPlayer.h b/client/rtmp_demo/yuvgl/media/AudioPlayer.h similarity index 100% rename from client/qt_gl_/yuvgl/media/AudioPlayer.h rename to client/rtmp_demo/yuvgl/media/AudioPlayer.h diff --git a/client/qt_gl_/yuvgl/media/CameraCapture.cpp b/client/rtmp_demo/yuvgl/media/CameraCapture.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/CameraCapture.cpp rename to client/rtmp_demo/yuvgl/media/CameraCapture.cpp diff --git a/client/qt_gl_/yuvgl/media/CameraCapture.h b/client/rtmp_demo/yuvgl/media/CameraCapture.h similarity index 100% rename from client/qt_gl_/yuvgl/media/CameraCapture.h rename to client/rtmp_demo/yuvgl/media/CameraCapture.h diff --git a/client/qt_gl_/yuvgl/media/DXGICapture.cpp b/client/rtmp_demo/yuvgl/media/DXGICapture.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/DXGICapture.cpp rename to client/rtmp_demo/yuvgl/media/DXGICapture.cpp diff --git a/client/qt_gl_/yuvgl/media/DXGICapture.h b/client/rtmp_demo/yuvgl/media/DXGICapture.h similarity index 100% rename from client/qt_gl_/yuvgl/media/DXGICapture.h rename to client/rtmp_demo/yuvgl/media/DXGICapture.h diff --git a/client/qt_gl_/yuvgl/media/DXGICaptureHelper.h b/client/rtmp_demo/yuvgl/media/DXGICaptureHelper.h similarity index 100% rename from client/qt_gl_/yuvgl/media/DXGICaptureHelper.h rename to client/rtmp_demo/yuvgl/media/DXGICaptureHelper.h diff --git a/client/qt_gl_/yuvgl/media/DXGICaptureTypes.h b/client/rtmp_demo/yuvgl/media/DXGICaptureTypes.h similarity index 100% rename from client/qt_gl_/yuvgl/media/DXGICaptureTypes.h rename to client/rtmp_demo/yuvgl/media/DXGICaptureTypes.h diff --git a/client/qt_gl_/yuvgl/media/Debuger.h b/client/rtmp_demo/yuvgl/media/Debuger.h similarity index 100% rename from client/qt_gl_/yuvgl/media/Debuger.h rename to client/rtmp_demo/yuvgl/media/Debuger.h diff --git a/client/qt_gl_/yuvgl/media/H264Docoder.cpp b/client/rtmp_demo/yuvgl/media/H264Docoder.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/H264Docoder.cpp rename to client/rtmp_demo/yuvgl/media/H264Docoder.cpp diff --git a/client/qt_gl_/yuvgl/media/H264Docoder.h b/client/rtmp_demo/yuvgl/media/H264Docoder.h similarity index 100% rename from client/qt_gl_/yuvgl/media/H264Docoder.h rename to client/rtmp_demo/yuvgl/media/H264Docoder.h diff --git a/client/qt_gl_/yuvgl/media/ImageUtil.cpp b/client/rtmp_demo/yuvgl/media/ImageUtil.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/ImageUtil.cpp rename to client/rtmp_demo/yuvgl/media/ImageUtil.cpp diff --git a/client/qt_gl_/yuvgl/media/ImageUtil.h b/client/rtmp_demo/yuvgl/media/ImageUtil.h similarity index 100% rename from client/qt_gl_/yuvgl/media/ImageUtil.h rename to client/rtmp_demo/yuvgl/media/ImageUtil.h diff --git a/client/qt_gl_/yuvgl/media/RtmpPuller.cpp b/client/rtmp_demo/yuvgl/media/RtmpPuller.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/RtmpPuller.cpp rename to client/rtmp_demo/yuvgl/media/RtmpPuller.cpp diff --git a/client/qt_gl_/yuvgl/media/RtmpPuller.h b/client/rtmp_demo/yuvgl/media/RtmpPuller.h similarity index 100% rename from client/qt_gl_/yuvgl/media/RtmpPuller.h rename to client/rtmp_demo/yuvgl/media/RtmpPuller.h diff --git a/client/qt_gl_/yuvgl/media/RtmpPuller2.cpp b/client/rtmp_demo/yuvgl/media/RtmpPuller2.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/RtmpPuller2.cpp rename to client/rtmp_demo/yuvgl/media/RtmpPuller2.cpp diff --git a/client/qt_gl_/yuvgl/media/RtmpPuller2.h b/client/rtmp_demo/yuvgl/media/RtmpPuller2.h similarity index 100% rename from client/qt_gl_/yuvgl/media/RtmpPuller2.h rename to client/rtmp_demo/yuvgl/media/RtmpPuller2.h diff --git a/client/qt_gl_/yuvgl/media/RtmpPusher.cpp b/client/rtmp_demo/yuvgl/media/RtmpPusher.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/RtmpPusher.cpp rename to client/rtmp_demo/yuvgl/media/RtmpPusher.cpp diff --git a/client/qt_gl_/yuvgl/media/RtmpPusher.h b/client/rtmp_demo/yuvgl/media/RtmpPusher.h similarity index 100% rename from client/qt_gl_/yuvgl/media/RtmpPusher.h rename to client/rtmp_demo/yuvgl/media/RtmpPusher.h diff --git a/client/qt_gl_/yuvgl/media/SdlPlayer.h b/client/rtmp_demo/yuvgl/media/SdlPlayer.h similarity index 100% rename from client/qt_gl_/yuvgl/media/SdlPlayer.h rename to client/rtmp_demo/yuvgl/media/SdlPlayer.h diff --git a/client/qt_gl_/yuvgl/media/VideoCoder.cpp b/client/rtmp_demo/yuvgl/media/VideoCoder.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/VideoCoder.cpp rename to client/rtmp_demo/yuvgl/media/VideoCoder.cpp diff --git a/client/qt_gl_/yuvgl/media/VideoCoder.h b/client/rtmp_demo/yuvgl/media/VideoCoder.h similarity index 100% rename from client/qt_gl_/yuvgl/media/VideoCoder.h rename to client/rtmp_demo/yuvgl/media/VideoCoder.h diff --git a/client/qt_gl_/yuvgl/media/audiocaptureff.cpp b/client/rtmp_demo/yuvgl/media/audiocaptureff.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/audiocaptureff.cpp rename to client/rtmp_demo/yuvgl/media/audiocaptureff.cpp diff --git a/client/qt_gl_/yuvgl/media/audiocaptureff.h b/client/rtmp_demo/yuvgl/media/audiocaptureff.h similarity index 100% rename from client/qt_gl_/yuvgl/media/audiocaptureff.h rename to client/rtmp_demo/yuvgl/media/audiocaptureff.h diff --git a/client/qt_gl_/yuvgl/media/imgutil.cpp b/client/rtmp_demo/yuvgl/media/imgutil.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/imgutil.cpp rename to client/rtmp_demo/yuvgl/media/imgutil.cpp diff --git a/client/qt_gl_/yuvgl/media/librtmp_send264.h b/client/rtmp_demo/yuvgl/media/librtmp_send264.h similarity index 100% rename from client/qt_gl_/yuvgl/media/librtmp_send264.h rename to client/rtmp_demo/yuvgl/media/librtmp_send264.h diff --git a/client/qt_gl_/yuvgl/media/screen_capture.cpp b/client/rtmp_demo/yuvgl/media/screen_capture.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/screen_capture.cpp rename to client/rtmp_demo/yuvgl/media/screen_capture.cpp diff --git a/client/qt_gl_/yuvgl/media/screen_capture.h b/client/rtmp_demo/yuvgl/media/screen_capture.h similarity index 100% rename from client/qt_gl_/yuvgl/media/screen_capture.h rename to client/rtmp_demo/yuvgl/media/screen_capture.h diff --git a/client/qt_gl_/yuvgl/media/sps_decode.cpp b/client/rtmp_demo/yuvgl/media/sps_decode.cpp similarity index 100% rename from client/qt_gl_/yuvgl/media/sps_decode.cpp rename to client/rtmp_demo/yuvgl/media/sps_decode.cpp diff --git a/client/qt_gl_/yuvgl/media/sps_decode.h b/client/rtmp_demo/yuvgl/media/sps_decode.h similarity index 100% rename from client/qt_gl_/yuvgl/media/sps_decode.h rename to client/rtmp_demo/yuvgl/media/sps_decode.h diff --git a/client/qt_gl_/yuvgl/qedit.h b/client/rtmp_demo/yuvgl/qedit.h similarity index 100% rename from client/qt_gl_/yuvgl/qedit.h rename to client/rtmp_demo/yuvgl/qedit.h diff --git a/client/qt_gl_/yuvgl/readme.md b/client/rtmp_demo/yuvgl/readme.md similarity index 100% rename from client/qt_gl_/yuvgl/readme.md rename to client/rtmp_demo/yuvgl/readme.md diff --git a/client/qt_gl_/yuvgl/ui_mainwindow.h b/client/rtmp_demo/yuvgl/ui_mainwindow.h similarity index 100% rename from client/qt_gl_/yuvgl/ui_mainwindow.h rename to client/rtmp_demo/yuvgl/ui_mainwindow.h diff --git a/client/qt_gl_/yuvgl/ui_process.h b/client/rtmp_demo/yuvgl/ui_process.h similarity index 100% rename from client/qt_gl_/yuvgl/ui_process.h rename to client/rtmp_demo/yuvgl/ui_process.h diff --git a/client/qt_gl_/yuvgl/ui_qsstoast.h b/client/rtmp_demo/yuvgl/ui_qsstoast.h similarity index 100% rename from client/qt_gl_/yuvgl/ui_qsstoast.h rename to client/rtmp_demo/yuvgl/ui_qsstoast.h diff --git a/client/qt_gl_/yuvgl/ui_toast.h b/client/rtmp_demo/yuvgl/ui_toast.h similarity index 100% rename from client/qt_gl_/yuvgl/ui_toast.h rename to client/rtmp_demo/yuvgl/ui_toast.h diff --git a/client/qt_gl_/yuvgl/utils/Base64.cpp b/client/rtmp_demo/yuvgl/utils/Base64.cpp similarity index 100% rename from client/qt_gl_/yuvgl/utils/Base64.cpp rename to client/rtmp_demo/yuvgl/utils/Base64.cpp diff --git a/client/qt_gl_/yuvgl/utils/Debuger.cpp b/client/rtmp_demo/yuvgl/utils/Debuger.cpp similarity index 100% rename from client/qt_gl_/yuvgl/utils/Debuger.cpp rename to client/rtmp_demo/yuvgl/utils/Debuger.cpp diff --git a/client/qt_gl_/yuvgl/utils/utils.cpp b/client/rtmp_demo/yuvgl/utils/utils.cpp similarity index 100% rename from client/qt_gl_/yuvgl/utils/utils.cpp rename to client/rtmp_demo/yuvgl/utils/utils.cpp diff --git a/client/qt_gl_/yuvgl/yuvgl.pro b/client/rtmp_demo/yuvgl/yuvgl.pro similarity index 100% rename from client/qt_gl_/yuvgl/yuvgl.pro rename to client/rtmp_demo/yuvgl/yuvgl.pro diff --git a/client/qt_gl_/yuvgl/yuvgl.pro.user b/client/rtmp_demo/yuvgl/yuvgl.pro.user similarity index 100% rename from client/qt_gl_/yuvgl/yuvgl.pro.user rename to client/rtmp_demo/yuvgl/yuvgl.pro.user diff --git a/client/qt_gl_/yuvgl/zlib.h b/client/rtmp_demo/yuvgl/zlib.h similarity index 100% rename from client/qt_gl_/yuvgl/zlib.h rename to client/rtmp_demo/yuvgl/zlib.h diff --git a/client/webrtc/webrtc_demo/src/cplaywidget.cpp b/client/webrtc/webrtc_demo/src/cplaywidget.cpp deleted file mode 100644 index caee819..0000000 --- a/client/webrtc/webrtc_demo/src/cplaywidget.cpp +++ /dev/null @@ -1,434 +0,0 @@ -#include "CPlayWidget.h" - -#include -#include -#include -#include "CPlayWidget.h" - - -// ¶¥µã×ÅÉ«Æ÷Ô´Âë - -const char *vsrcyuv = "attribute vec4 vertexIn; \ -attribute vec2 textureIn; \ -varying vec2 textureOut; \ -void main(void) \ -{ \ - gl_Position = vertexIn; \ - textureOut = textureIn; \ -}"; - - -// Ƭ¶Î×ÅÉ«Æ÷Ô´Âë - -const char *fsrcyuv = "varying vec2 textureOut; \ -uniform sampler2D tex_y; \ -uniform sampler2D tex_u; \ -uniform sampler2D tex_v; \ -void main(void) \ -{ \ - vec3 yuv; \ - vec3 rgb; \ - yuv.x = texture2D(tex_y, textureOut).r; \ - yuv.y = texture2D(tex_u, textureOut).r - 0.5; \ - yuv.z = texture2D(tex_v, textureOut).r - 0.5; \ - rgb = mat3( 1, 1, 1, \ - 0, -0.39465, 2.03211, \ - 1.13983, -0.58060, 0) * yuv; \ - gl_FragColor = vec4(rgb, 1); \ -}"; - -// rgbƬ¶Î×ÅÉ«Æ÷Ô´Âë -// ×¢ÒâMEDIASUBTYPE_RGB32 ÊÇbgrµÄ£¬ËùÒÔÐèÒªÔÙ½øÐÐÒ»´Îת»» - - -const char *fsrcrgb = "varying vec2 textureOut; \ - uniform sampler2D rgbdata; \ - void main() \ - { \ - gl_FragColor = texture(rgbdata, textureOut); \ - }"; - -void CPlayWidget::OnUpdateFrame() { - this->PlayOneFrame(); -} - -void CPlayWidget::OnPaintData(const uint8_t *data, uint32_t len) -{ - if(nullptr == m_pBufYuv420p) - { - m_pBufYuv420p = new unsigned char[len]; - qDebug("CPlayWidget::PlayOneFrame new data memory. Len=%d width=%d height=%d\n", - len, m_nVideoW, m_nVideoW); - memcpy(m_pBufYuv420p, data,len); - //ˢнçÃæ,´¥·¢paintGL½Ó¿Ú - update(); - } -} - -CPlayWidget::CPlayWidget(QWidget *parent):QOpenGLWidget(parent) { - textureUniformY = 0; - textureUniformU = 0; - textureUniformV = 0; - id_y = 0; - id_u = 0; - id_v = 0; - m_pTextureRGB = nullptr; - m_pBufYuv420p = nullptr; - m_pVSHader = NULL; - m_pFSHader = NULL; - m_pShaderProgram = NULL; - m_pTextureY = NULL; - m_pTextureU = NULL; - m_pTextureV = NULL; - m_pYuvFile = NULL; - m_nVideoH = 0; - m_nVideoW = 0; - mType = TYPE_YUV420P; - connect(&this->tm,SIGNAL(timeout()),this,SLOT(OnUpdateFrame())); - //tm.start(1000); -} - -CPlayWidget::~CPlayWidget() { -} - -void CPlayWidget::PlayOneFrame() {//º¯Êý¹¦ÄܶÁÈ¡Ò»ÕÅyuvͼÏñÊý¾Ý½øÐÐÏÔʾ,ÿµ¥»÷Ò»´Î£¬¾ÍÏÔʾһÕÅͼƬ - if(NULL == m_pYuvFile) - { - //´ò¿ªyuvÊÓƵÎļþ ×¢ÒâÐÞ¸ÄÎļþ·¾¶ - // m_pYuvFile = fopen("F://OpenglYuvDemo//1920_1080.yuv", "rb"); - m_pYuvFile = fopen("F://md_sample_sp420_1080p.yuv", "rb"); - //¸ù¾ÝyuvÊÓƵÊý¾ÝµÄ·Ö±æÂÊÉèÖÿí¸ß,demoµ±ÖÐÊÇ1080p£¬Õâ¸öµØ·½Òª×¢Òâ¸úʵ¼ÊÊý¾Ý·Ö±æÂʶÔÓ¦ÉÏ -// m_nVideoW = 1920; -// m_nVideoH = 1080; - } - //ÉêÇëÄÚ´æ´æÒ»Ö¡yuvͼÏñÊý¾Ý,Æä´óСΪ·Ö±æÂʵÄ1.5±¶ - - - int nLen = m_nVideoW*m_nVideoH*3/2; - if(nullptr == m_pBufYuv420p) - { - m_pBufYuv420p = new unsigned char[nLen]; - qDebug("CPlayWidget::PlayOneFrame new data memory. Len=%d width=%d height=%d\n", - nLen, m_nVideoW, m_nVideoW); - } - //½«Ò»Ö¡yuvͼÏñ¶Áµ½ÄÚ´æÖÐ - - if(NULL == m_pYuvFile) - { - qFatal("read yuv file err.may be path is wrong!\n"); - return; - } - fread(m_pBufYuv420p, 1, nLen, m_pYuvFile); - //ˢнçÃæ,´¥·¢paintGL½Ó¿Ú - update(); - return; -} - -int CPlayWidget::SetDataType(CPlayWidget::IMG_TYPE type){ - this->mType = type; - return 0; -} - -int CPlayWidget::OnCameraData(uint8_t *dat, uint32_t size) -{ - if(nullptr == m_pBufYuv420p) - { - m_pBufYuv420p = new unsigned char[size]; - qDebug("CPlayWidget::PlayOneFrame new data memory. Len=%d width=%d height=%d\n", - size, m_nVideoW, m_nVideoW); - memcpy(m_pBufYuv420p, dat,size); - //ˢнçÃæ,´¥·¢paintGL½Ó¿Ú - update(); - }else{ - memcpy(m_pBufYuv420p, dat,size); - update(); - - } - - return 0; - -} - -int CPlayWidget::SetImgSize(uint32_t width, uint32_t height) -{ - m_nVideoH = height; - m_nVideoW = width; - if(mType == TYPE_RGB32){ - m_pBufRgb32 = new uint8_t[width * height *4]; - } - if(mType == TYPE_YUV420P){ - m_pBufYuv420p = new uint8_t[width * height *3/2]; - } - return 0; -} - - -/* - - * Y = 0.299 R + 0.587 G + 0.114 B - -U = - 0.1687 R - 0.3313 G + 0.5 B + 128 - -V = 0.5 R - 0.4187 G - 0.0813 B + 128 - -·´¹ýÀ´£¬RGB Ò²¿ÉÒÔÖ±½Ó´ÓYUV (256¼¶±ð) ¼ÆËã: - -R = Y + 1.402 (Cr-128) - -G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128) - -B = Y + 1.772 (Cb-128) -*/ -void CPlayWidget::initializeGL() -{ - initializeOpenGLFunctions(); - glEnable(GL_DEPTH_TEST); - - //ÏÖ´úopengläÖȾ¹ÜÏßÒÀÀµ×ÅÉ«Æ÷À´´¦Àí´«ÈëµÄÊý¾Ý - //×ÅÉ«Æ÷£º¾ÍÊÇʹÓÃopenGL×ÅÉ«ÓïÑÔ(OpenGL Shading Language, GLSL)±àдµÄÒ»¸öСº¯Êý, - // GLSLÊǹ¹³ÉËùÓÐOpenGL×ÅÉ«Æ÷µÄÓïÑÔ,¾ßÌåµÄGLSLÓïÑÔµÄÓï·¨ÐèÒª¶ÁÕß²éÕÒÏà¹Ø×ÊÁÏ - //³õʼ»¯¶¥µã×ÅÉ«Æ÷ ¶ÔÏó - - m_pVSHader = new QOpenGLShader(QOpenGLShader::Vertex, this); - - //±àÒ붥µã×ÅÉ«Æ÷³ÌÐò - bool bCompile = m_pVSHader->compileSourceCode(vsrcyuv); - if(!bCompile) - { - // todo ÉèÖôíÎó״̬ - } - //³õʼ»¯Æ¬¶Î×ÅÉ«Æ÷ ¹¦ÄÜgpuÖÐyuvת»»³Érgb - m_pFSHader = new QOpenGLShader(QOpenGLShader::Fragment, this); - if(mType == TYPE_RGB32){ - bCompile = m_pFSHader->compileSourceCode(fsrcrgb); - } - if(mType == TYPE_YUV420P){ - bCompile = m_pFSHader->compileSourceCode(fsrcyuv); - } - if(!bCompile) - { - // todo ÉèÖôíÎó״̬ - } -#define PROGRAM_VERTEX_ATTRIBUTE 0 -#define PROGRAM_TEXCOORD_ATTRIBUTE 1 - //´´½¨×ÅÉ«Æ÷³ÌÐòÈÝÆ÷ - - m_pShaderProgram = new QOpenGLShaderProgram; - //½«Æ¬¶Î×ÅÉ«Æ÷Ìí¼Óµ½³ÌÐòÈÝÆ÷ - - m_pShaderProgram->addShader(m_pFSHader); - //½«¶¥µã×ÅÉ«Æ÷Ìí¼Óµ½³ÌÐòÈÝÆ÷ - - m_pShaderProgram->addShader(m_pVSHader); - //°ó¶¨ÊôÐÔvertexInµ½Ö¸¶¨Î»ÖÃATTRIB_VERTEX,¸ÃÊôÐÔÔÚ¶¥µã×ÅÉ«Ô´ÂëÆäÖÐÓÐÉùÃ÷ - - m_pShaderProgram->bindAttributeLocation("vertexIn", ATTRIB_VERTEX); - //°ó¶¨ÊôÐÔtextureInµ½Ö¸¶¨Î»ÖÃATTRIB_TEXTURE,¸ÃÊôÐÔÔÚ¶¥µã×ÅÉ«Ô´ÂëÆäÖÐÓÐÉùÃ÷ - - m_pShaderProgram->bindAttributeLocation("textureIn", ATTRIB_TEXTURE); - //Á´½ÓËùÓÐËùÓÐÌíÈëµ½µÄ×ÅÉ«Æ÷³ÌÐò - - m_pShaderProgram->link(); - - //¼¤»îËùÓÐÁ´½Ó - - m_pShaderProgram->bind(); - - if(this->mType == TYPE_YUV420P){ - initShaderYuv(); - } - if(this->mType == TYPE_RGB32){ - initShaderRgb(); - } - glClearColor(0.0,0.0,0.0,0.0);//ÉèÖñ³¾°É« -} - - -void CPlayWidget::resizeGL(int w, int h) -{ - if(h == 0)// ·ÀÖ¹±»Áã³ý - { - h = 1;// ½«¸ßÉèΪ1 - } - //ÉèÖÃÊÓ¿Ú - glViewport(0,0, w,h); -} - -void CPlayWidget::paintGL() -{ - if(mType == TYPE_YUV420P) - loadYuvTexture(); - if(mType == TYPE_RGB32){ - loadRgbTexture(); - } - //ʹÓö¥µãÊý×鷽ʽ»æÖÆͼÐÎ - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - return; -} - -void CPlayWidget::initShaderYuv() -{ - //¶ÁÈ¡×ÅÉ«Æ÷ÖеÄÊý¾Ý±äÁ¿tex_y, tex_u, tex_vµÄλÖÃ,ÕâЩ±äÁ¿µÄÉùÃ÷¿ÉÒÔÔÚ - //Ƭ¶Î×ÅÉ«Æ÷Ô´ÂëÖпÉÒÔ¿´µ½ - textureUniformY = m_pShaderProgram->uniformLocation("tex_y"); - textureUniformU = m_pShaderProgram->uniformLocation("tex_u"); - textureUniformV = m_pShaderProgram->uniformLocation("tex_v"); - // ¶¥µã¾ØÕó - static const GLfloat vertexVertices[] = { - -1.0f, -1.0f, - 1.0f, -1.0f, - -1.0f, 1.0f, - 1.0f, 1.0f, - }; - //ÎÆÀí¾ØÕó - static const GLfloat textureVertices[] = { - 0.0f, 1.0f, - 1.0f, 1.0f, - 0.0f, 0.0f, - 1.0f, 0.0f, - }; - //ÉèÖÃÊôÐÔATTRIB_VERTEXµÄ¶¥µã¾ØÕóÖµÒÔ¼°¸ñʽ - glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, vertexVertices); - //ÉèÖÃÊôÐÔATTRIB_TEXTUREµÄÎÆÀí¾ØÕóÖµÒÔ¼°¸ñʽ - glVertexAttribPointer(ATTRIB_TEXTURE, 2, GL_FLOAT, 0, 0, textureVertices); - //ÆôÓÃATTRIB_VERTEXÊôÐÔµÄÊý¾Ý,ĬÈÏÊÇ¹Ø±ÕµÄ - glEnableVertexAttribArray(ATTRIB_VERTEX); - //ÆôÓÃATTRIB_TEXTUREÊôÐÔµÄÊý¾Ý,ĬÈÏÊÇ¹Ø±ÕµÄ - glEnableVertexAttribArray(ATTRIB_TEXTURE); - //·Ö±ð´´½¨y,u,vÎÆÀí¶ÔÏó - m_pTextureY = new QOpenGLTexture(QOpenGLTexture::Target2D); - m_pTextureU = new QOpenGLTexture(QOpenGLTexture::Target2D); - m_pTextureV = new QOpenGLTexture(QOpenGLTexture::Target2D); - m_pTextureY->create(); - m_pTextureU->create(); - m_pTextureV->create(); - //»ñÈ¡·µ»Øy·ÖÁ¿µÄÎÆÀíË÷ÒýÖµ - id_y = m_pTextureY->textureId(); - //»ñÈ¡·µ»Øu·ÖÁ¿µÄÎÆÀíË÷ÒýÖµ - id_u = m_pTextureU->textureId(); - //»ñÈ¡·µ»Øv·ÖÁ¿µÄÎÆÀíË÷ÒýÖµ - id_v = m_pTextureV->textureId(); -} - -void CPlayWidget::initShaderRgb() -{ - //¶ÁÈ¡×ÅÉ«Æ÷ÖеÄÊý¾Ý±äÁ¿tex_y, tex_u, tex_vµÄλÖÃ,ÕâЩ±äÁ¿µÄÉùÃ÷¿ÉÒÔÔÚ - //Ƭ¶Î×ÅÉ«Æ÷Ô´ÂëÖпÉÒÔ¿´µ½ - textureUniformRGB = m_pShaderProgram->uniformLocation("rgbdata"); - // ¶¥µã¾ØÕó - static const GLfloat vertexVertices[] = { - -1.0f, -1.0f, - 1.0f, -1.0f, - -1.0f, 1.0f, - 1.0f, 1.0f, - }; - - //ÎÆÀí¾ØÕó - - static const GLfloat textureVertices[] = { - 0.0f, 0.0f, - 1.0f, 0.0f, - 0.0f, 1.0f, - 1.0f, 1.0f, - }; - //ÉèÖÃÊôÐÔATTRIB_VERTEXµÄ¶¥µã¾ØÕóÖµÒÔ¼°¸ñʽ - glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, vertexVertices); - //ÉèÖÃÊôÐÔATTRIB_TEXTUREµÄÎÆÀí¾ØÕóÖµÒÔ¼°¸ñʽ - glVertexAttribPointer(ATTRIB_TEXTURE, 2, GL_FLOAT, 0, 0, textureVertices); - //ÆôÓÃATTRIB_VERTEXÊôÐÔµÄÊý¾Ý,ĬÈÏÊÇ¹Ø±ÕµÄ - glEnableVertexAttribArray(ATTRIB_VERTEX); - //ÆôÓÃATTRIB_TEXTUREÊôÐÔµÄÊý¾Ý,ĬÈÏÊÇ¹Ø±ÕµÄ - glEnableVertexAttribArray(ATTRIB_TEXTURE); - //·Ö±ð´´½¨y,u,vÎÆÀí¶ÔÏó - m_pTextureRGB = new QOpenGLTexture(QOpenGLTexture::Target2D); - m_pTextureRGB->create(); - //»ñÈ¡·µ»Øy·ÖÁ¿µÄÎÆÀíË÷ÒýÖµ - id_rgb = m_pTextureRGB->textureId(); -} - -int CPlayWidget::loadYuvTexture() -{ - //¼ÓÔØyÊý¾ÝÎÆÀí - //¼¤»îÎÆÀíµ¥ÔªGL_TEXTURE0 - glActiveTexture(GL_TEXTURE0); - //ʹÓÃÀ´×ÔyÊý¾ÝÉú³ÉÎÆÀí - glBindTexture(GL_TEXTURE_2D, id_y); - //ʹÓÃÄÚ´æÖÐm_pBufYuv420pÊý¾Ý´´½¨ÕæÕýµÄyÊý¾ÝÎÆÀí - glTexImage2D(GL_TEXTURE_2D, - 0, - GL_RED, - m_nVideoW, - m_nVideoH, - 0, - GL_RED, - GL_UNSIGNED_BYTE, - m_pBufYuv420p); - - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - //¼ÓÔØuÊý¾ÝÎÆÀí - glActiveTexture(GL_TEXTURE1);//¼¤»îÎÆÀíµ¥ÔªGL_TEXTURE1 - glBindTexture(GL_TEXTURE_2D, id_u); - glTexImage2D(GL_TEXTURE_2D, - 0, GL_RED, - m_nVideoW/2, - m_nVideoH/2, - 0, - GL_RED, - GL_UNSIGNED_BYTE, - (char*)m_pBufYuv420p+m_nVideoW*m_nVideoH); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - //¼ÓÔØvÊý¾ÝÎÆÀí - glActiveTexture(GL_TEXTURE2);//¼¤»îÎÆÀíµ¥ÔªGL_TEXTURE2 - glBindTexture(GL_TEXTURE_2D, id_v); - glTexImage2D(GL_TEXTURE_2D, - 0, GL_RED, - m_nVideoW/2, - m_nVideoH/2, - 0, GL_RED, - GL_UNSIGNED_BYTE, - (char*)m_pBufYuv420p+m_nVideoW*m_nVideoH*5/4); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - //Ö¸¶¨yÎÆÀíҪʹÓÃÐÂÖµ Ö»ÄÜÓÃ0,1,2µÈ±íʾÎÆÀíµ¥ÔªµÄË÷Òý£¬ÕâÊÇopengl²»ÈËÐÔ»¯µÄµØ·½ - //0¶ÔÓ¦ÎÆÀíµ¥ÔªGL_TEXTURE0 1¶ÔÓ¦ÎÆÀíµ¥ÔªGL_TEXTURE1 2¶ÔÓ¦ÎÆÀíµÄµ¥Ôª - glUniform1i(textureUniformY, 0); - //Ö¸¶¨uÎÆÀíҪʹÓÃÐÂÖµ - glUniform1i(textureUniformU, 1); - //Ö¸¶¨vÎÆÀíҪʹÓÃÐÂÖµ - glUniform1i(textureUniformV, 2); - return 0; -} - -int CPlayWidget::loadRgbTexture() -{ - //¼ÓÔØrgbÊý¾ÝÎÆÀí - //¼¤»îÎÆÀíµ¥ÔªGL_TEXTURE0 - glActiveTexture(GL_TEXTURE0); - //ʹÓÃÀ´×ÔyÊý¾ÝÉú³ÉÎÆÀí - glBindTexture(GL_TEXTURE_2D, id_rgb); - //ʹÓÃÄÚ´æÖÐm_pBufYuv420pÊý¾Ý´´½¨ÕæÕýµÄyÊý¾ÝÎÆÀí - glTexImage2D(GL_TEXTURE_2D, - 0, - GL_RGBA, - m_nVideoW, - m_nVideoH, - 0, - GL_BGRA, - GL_UNSIGNED_BYTE, - m_pBufRgb32); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glUniform1i(textureUniformRGB, 0); - return 0; -} - diff --git a/client/webrtc/webrtc_demo/src/cplaywidget.h b/client/webrtc/webrtc_demo/src/cplaywidget.h deleted file mode 100644 index b2b5715..0000000 --- a/client/webrtc/webrtc_demo/src/cplaywidget.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef GLPLAYWIDGET_H -#define GLPLAYWIDGET_H -#include -#include -#include -#include -#include - - -#include -#define ATTRIB_VERTEX 3 -#define ATTRIB_TEXTURE 4 - - -class CPlayWidget:public QOpenGLWidget,protected QOpenGLFunctions -{ - Q_OBJECT -public slots: - void OnUpdateFrame(); - void OnPaintData(const uint8_t *data,uint32_t len); -public: - typedef enum{ - TYPE_YUV420P, - TYPE_RGB32, - }IMG_TYPE; - CPlayWidget(QWidget* parent); - ~CPlayWidget(); - void PlayOneFrame(); - int SetDataType(IMG_TYPE); - int OnCameraData(uint8_t *dat, uint32_t size) ; - int SetImgSize(uint32_t width,uint32_t ); -protected: - QTimer tm; - void initializeGL() override; - void resizeGL(int w, int h) override; - void paintGL() override; -private: - IMG_TYPE mType; // Ä¿Ç°Ö»Ö§³Öµ½RGB32,YUV420P - GLuint textureUniformY; //yÎÆÀíÊý¾ÝλÖà - GLuint textureUniformU; //uÎÆÀíÊý¾ÝλÖà - GLuint textureUniformV; //vÎÆÀíÊý¾ÝλÖà - GLuint textureUniformRGB; //RGBÎÆÀíλÖà - - - GLuint textureUnifromRGB; //rgb32 µÄÎÆÀíλÖà - - GLuint id_rgb; - GLuint id_y; - GLuint id_u; - GLuint id_v; //vÎÆÀí¶ÔÏóID - - QOpenGLTexture* m_pTextureRGB; //RGB ÎÆÀíÊÇÒ»Õû¿éµÄ - - QOpenGLTexture* m_pTextureY; //yÎÆÀí¶ÔÏó - QOpenGLTexture* m_pTextureU; //uÎÆÀí¶ÔÏó - QOpenGLTexture* m_pTextureV; //vÎÆÀí¶ÔÏó - QOpenGLShader *m_pVSHader; //¶¥µã×ÅÉ«Æ÷³ÌÐò¶ÔÏó - QOpenGLShader *m_pFSHader; //Ƭ¶Î×ÅÉ«Æ÷¶ÔÏó - QOpenGLShaderProgram *m_pShaderProgram; //×ÅÉ«Æ÷³ÌÐòÈÝÆ÷ - int m_nVideoW; //ÊÓƵ·Ö±æÂÊ¿í - int m_nVideoH; //ÊÓƵ·Ö±æÂÊ¸ß - unsigned char *m_pBufYuv420p; - unsigned char* m_pBufRgb32; - - FILE* m_pYuvFile; - - void initShaderYuv(); - void initShaderRgb(); - - int loadYuvTexture(); - int loadRgbTexture(); -}; -#endif diff --git a/client/webrtc/webrtc_demo/src/main.cpp b/client/webrtc/webrtc_demo/src/main.cpp deleted file mode 100644 index b428db0..0000000 --- a/client/webrtc/webrtc_demo/src/main.cpp +++ /dev/null @@ -1,82 +0,0 @@ -#include "mainwindow.h" - -#include - -#include "modules/video_capture/video_capture.h" -#include "video_capturer_test.h" -#include -#include -#include "modules/video_capture/video_capture_factory.h" -#include "rtc_base/logging.h" -#include "video_capture.h" -#include "video_capturer_test.h" - - -# pragma comment(lib, "secur32.lib") -# pragma comment(lib, "winmm.lib") -# pragma comment(lib, "dmoguids.lib") -# pragma comment(lib, "wmcodecdspuuid.lib") -# pragma comment(lib, "msdmo.lib") -# pragma comment(lib, "Strmiids.lib") -# pragma comment(lib, "User32.lib") - -void EnumCapture() -{ - std::unique_ptr info( - webrtc::VideoCaptureFactory::CreateDeviceInfo()); - - int num_devices = info->NumberOfDevices(); - if (!info) { - RTC_LOG(LERROR) << "CreateDeviceInfo failed"; - return; - } - for (int i = 0; i < num_devices; ++i) { - char name[128]; - char id[128]; - - info->GetDeviceName(i,name,128,id,128,nullptr,0); - int cap_len = info->NumberOfCapabilities(id); - for(int j = 0;j < cap_len;j++){ - webrtc::VideoCaptureCapability p; - info->GetCapability(id,j,p); - qDebug()< capturer; - std::unique_ptr info( - webrtc::VideoCaptureFactory::CreateDeviceInfo()); - if (!info) { - RTC_LOG(LERROR) << "CreateDeviceInfo failed"; - return -1; - } - int num_devices = info->NumberOfDevices(); - for (int i = 0; i < num_devices; ++i) { - capturer.reset(VcmCapturerTest::Create(kWidth, kHeight, kFps, i)); - if (capturer) { - break; - } - } - - setbuf(stdout, NULL); - - QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling); - QApplication a(argc, argv); - MainWindow w; - QObject::connect((VcmCapturerTest*)capturer.get(),SIGNAL( UpdateFrame(uint8_t *)),&w, - SLOT( OnUpdateFrame(uint8_t *)),Qt::ConnectionType::QueuedConnection); - - w.show(); - return a.exec(); -} diff --git a/client/webrtc/webrtc_demo/src/mainwindow.cpp b/client/webrtc/webrtc_demo/src/mainwindow.cpp deleted file mode 100644 index f699654..0000000 --- a/client/webrtc/webrtc_demo/src/mainwindow.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "mainwindow.h" -#include "ui_mainwindow.h" - -MainWindow::MainWindow(QWidget *parent) - : QMainWindow(parent) - , ui(new Ui::MainWindow) -{ - ui->setupUi(this); - ui->openGLWidget->SetImgSize(640,480); - ui->openGLWidget->show(); -} - -MainWindow::~MainWindow() -{ - delete ui; -} - -void MainWindow::OnUpdateFrame(uint8_t *p) -{ - qDebug()<<"1234"; - ui->openGLWidget->OnCameraData(p,640*480); -} - diff --git a/client/webrtc/webrtc_demo/src/mainwindow.h b/client/webrtc/webrtc_demo/src/mainwindow.h deleted file mode 100644 index 26020ca..0000000 --- a/client/webrtc/webrtc_demo/src/mainwindow.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include - - -QT_BEGIN_NAMESPACE -namespace Ui { class MainWindow; } -QT_END_NAMESPACE - -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - MainWindow(QWidget *parent = nullptr); - ~MainWindow(); -public slots: - void OnUpdateFrame(uint8_t *p); -private: - Ui::MainWindow *ui; -}; -#endif // MAINWINDOW_H diff --git a/client/webrtc/webrtc_demo/src/mainwindow.ui b/client/webrtc/webrtc_demo/src/mainwindow.ui deleted file mode 100644 index 4b82978..0000000 --- a/client/webrtc/webrtc_demo/src/mainwindow.ui +++ /dev/null @@ -1,70 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 1056 - 616 - - - - MainWindow - - - - - - - - - æ‘„åƒå¤´: - - - - - - - - - - 麦克风: - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - CPlayWidget - QOpenGLWidget -
cplaywidget.h
-
-
- - -
diff --git a/client/webrtc/webrtc_demo/src/video_capture.cpp b/client/webrtc/webrtc_demo/src/video_capture.cpp deleted file mode 100644 index e3eddcc..0000000 --- a/client/webrtc/webrtc_demo/src/video_capture.cpp +++ /dev/null @@ -1,113 +0,0 @@ -#include "video_capture.h" - - -VcmCapturerTest::VcmCapturerTest() : vcm_(nullptr) { - rtc::LogMessage::SetLogToStderr(true); - -} - -VcmCapturerTest::~VcmCapturerTest() { - Destroy(); -} - -bool VcmCapturerTest::Init(size_t width, - size_t height, - size_t target_fps, - size_t capture_device_index) { - std::unique_ptr device_info(webrtc::VideoCaptureFactory::CreateDeviceInfo()); - - char device_name[256]; - char unique_name[256]; - - if (device_info->GetDeviceName(static_cast(capture_device_index), - device_name, sizeof(device_name), unique_name, - sizeof(unique_name)) != 0) { - Destroy(); - return false; - } - - vcm_ = webrtc::VideoCaptureFactory::Create(unique_name); - if (!vcm_) { - return false; - } - vcm_->RegisterCaptureDataCallback(this); - - device_info->GetCapability(vcm_->CurrentDeviceName(), 0, capability_); - capability_.width = static_cast(width); - capability_.height = static_cast(height); - capability_.maxFPS = static_cast(target_fps); - capability_.videoType = webrtc::VideoType::kI420; - - if (vcm_->StartCapture(capability_) != 0) { - Destroy(); - return false; - } - - RTC_CHECK(vcm_->CaptureStarted()); - return true; -} - -VcmCapturerTest* VcmCapturerTest::Create(size_t width, - size_t height, - size_t target_fps, - size_t capture_device_index) { - std::unique_ptr vcm_capturer(new VcmCapturerTest()); - if (!vcm_capturer->Init(width, height, target_fps, capture_device_index)) { - RTC_LOG(LS_WARNING) << "Failed to create VcmCapturer(w = " << width - << ", h = " << height << ", fps = " << target_fps - << ")"; - return nullptr; - } - return vcm_capturer.release(); -} - -void VcmCapturerTest::Destroy() { - if (!vcm_) - return; - - vcm_->StopCapture(); - vcm_->DeRegisterCaptureDataCallback(); - // Release reference to VCM. - vcm_ = nullptr; -} - -void VcmCapturerTest::OnFrame(const webrtc::VideoFrame& frame) { - static auto timestamp = std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()).count(); - static size_t cnt = 0; - - RTC_LOG(LS_INFO) << "OnFrame "<type()<<" typed"; - int nYUVBufsize = 0; - int nVOffset = 0; - int m_height = frame.height(); - int m_width = frame.width(); - - uint8_t* m_uBuffer = new uint8_t[m_height * m_width + m_height * m_width/2]; - for (int i = 0; i < m_height; i++) { - memcpy(m_uBuffer + nYUVBufsize,frame.video_frame_buffer().get()->GetI420()->DataY() + - i * frame.video_frame_buffer().get()->GetI420()->StrideY(), m_width); - - nYUVBufsize += m_width; - } - for (int i = 0; i < m_height / 2; i++) { - memcpy(m_uBuffer + nYUVBufsize, frame.video_frame_buffer().get()->GetI420()->DataU() + - i * frame.video_frame_buffer().get()->GetI420()->StrideU(), m_width / 2); - - nYUVBufsize += m_width / 2; - memcpy(m_uBuffer + m_width * m_height * 5 / 4 + nVOffset, frame.video_frame_buffer().get()->GetI420()->DataV() + - i * frame.video_frame_buffer().get()->GetI420()->StrideV(), m_width / 2); - nVOffset += m_width / 2; - } - emit(this->UpdateFrame(m_uBuffer)); - VideoCapturerTest::OnFrame(frame); - - cnt++; - auto timestamp_curr = std::chrono::duration_cast( - std::chrono::system_clock::now().time_since_epoch()).count(); - if(timestamp_curr - timestamp > 1000) { - RTC_LOG(LS_INFO) << "FPS: " << cnt; - cnt = 0; - timestamp = timestamp_curr; - } -} diff --git a/client/webrtc/webrtc_demo/src/video_capture.h b/client/webrtc/webrtc_demo/src/video_capture.h deleted file mode 100644 index 06ee7a7..0000000 --- a/client/webrtc/webrtc_demo/src/video_capture.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef VIDEO_CAPTURE_H -#define VIDEO_CAPTURE_H - -// vcm_capturer_test.h - - -#include -#include -#include "modules/video_capture/video_capture.h" -#include "video_capturer_test.h" - -class VcmCapturerTest : public QObject, - public VideoCapturerTest, - public rtc::VideoSinkInterface - -{ - Q_OBJECT - -public: - VcmCapturerTest(); - - static VcmCapturerTest* Create(size_t width, - size_t height, - size_t target_fps, - size_t capture_device_index); - - virtual ~VcmCapturerTest(); - - void OnFrame(const webrtc::VideoFrame& frame) override; -signals: - void UpdateFrame(uint8_t *p); - - - private: - - bool Init(size_t width, - size_t height, - size_t target_fps, - size_t capture_device_index); - - void Destroy(); - - rtc::scoped_refptr vcm_; - webrtc::VideoCaptureCapability capability_; -}; - - - -#endif // VIDEO_CAPTURE_H diff --git a/client/webrtc/webrtc_demo/src/video_capturer_test.cpp b/client/webrtc/webrtc_demo/src/video_capturer_test.cpp deleted file mode 100644 index 14fee75..0000000 --- a/client/webrtc/webrtc_demo/src/video_capturer_test.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include "video_capturer_test.h" - - -#include "api/video/i420_buffer.h" -#include "api/video/video_rotation.h" -#include "rtc_base/logging.h" - -VideoCapturerTest::~VideoCapturerTest() = default; - -void VideoCapturerTest::OnFrame(const webrtc::VideoFrame& original_frame) { - int cropped_width = 0; - int cropped_height = 0; - int out_width = 0; - int out_height = 0; - - webrtc::VideoFrame frame = MaybePreprocess(original_frame); - - if (!video_adapter_.AdaptFrameResolution( - frame.width(), frame.height(), frame.timestamp_us() * 1000, - &cropped_width, &cropped_height, &out_width, &out_height)) { - // Drop frame in order to respect frame rate constraint. - return; - } - - if (out_height != frame.height() || out_width != frame.width()) { - // Video adapter has requested a down-scale. Allocate a new buffer and - // return scaled version. - // For simplicity, only scale here without cropping. - rtc::scoped_refptr scaled_buffer = - webrtc::I420Buffer::Create(out_width, out_height); - scaled_buffer->ScaleFrom(*frame.video_frame_buffer()->ToI420()); - webrtc::VideoFrame::Builder new_frame_builder = - webrtc::VideoFrame::Builder() - .set_video_frame_buffer(scaled_buffer) - .set_rotation(webrtc::kVideoRotation_0) - .set_timestamp_us(frame.timestamp_us()) - .set_id(frame.id()); - - - broadcaster_.OnFrame(new_frame_builder.build()); - } else { - // No adaptations needed, just return the frame as is. - broadcaster_.OnFrame(frame); - } -} - -rtc::VideoSinkWants VideoCapturerTest::GetSinkWants() { - return broadcaster_.wants(); -} - -void VideoCapturerTest::AddOrUpdateSink(rtc::VideoSinkInterface* sink, - const rtc::VideoSinkWants& wants) { - broadcaster_.AddOrUpdateSink(sink, wants); - UpdateVideoAdapter(); -} - -void VideoCapturerTest::RemoveSink( - rtc::VideoSinkInterface* sink) { - broadcaster_.RemoveSink(sink); - UpdateVideoAdapter(); -} - -void VideoCapturerTest::UpdateVideoAdapter() { - video_adapter_.OnOutputFormatRequest(std::pair(1,1),this->broadcaster_.wants().max_pixel_count,broadcaster_.wants().max_framerate_fps); -} - -webrtc::VideoFrame VideoCapturerTest::MaybePreprocess( - const webrtc::VideoFrame& frame) { - std::lock_guard lock(mutex_); - if (preprocessor_ != nullptr) { - return preprocessor_->Preprocess(frame); - } else { - return frame; - } -} diff --git a/client/webrtc/webrtc_demo/src/video_capturer_test.h b/client/webrtc/webrtc_demo/src/video_capturer_test.h deleted file mode 100644 index c199b2d..0000000 --- a/client/webrtc/webrtc_demo/src/video_capturer_test.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef VIDEO_CAPTURER_TEST_H -#define VIDEO_CAPTURER_TEST_H - -#include "modules/video_capture/video_capture_factory.h" -#include "rtc_base/logging.h" -#include "modules/video_capture/video_capture_impl.h" -#include "api/video/i420_buffer.h" -#include "api/video/video_rotation.h" -#include "api/video/video_source_interface.h" -#include "rtc_base/logging.h" -#include "media/base/video_broadcaster.h" -#include "media/base/video_adapter.h" -#include -#include - -class VideoCapturerTest : public QObject, - public rtc::VideoSourceInterface{ -Q_OBJECT - - public: - class FramePreprocessor { - public: - virtual ~FramePreprocessor() = default; - virtual webrtc::VideoFrame Preprocess(const webrtc::VideoFrame& frame) = 0; - }; - - public: - ~VideoCapturerTest() override; - - void AddOrUpdateSink(rtc::VideoSinkInterface* sink, - const rtc::VideoSinkWants& wants) override; - - void RemoveSink(rtc::VideoSinkInterface* sink) override; - - void SetFramePreprocessor(std::unique_ptr preprocessor) { - std::lock_guard lock(mutex_); - preprocessor_ = std::move(preprocessor); - } - - protected: - void OnFrame(const webrtc::VideoFrame& frame); - rtc::VideoSinkWants GetSinkWants(); - - private: - void UpdateVideoAdapter(); - webrtc::VideoFrame MaybePreprocess(const webrtc::VideoFrame& frame); - - private: - std::unique_ptr preprocessor_; - std::mutex mutex_; - rtc::VideoBroadcaster broadcaster_; - cricket::VideoAdapter video_adapter_; -}; - - - -#endif // VIDEO_CAPTURER_TEST_H diff --git a/client/webrtc/webrtc_demo/third/include/absl/algorithm/algorithm.h b/client/webrtc/webrtc_demo/third/include/absl/algorithm/algorithm.h deleted file mode 100644 index e9b4733..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/algorithm/algorithm.h +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: algorithm.h -// ----------------------------------------------------------------------------- -// -// This header file contains Google extensions to the standard C++ -// header. - -#ifndef ABSL_ALGORITHM_ALGORITHM_H_ -#define ABSL_ALGORITHM_ALGORITHM_H_ - -#include -#include -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -namespace algorithm_internal { - -// Performs comparisons with operator==, similar to C++14's `std::equal_to<>`. -struct EqualTo { - template - bool operator()(const T& a, const U& b) const { - return a == b; - } -}; - -template -bool EqualImpl(InputIter1 first1, InputIter1 last1, InputIter2 first2, - InputIter2 last2, Pred pred, std::input_iterator_tag, - std::input_iterator_tag) { - while (true) { - if (first1 == last1) return first2 == last2; - if (first2 == last2) return false; - if (!pred(*first1, *first2)) return false; - ++first1; - ++first2; - } -} - -template -bool EqualImpl(InputIter1 first1, InputIter1 last1, InputIter2 first2, - InputIter2 last2, Pred&& pred, std::random_access_iterator_tag, - std::random_access_iterator_tag) { - return (last1 - first1 == last2 - first2) && - std::equal(first1, last1, first2, std::forward(pred)); -} - -// When we are using our own internal predicate that just applies operator==, we -// forward to the non-predicate form of std::equal. This enables an optimization -// in libstdc++ that can result in std::memcmp being used for integer types. -template -bool EqualImpl(InputIter1 first1, InputIter1 last1, InputIter2 first2, - InputIter2 last2, algorithm_internal::EqualTo /* unused */, - std::random_access_iterator_tag, - std::random_access_iterator_tag) { - return (last1 - first1 == last2 - first2) && - std::equal(first1, last1, first2); -} - -template -It RotateImpl(It first, It middle, It last, std::true_type) { - return std::rotate(first, middle, last); -} - -template -It RotateImpl(It first, It middle, It last, std::false_type) { - std::rotate(first, middle, last); - return std::next(first, std::distance(middle, last)); -} - -} // namespace algorithm_internal - -// equal() -// -// Compares the equality of two ranges specified by pairs of iterators, using -// the given predicate, returning true iff for each corresponding iterator i1 -// and i2 in the first and second range respectively, pred(*i1, *i2) == true -// -// This comparison takes at most min(`last1` - `first1`, `last2` - `first2`) -// invocations of the predicate. Additionally, if InputIter1 and InputIter2 are -// both random-access iterators, and `last1` - `first1` != `last2` - `first2`, -// then the predicate is never invoked and the function returns false. -// -// This is a C++11-compatible implementation of C++14 `std::equal`. See -// https://en.cppreference.com/w/cpp/algorithm/equal for more information. -template -bool equal(InputIter1 first1, InputIter1 last1, InputIter2 first2, - InputIter2 last2, Pred&& pred) { - return algorithm_internal::EqualImpl( - first1, last1, first2, last2, std::forward(pred), - typename std::iterator_traits::iterator_category{}, - typename std::iterator_traits::iterator_category{}); -} - -// Overload of equal() that performs comparison of two ranges specified by pairs -// of iterators using operator==. -template -bool equal(InputIter1 first1, InputIter1 last1, InputIter2 first2, - InputIter2 last2) { - return absl::equal(first1, last1, first2, last2, - algorithm_internal::EqualTo{}); -} - -// linear_search() -// -// Performs a linear search for `value` using the iterator `first` up to -// but not including `last`, returning true if [`first`, `last`) contains an -// element equal to `value`. -// -// A linear search is of O(n) complexity which is guaranteed to make at most -// n = (`last` - `first`) comparisons. A linear search over short containers -// may be faster than a binary search, even when the container is sorted. -template -bool linear_search(InputIterator first, InputIterator last, - const EqualityComparable& value) { - return std::find(first, last, value) != last; -} - -// rotate() -// -// Performs a left rotation on a range of elements (`first`, `last`) such that -// `middle` is now the first element. `rotate()` returns an iterator pointing to -// the first element before rotation. This function is exactly the same as -// `std::rotate`, but fixes a bug in gcc -// <= 4.9 where `std::rotate` returns `void` instead of an iterator. -// -// The complexity of this algorithm is the same as that of `std::rotate`, but if -// `ForwardIterator` is not a random-access iterator, then `absl::rotate` -// performs an additional pass over the range to construct the return value. -template -ForwardIterator rotate(ForwardIterator first, ForwardIterator middle, - ForwardIterator last) { - return algorithm_internal::RotateImpl( - first, middle, last, - std::is_same()); -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_ALGORITHM_ALGORITHM_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/algorithm/container.h b/client/webrtc/webrtc_demo/third/include/absl/algorithm/container.h deleted file mode 100644 index 6398438..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/algorithm/container.h +++ /dev/null @@ -1,1764 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: container.h -// ----------------------------------------------------------------------------- -// -// This header file provides Container-based versions of algorithmic functions -// within the C++ standard library. The following standard library sets of -// functions are covered within this file: -// -// * Algorithmic functions -// * Algorithmic functions -// * functions -// -// The standard library functions operate on iterator ranges; the functions -// within this API operate on containers, though many return iterator ranges. -// -// All functions within this API are named with a `c_` prefix. Calls such as -// `absl::c_xx(container, ...) are equivalent to std:: functions such as -// `std::xx(std::begin(cont), std::end(cont), ...)`. Functions that act on -// iterators but not conceptually on iterator ranges (e.g. `std::iter_swap`) -// have no equivalent here. -// -// For template parameter and variable naming, `C` indicates the container type -// to which the function is applied, `Pred` indicates the predicate object type -// to be used by the function and `T` indicates the applicable element type. - -#ifndef ABSL_ALGORITHM_CONTAINER_H_ -#define ABSL_ALGORITHM_CONTAINER_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "absl/algorithm/algorithm.h" -#include "absl/base/macros.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_algorithm_internal { - -// NOTE: it is important to defer to ADL lookup for building with C++ modules, -// especially for headers like which are not visible from this file -// but specialize std::begin and std::end. -using std::begin; -using std::end; - -// The type of the iterator given by begin(c) (possibly std::begin(c)). -// ContainerIter> gives vector::const_iterator, -// while ContainerIter> gives vector::iterator. -template -using ContainerIter = decltype(begin(std::declval())); - -// An MSVC bug involving template parameter substitution requires us to use -// decltype() here instead of just std::pair. -template -using ContainerIterPairType = - decltype(std::make_pair(ContainerIter(), ContainerIter())); - -template -using ContainerDifferenceType = - decltype(std::distance(std::declval>(), - std::declval>())); - -template -using ContainerPointerType = - typename std::iterator_traits>::pointer; - -// container_algorithm_internal::c_begin and -// container_algorithm_internal::c_end are abbreviations for proper ADL -// lookup of std::begin and std::end, i.e. -// using std::begin; -// using std::end; -// std::foo(begin(c), end(c)); -// becomes -// std::foo(container_algorithm_internal::begin(c), -// container_algorithm_internal::end(c)); -// These are meant for internal use only. - -template -ContainerIter c_begin(C& c) { return begin(c); } - -template -ContainerIter c_end(C& c) { return end(c); } - -template -struct IsUnorderedContainer : std::false_type {}; - -template -struct IsUnorderedContainer< - std::unordered_map> : std::true_type {}; - -template -struct IsUnorderedContainer> - : std::true_type {}; - -// container_algorithm_internal::c_size. It is meant for internal use only. - -template -auto c_size(C& c) -> decltype(c.size()) { - return c.size(); -} - -template -constexpr std::size_t c_size(T (&)[N]) { - return N; -} - -} // namespace container_algorithm_internal - -// PUBLIC API - -//------------------------------------------------------------------------------ -// Abseil algorithm.h functions -//------------------------------------------------------------------------------ - -// c_linear_search() -// -// Container-based version of absl::linear_search() for performing a linear -// search within a container. -template -bool c_linear_search(const C& c, EqualityComparable&& value) { - return linear_search(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(value)); -} - -//------------------------------------------------------------------------------ -// algorithms -//------------------------------------------------------------------------------ - -// c_distance() -// -// Container-based version of the `std::distance()` function to -// return the number of elements within a container. -template -container_algorithm_internal::ContainerDifferenceType c_distance( - const C& c) { - return std::distance(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c)); -} - -//------------------------------------------------------------------------------ -// Non-modifying sequence operations -//------------------------------------------------------------------------------ - -// c_all_of() -// -// Container-based version of the `std::all_of()` function to -// test a condition on all elements within a container. -template -bool c_all_of(const C& c, Pred&& pred) { - return std::all_of(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_any_of() -// -// Container-based version of the `std::any_of()` function to -// test if any element in a container fulfills a condition. -template -bool c_any_of(const C& c, Pred&& pred) { - return std::any_of(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_none_of() -// -// Container-based version of the `std::none_of()` function to -// test if no elements in a container fulfill a condition. -template -bool c_none_of(const C& c, Pred&& pred) { - return std::none_of(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_for_each() -// -// Container-based version of the `std::for_each()` function to -// apply a function to a container's elements. -template -decay_t c_for_each(C&& c, Function&& f) { - return std::for_each(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(f)); -} - -// c_find() -// -// Container-based version of the `std::find()` function to find -// the first element containing the passed value within a container value. -template -container_algorithm_internal::ContainerIter c_find(C& c, T&& value) { - return std::find(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(value)); -} - -// c_find_if() -// -// Container-based version of the `std::find_if()` function to find -// the first element in a container matching the given condition. -template -container_algorithm_internal::ContainerIter c_find_if(C& c, Pred&& pred) { - return std::find_if(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_find_if_not() -// -// Container-based version of the `std::find_if_not()` function to -// find the first element in a container not matching the given condition. -template -container_algorithm_internal::ContainerIter c_find_if_not(C& c, - Pred&& pred) { - return std::find_if_not(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_find_end() -// -// Container-based version of the `std::find_end()` function to -// find the last subsequence within a container. -template -container_algorithm_internal::ContainerIter c_find_end( - Sequence1& sequence, Sequence2& subsequence) { - return std::find_end(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - container_algorithm_internal::c_begin(subsequence), - container_algorithm_internal::c_end(subsequence)); -} - -// Overload of c_find_end() for using a predicate evaluation other than `==` as -// the function's test condition. -template -container_algorithm_internal::ContainerIter c_find_end( - Sequence1& sequence, Sequence2& subsequence, BinaryPredicate&& pred) { - return std::find_end(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - container_algorithm_internal::c_begin(subsequence), - container_algorithm_internal::c_end(subsequence), - std::forward(pred)); -} - -// c_find_first_of() -// -// Container-based version of the `std::find_first_of()` function to -// find the first element within the container that is also within the options -// container. -template -container_algorithm_internal::ContainerIter c_find_first_of(C1& container, - C2& options) { - return std::find_first_of(container_algorithm_internal::c_begin(container), - container_algorithm_internal::c_end(container), - container_algorithm_internal::c_begin(options), - container_algorithm_internal::c_end(options)); -} - -// Overload of c_find_first_of() for using a predicate evaluation other than -// `==` as the function's test condition. -template -container_algorithm_internal::ContainerIter c_find_first_of( - C1& container, C2& options, BinaryPredicate&& pred) { - return std::find_first_of(container_algorithm_internal::c_begin(container), - container_algorithm_internal::c_end(container), - container_algorithm_internal::c_begin(options), - container_algorithm_internal::c_end(options), - std::forward(pred)); -} - -// c_adjacent_find() -// -// Container-based version of the `std::adjacent_find()` function to -// find equal adjacent elements within a container. -template -container_algorithm_internal::ContainerIter c_adjacent_find( - Sequence& sequence) { - return std::adjacent_find(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_adjacent_find() for using a predicate evaluation other than -// `==` as the function's test condition. -template -container_algorithm_internal::ContainerIter c_adjacent_find( - Sequence& sequence, BinaryPredicate&& pred) { - return std::adjacent_find(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(pred)); -} - -// c_count() -// -// Container-based version of the `std::count()` function to count -// values that match within a container. -template -container_algorithm_internal::ContainerDifferenceType c_count( - const C& c, T&& value) { - return std::count(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(value)); -} - -// c_count_if() -// -// Container-based version of the `std::count_if()` function to -// count values matching a condition within a container. -template -container_algorithm_internal::ContainerDifferenceType c_count_if( - const C& c, Pred&& pred) { - return std::count_if(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_mismatch() -// -// Container-based version of the `std::mismatch()` function to -// return the first element where two ordered containers differ. Applies `==` to -// the first N elements of `c1` and `c2`, where N = min(size(c1), size(c2)). -template -container_algorithm_internal::ContainerIterPairType -c_mismatch(C1& c1, C2& c2) { - auto first1 = container_algorithm_internal::c_begin(c1); - auto last1 = container_algorithm_internal::c_end(c1); - auto first2 = container_algorithm_internal::c_begin(c2); - auto last2 = container_algorithm_internal::c_end(c2); - - for (; first1 != last1 && first2 != last2; ++first1, (void)++first2) { - // Negates equality because Cpp17EqualityComparable doesn't require clients - // to overload both `operator==` and `operator!=`. - if (!(*first1 == *first2)) { - break; - } - } - - return std::make_pair(first1, first2); -} - -// Overload of c_mismatch() for using a predicate evaluation other than `==` as -// the function's test condition. Applies `pred`to the first N elements of `c1` -// and `c2`, where N = min(size(c1), size(c2)). -template -container_algorithm_internal::ContainerIterPairType -c_mismatch(C1& c1, C2& c2, BinaryPredicate pred) { - auto first1 = container_algorithm_internal::c_begin(c1); - auto last1 = container_algorithm_internal::c_end(c1); - auto first2 = container_algorithm_internal::c_begin(c2); - auto last2 = container_algorithm_internal::c_end(c2); - - for (; first1 != last1 && first2 != last2; ++first1, (void)++first2) { - if (!pred(*first1, *first2)) { - break; - } - } - - return std::make_pair(first1, first2); -} - -// c_equal() -// -// Container-based version of the `std::equal()` function to -// test whether two containers are equal. -// -// NOTE: the semantics of c_equal() are slightly different than those of -// equal(): while the latter iterates over the second container only up to the -// size of the first container, c_equal() also checks whether the container -// sizes are equal. This better matches expectations about c_equal() based on -// its signature. -// -// Example: -// vector v1 = <1, 2, 3>; -// vector v2 = <1, 2, 3, 4>; -// equal(std::begin(v1), std::end(v1), std::begin(v2)) returns true -// c_equal(v1, v2) returns false - -template -bool c_equal(const C1& c1, const C2& c2) { - return ((container_algorithm_internal::c_size(c1) == - container_algorithm_internal::c_size(c2)) && - std::equal(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2))); -} - -// Overload of c_equal() for using a predicate evaluation other than `==` as -// the function's test condition. -template -bool c_equal(const C1& c1, const C2& c2, BinaryPredicate&& pred) { - return ((container_algorithm_internal::c_size(c1) == - container_algorithm_internal::c_size(c2)) && - std::equal(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - std::forward(pred))); -} - -// c_is_permutation() -// -// Container-based version of the `std::is_permutation()` function -// to test whether a container is a permutation of another. -template -bool c_is_permutation(const C1& c1, const C2& c2) { - using std::begin; - using std::end; - return c1.size() == c2.size() && - std::is_permutation(begin(c1), end(c1), begin(c2)); -} - -// Overload of c_is_permutation() for using a predicate evaluation other than -// `==` as the function's test condition. -template -bool c_is_permutation(const C1& c1, const C2& c2, BinaryPredicate&& pred) { - using std::begin; - using std::end; - return c1.size() == c2.size() && - std::is_permutation(begin(c1), end(c1), begin(c2), - std::forward(pred)); -} - -// c_search() -// -// Container-based version of the `std::search()` function to search -// a container for a subsequence. -template -container_algorithm_internal::ContainerIter c_search( - Sequence1& sequence, Sequence2& subsequence) { - return std::search(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - container_algorithm_internal::c_begin(subsequence), - container_algorithm_internal::c_end(subsequence)); -} - -// Overload of c_search() for using a predicate evaluation other than -// `==` as the function's test condition. -template -container_algorithm_internal::ContainerIter c_search( - Sequence1& sequence, Sequence2& subsequence, BinaryPredicate&& pred) { - return std::search(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - container_algorithm_internal::c_begin(subsequence), - container_algorithm_internal::c_end(subsequence), - std::forward(pred)); -} - -// c_search_n() -// -// Container-based version of the `std::search_n()` function to -// search a container for the first sequence of N elements. -template -container_algorithm_internal::ContainerIter c_search_n( - Sequence& sequence, Size count, T&& value) { - return std::search_n(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), count, - std::forward(value)); -} - -// Overload of c_search_n() for using a predicate evaluation other than -// `==` as the function's test condition. -template -container_algorithm_internal::ContainerIter c_search_n( - Sequence& sequence, Size count, T&& value, BinaryPredicate&& pred) { - return std::search_n(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), count, - std::forward(value), - std::forward(pred)); -} - -//------------------------------------------------------------------------------ -// Modifying sequence operations -//------------------------------------------------------------------------------ - -// c_copy() -// -// Container-based version of the `std::copy()` function to copy a -// container's elements into an iterator. -template -OutputIterator c_copy(const InputSequence& input, OutputIterator output) { - return std::copy(container_algorithm_internal::c_begin(input), - container_algorithm_internal::c_end(input), output); -} - -// c_copy_n() -// -// Container-based version of the `std::copy_n()` function to copy a -// container's first N elements into an iterator. -template -OutputIterator c_copy_n(const C& input, Size n, OutputIterator output) { - return std::copy_n(container_algorithm_internal::c_begin(input), n, output); -} - -// c_copy_if() -// -// Container-based version of the `std::copy_if()` function to copy -// a container's elements satisfying some condition into an iterator. -template -OutputIterator c_copy_if(const InputSequence& input, OutputIterator output, - Pred&& pred) { - return std::copy_if(container_algorithm_internal::c_begin(input), - container_algorithm_internal::c_end(input), output, - std::forward(pred)); -} - -// c_copy_backward() -// -// Container-based version of the `std::copy_backward()` function to -// copy a container's elements in reverse order into an iterator. -template -BidirectionalIterator c_copy_backward(const C& src, - BidirectionalIterator dest) { - return std::copy_backward(container_algorithm_internal::c_begin(src), - container_algorithm_internal::c_end(src), dest); -} - -// c_move() -// -// Container-based version of the `std::move()` function to move -// a container's elements into an iterator. -template -OutputIterator c_move(C&& src, OutputIterator dest) { - return std::move(container_algorithm_internal::c_begin(src), - container_algorithm_internal::c_end(src), dest); -} - -// c_move_backward() -// -// Container-based version of the `std::move_backward()` function to -// move a container's elements into an iterator in reverse order. -template -BidirectionalIterator c_move_backward(C&& src, BidirectionalIterator dest) { - return std::move_backward(container_algorithm_internal::c_begin(src), - container_algorithm_internal::c_end(src), dest); -} - -// c_swap_ranges() -// -// Container-based version of the `std::swap_ranges()` function to -// swap a container's elements with another container's elements. Swaps the -// first N elements of `c1` and `c2`, where N = min(size(c1), size(c2)). -template -container_algorithm_internal::ContainerIter c_swap_ranges(C1& c1, C2& c2) { - auto first1 = container_algorithm_internal::c_begin(c1); - auto last1 = container_algorithm_internal::c_end(c1); - auto first2 = container_algorithm_internal::c_begin(c2); - auto last2 = container_algorithm_internal::c_end(c2); - - using std::swap; - for (; first1 != last1 && first2 != last2; ++first1, (void)++first2) { - swap(*first1, *first2); - } - return first2; -} - -// c_transform() -// -// Container-based version of the `std::transform()` function to -// transform a container's elements using the unary operation, storing the -// result in an iterator pointing to the last transformed element in the output -// range. -template -OutputIterator c_transform(const InputSequence& input, OutputIterator output, - UnaryOp&& unary_op) { - return std::transform(container_algorithm_internal::c_begin(input), - container_algorithm_internal::c_end(input), output, - std::forward(unary_op)); -} - -// Overload of c_transform() for performing a transformation using a binary -// predicate. Applies `binary_op` to the first N elements of `c1` and `c2`, -// where N = min(size(c1), size(c2)). -template -OutputIterator c_transform(const InputSequence1& input1, - const InputSequence2& input2, OutputIterator output, - BinaryOp&& binary_op) { - auto first1 = container_algorithm_internal::c_begin(input1); - auto last1 = container_algorithm_internal::c_end(input1); - auto first2 = container_algorithm_internal::c_begin(input2); - auto last2 = container_algorithm_internal::c_end(input2); - for (; first1 != last1 && first2 != last2; - ++first1, (void)++first2, ++output) { - *output = binary_op(*first1, *first2); - } - - return output; -} - -// c_replace() -// -// Container-based version of the `std::replace()` function to -// replace a container's elements of some value with a new value. The container -// is modified in place. -template -void c_replace(Sequence& sequence, const T& old_value, const T& new_value) { - std::replace(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), old_value, - new_value); -} - -// c_replace_if() -// -// Container-based version of the `std::replace_if()` function to -// replace a container's elements of some value with a new value based on some -// condition. The container is modified in place. -template -void c_replace_if(C& c, Pred&& pred, T&& new_value) { - std::replace_if(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred), std::forward(new_value)); -} - -// c_replace_copy() -// -// Container-based version of the `std::replace_copy()` function to -// replace a container's elements of some value with a new value and return the -// results within an iterator. -template -OutputIterator c_replace_copy(const C& c, OutputIterator result, T&& old_value, - T&& new_value) { - return std::replace_copy(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), result, - std::forward(old_value), - std::forward(new_value)); -} - -// c_replace_copy_if() -// -// Container-based version of the `std::replace_copy_if()` function -// to replace a container's elements of some value with a new value based on -// some condition, and return the results within an iterator. -template -OutputIterator c_replace_copy_if(const C& c, OutputIterator result, Pred&& pred, - T&& new_value) { - return std::replace_copy_if(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), result, - std::forward(pred), - std::forward(new_value)); -} - -// c_fill() -// -// Container-based version of the `std::fill()` function to fill a -// container with some value. -template -void c_fill(C& c, T&& value) { - std::fill(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), std::forward(value)); -} - -// c_fill_n() -// -// Container-based version of the `std::fill_n()` function to fill -// the first N elements in a container with some value. -template -void c_fill_n(C& c, Size n, T&& value) { - std::fill_n(container_algorithm_internal::c_begin(c), n, - std::forward(value)); -} - -// c_generate() -// -// Container-based version of the `std::generate()` function to -// assign a container's elements to the values provided by the given generator. -template -void c_generate(C& c, Generator&& gen) { - std::generate(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(gen)); -} - -// c_generate_n() -// -// Container-based version of the `std::generate_n()` function to -// assign a container's first N elements to the values provided by the given -// generator. -template -container_algorithm_internal::ContainerIter c_generate_n(C& c, Size n, - Generator&& gen) { - return std::generate_n(container_algorithm_internal::c_begin(c), n, - std::forward(gen)); -} - -// Note: `c_xx()` container versions for `remove()`, `remove_if()`, -// and `unique()` are omitted, because it's not clear whether or not such -// functions should call erase on their supplied sequences afterwards. Either -// behavior would be surprising for a different set of users. - -// c_remove_copy() -// -// Container-based version of the `std::remove_copy()` function to -// copy a container's elements while removing any elements matching the given -// `value`. -template -OutputIterator c_remove_copy(const C& c, OutputIterator result, T&& value) { - return std::remove_copy(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), result, - std::forward(value)); -} - -// c_remove_copy_if() -// -// Container-based version of the `std::remove_copy_if()` function -// to copy a container's elements while removing any elements matching the given -// condition. -template -OutputIterator c_remove_copy_if(const C& c, OutputIterator result, - Pred&& pred) { - return std::remove_copy_if(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), result, - std::forward(pred)); -} - -// c_unique_copy() -// -// Container-based version of the `std::unique_copy()` function to -// copy a container's elements while removing any elements containing duplicate -// values. -template -OutputIterator c_unique_copy(const C& c, OutputIterator result) { - return std::unique_copy(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), result); -} - -// Overload of c_unique_copy() for using a predicate evaluation other than -// `==` for comparing uniqueness of the element values. -template -OutputIterator c_unique_copy(const C& c, OutputIterator result, - BinaryPredicate&& pred) { - return std::unique_copy(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), result, - std::forward(pred)); -} - -// c_reverse() -// -// Container-based version of the `std::reverse()` function to -// reverse a container's elements. -template -void c_reverse(Sequence& sequence) { - std::reverse(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// c_reverse_copy() -// -// Container-based version of the `std::reverse()` function to -// reverse a container's elements and write them to an iterator range. -template -OutputIterator c_reverse_copy(const C& sequence, OutputIterator result) { - return std::reverse_copy(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - result); -} - -// c_rotate() -// -// Container-based version of the `std::rotate()` function to -// shift a container's elements leftward such that the `middle` element becomes -// the first element in the container. -template > -Iterator c_rotate(C& sequence, Iterator middle) { - return absl::rotate(container_algorithm_internal::c_begin(sequence), middle, - container_algorithm_internal::c_end(sequence)); -} - -// c_rotate_copy() -// -// Container-based version of the `std::rotate_copy()` function to -// shift a container's elements leftward such that the `middle` element becomes -// the first element in a new iterator range. -template -OutputIterator c_rotate_copy( - const C& sequence, - container_algorithm_internal::ContainerIter middle, - OutputIterator result) { - return std::rotate_copy(container_algorithm_internal::c_begin(sequence), - middle, container_algorithm_internal::c_end(sequence), - result); -} - -// c_shuffle() -// -// Container-based version of the `std::shuffle()` function to -// randomly shuffle elements within the container using a `gen()` uniform random -// number generator. -template -void c_shuffle(RandomAccessContainer& c, UniformRandomBitGenerator&& gen) { - std::shuffle(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(gen)); -} - -//------------------------------------------------------------------------------ -// Partition functions -//------------------------------------------------------------------------------ - -// c_is_partitioned() -// -// Container-based version of the `std::is_partitioned()` function -// to test whether all elements in the container for which `pred` returns `true` -// precede those for which `pred` is `false`. -template -bool c_is_partitioned(const C& c, Pred&& pred) { - return std::is_partitioned(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_partition() -// -// Container-based version of the `std::partition()` function -// to rearrange all elements in a container in such a way that all elements for -// which `pred` returns `true` precede all those for which it returns `false`, -// returning an iterator to the first element of the second group. -template -container_algorithm_internal::ContainerIter c_partition(C& c, Pred&& pred) { - return std::partition(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_stable_partition() -// -// Container-based version of the `std::stable_partition()` function -// to rearrange all elements in a container in such a way that all elements for -// which `pred` returns `true` precede all those for which it returns `false`, -// preserving the relative ordering between the two groups. The function returns -// an iterator to the first element of the second group. -template -container_algorithm_internal::ContainerIter c_stable_partition(C& c, - Pred&& pred) { - return std::stable_partition(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -// c_partition_copy() -// -// Container-based version of the `std::partition_copy()` function -// to partition a container's elements and return them into two iterators: one -// for which `pred` returns `true`, and one for which `pred` returns `false.` - -template -std::pair c_partition_copy( - const C& c, OutputIterator1 out_true, OutputIterator2 out_false, - Pred&& pred) { - return std::partition_copy(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), out_true, - out_false, std::forward(pred)); -} - -// c_partition_point() -// -// Container-based version of the `std::partition_point()` function -// to return the first element of an already partitioned container for which -// the given `pred` is not `true`. -template -container_algorithm_internal::ContainerIter c_partition_point(C& c, - Pred&& pred) { - return std::partition_point(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(pred)); -} - -//------------------------------------------------------------------------------ -// Sorting functions -//------------------------------------------------------------------------------ - -// c_sort() -// -// Container-based version of the `std::sort()` function -// to sort elements in ascending order of their values. -template -void c_sort(C& c) { - std::sort(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c)); -} - -// Overload of c_sort() for performing a `comp` comparison other than the -// default `operator<`. -template -void c_sort(C& c, Compare&& comp) { - std::sort(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(comp)); -} - -// c_stable_sort() -// -// Container-based version of the `std::stable_sort()` function -// to sort elements in ascending order of their values, preserving the order -// of equivalents. -template -void c_stable_sort(C& c) { - std::stable_sort(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c)); -} - -// Overload of c_stable_sort() for performing a `comp` comparison other than the -// default `operator<`. -template -void c_stable_sort(C& c, Compare&& comp) { - std::stable_sort(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(comp)); -} - -// c_is_sorted() -// -// Container-based version of the `std::is_sorted()` function -// to evaluate whether the given container is sorted in ascending order. -template -bool c_is_sorted(const C& c) { - return std::is_sorted(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c)); -} - -// c_is_sorted() overload for performing a `comp` comparison other than the -// default `operator<`. -template -bool c_is_sorted(const C& c, Compare&& comp) { - return std::is_sorted(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(comp)); -} - -// c_partial_sort() -// -// Container-based version of the `std::partial_sort()` function -// to rearrange elements within a container such that elements before `middle` -// are sorted in ascending order. -template -void c_partial_sort( - RandomAccessContainer& sequence, - container_algorithm_internal::ContainerIter middle) { - std::partial_sort(container_algorithm_internal::c_begin(sequence), middle, - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_partial_sort() for performing a `comp` comparison other than -// the default `operator<`. -template -void c_partial_sort( - RandomAccessContainer& sequence, - container_algorithm_internal::ContainerIter middle, - Compare&& comp) { - std::partial_sort(container_algorithm_internal::c_begin(sequence), middle, - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -// c_partial_sort_copy() -// -// Container-based version of the `std::partial_sort_copy()` -// function to sort the elements in the given range `result` within the larger -// `sequence` in ascending order (and using `result` as the output parameter). -// At most min(result.last - result.first, sequence.last - sequence.first) -// elements from the sequence will be stored in the result. -template -container_algorithm_internal::ContainerIter -c_partial_sort_copy(const C& sequence, RandomAccessContainer& result) { - return std::partial_sort_copy(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - container_algorithm_internal::c_begin(result), - container_algorithm_internal::c_end(result)); -} - -// Overload of c_partial_sort_copy() for performing a `comp` comparison other -// than the default `operator<`. -template -container_algorithm_internal::ContainerIter -c_partial_sort_copy(const C& sequence, RandomAccessContainer& result, - Compare&& comp) { - return std::partial_sort_copy(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - container_algorithm_internal::c_begin(result), - container_algorithm_internal::c_end(result), - std::forward(comp)); -} - -// c_is_sorted_until() -// -// Container-based version of the `std::is_sorted_until()` function -// to return the first element within a container that is not sorted in -// ascending order as an iterator. -template -container_algorithm_internal::ContainerIter c_is_sorted_until(C& c) { - return std::is_sorted_until(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c)); -} - -// Overload of c_is_sorted_until() for performing a `comp` comparison other than -// the default `operator<`. -template -container_algorithm_internal::ContainerIter c_is_sorted_until( - C& c, Compare&& comp) { - return std::is_sorted_until(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(comp)); -} - -// c_nth_element() -// -// Container-based version of the `std::nth_element()` function -// to rearrange the elements within a container such that the `nth` element -// would be in that position in an ordered sequence; other elements may be in -// any order, except that all preceding `nth` will be less than that element, -// and all following `nth` will be greater than that element. -template -void c_nth_element( - RandomAccessContainer& sequence, - container_algorithm_internal::ContainerIter nth) { - std::nth_element(container_algorithm_internal::c_begin(sequence), nth, - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_nth_element() for performing a `comp` comparison other than -// the default `operator<`. -template -void c_nth_element( - RandomAccessContainer& sequence, - container_algorithm_internal::ContainerIter nth, - Compare&& comp) { - std::nth_element(container_algorithm_internal::c_begin(sequence), nth, - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -//------------------------------------------------------------------------------ -// Binary Search -//------------------------------------------------------------------------------ - -// c_lower_bound() -// -// Container-based version of the `std::lower_bound()` function -// to return an iterator pointing to the first element in a sorted container -// which does not compare less than `value`. -template -container_algorithm_internal::ContainerIter c_lower_bound( - Sequence& sequence, T&& value) { - return std::lower_bound(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value)); -} - -// Overload of c_lower_bound() for performing a `comp` comparison other than -// the default `operator<`. -template -container_algorithm_internal::ContainerIter c_lower_bound( - Sequence& sequence, T&& value, Compare&& comp) { - return std::lower_bound(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value), std::forward(comp)); -} - -// c_upper_bound() -// -// Container-based version of the `std::upper_bound()` function -// to return an iterator pointing to the first element in a sorted container -// which is greater than `value`. -template -container_algorithm_internal::ContainerIter c_upper_bound( - Sequence& sequence, T&& value) { - return std::upper_bound(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value)); -} - -// Overload of c_upper_bound() for performing a `comp` comparison other than -// the default `operator<`. -template -container_algorithm_internal::ContainerIter c_upper_bound( - Sequence& sequence, T&& value, Compare&& comp) { - return std::upper_bound(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value), std::forward(comp)); -} - -// c_equal_range() -// -// Container-based version of the `std::equal_range()` function -// to return an iterator pair pointing to the first and last elements in a -// sorted container which compare equal to `value`. -template -container_algorithm_internal::ContainerIterPairType -c_equal_range(Sequence& sequence, T&& value) { - return std::equal_range(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value)); -} - -// Overload of c_equal_range() for performing a `comp` comparison other than -// the default `operator<`. -template -container_algorithm_internal::ContainerIterPairType -c_equal_range(Sequence& sequence, T&& value, Compare&& comp) { - return std::equal_range(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value), std::forward(comp)); -} - -// c_binary_search() -// -// Container-based version of the `std::binary_search()` function -// to test if any element in the sorted container contains a value equivalent to -// 'value'. -template -bool c_binary_search(Sequence&& sequence, T&& value) { - return std::binary_search(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value)); -} - -// Overload of c_binary_search() for performing a `comp` comparison other than -// the default `operator<`. -template -bool c_binary_search(Sequence&& sequence, T&& value, Compare&& comp) { - return std::binary_search(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value), - std::forward(comp)); -} - -//------------------------------------------------------------------------------ -// Merge functions -//------------------------------------------------------------------------------ - -// c_merge() -// -// Container-based version of the `std::merge()` function -// to merge two sorted containers into a single sorted iterator. -template -OutputIterator c_merge(const C1& c1, const C2& c2, OutputIterator result) { - return std::merge(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), result); -} - -// Overload of c_merge() for performing a `comp` comparison other than -// the default `operator<`. -template -OutputIterator c_merge(const C1& c1, const C2& c2, OutputIterator result, - Compare&& comp) { - return std::merge(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), result, - std::forward(comp)); -} - -// c_inplace_merge() -// -// Container-based version of the `std::inplace_merge()` function -// to merge a supplied iterator `middle` into a container. -template -void c_inplace_merge(C& c, - container_algorithm_internal::ContainerIter middle) { - std::inplace_merge(container_algorithm_internal::c_begin(c), middle, - container_algorithm_internal::c_end(c)); -} - -// Overload of c_inplace_merge() for performing a merge using a `comp` other -// than `operator<`. -template -void c_inplace_merge(C& c, - container_algorithm_internal::ContainerIter middle, - Compare&& comp) { - std::inplace_merge(container_algorithm_internal::c_begin(c), middle, - container_algorithm_internal::c_end(c), - std::forward(comp)); -} - -// c_includes() -// -// Container-based version of the `std::includes()` function -// to test whether a sorted container `c1` entirely contains another sorted -// container `c2`. -template -bool c_includes(const C1& c1, const C2& c2) { - return std::includes(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2)); -} - -// Overload of c_includes() for performing a merge using a `comp` other than -// `operator<`. -template -bool c_includes(const C1& c1, const C2& c2, Compare&& comp) { - return std::includes(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), - std::forward(comp)); -} - -// c_set_union() -// -// Container-based version of the `std::set_union()` function -// to return an iterator containing the union of two containers; duplicate -// values are not copied into the output. -template ::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer::value, - void>::type> -OutputIterator c_set_union(const C1& c1, const C2& c2, OutputIterator output) { - return std::set_union(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), output); -} - -// Overload of c_set_union() for performing a merge using a `comp` other than -// `operator<`. -template ::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer::value, - void>::type> -OutputIterator c_set_union(const C1& c1, const C2& c2, OutputIterator output, - Compare&& comp) { - return std::set_union(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), output, - std::forward(comp)); -} - -// c_set_intersection() -// -// Container-based version of the `std::set_intersection()` function -// to return an iterator containing the intersection of two containers. -template ::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer::value, - void>::type> -OutputIterator c_set_intersection(const C1& c1, const C2& c2, - OutputIterator output) { - return std::set_intersection(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), output); -} - -// Overload of c_set_intersection() for performing a merge using a `comp` other -// than `operator<`. -template ::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer::value, - void>::type> -OutputIterator c_set_intersection(const C1& c1, const C2& c2, - OutputIterator output, Compare&& comp) { - return std::set_intersection(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), output, - std::forward(comp)); -} - -// c_set_difference() -// -// Container-based version of the `std::set_difference()` function -// to return an iterator containing elements present in the first container but -// not in the second. -template ::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer::value, - void>::type> -OutputIterator c_set_difference(const C1& c1, const C2& c2, - OutputIterator output) { - return std::set_difference(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), output); -} - -// Overload of c_set_difference() for performing a merge using a `comp` other -// than `operator<`. -template ::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer::value, - void>::type> -OutputIterator c_set_difference(const C1& c1, const C2& c2, - OutputIterator output, Compare&& comp) { - return std::set_difference(container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), output, - std::forward(comp)); -} - -// c_set_symmetric_difference() -// -// Container-based version of the `std::set_symmetric_difference()` -// function to return an iterator containing elements present in either one -// container or the other, but not both. -template ::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer::value, - void>::type> -OutputIterator c_set_symmetric_difference(const C1& c1, const C2& c2, - OutputIterator output) { - return std::set_symmetric_difference( - container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), output); -} - -// Overload of c_set_symmetric_difference() for performing a merge using a -// `comp` other than `operator<`. -template ::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer::value, - void>::type> -OutputIterator c_set_symmetric_difference(const C1& c1, const C2& c2, - OutputIterator output, - Compare&& comp) { - return std::set_symmetric_difference( - container_algorithm_internal::c_begin(c1), - container_algorithm_internal::c_end(c1), - container_algorithm_internal::c_begin(c2), - container_algorithm_internal::c_end(c2), output, - std::forward(comp)); -} - -//------------------------------------------------------------------------------ -// Heap functions -//------------------------------------------------------------------------------ - -// c_push_heap() -// -// Container-based version of the `std::push_heap()` function -// to push a value onto a container heap. -template -void c_push_heap(RandomAccessContainer& sequence) { - std::push_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_push_heap() for performing a push operation on a heap using a -// `comp` other than `operator<`. -template -void c_push_heap(RandomAccessContainer& sequence, Compare&& comp) { - std::push_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -// c_pop_heap() -// -// Container-based version of the `std::pop_heap()` function -// to pop a value from a heap container. -template -void c_pop_heap(RandomAccessContainer& sequence) { - std::pop_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_pop_heap() for performing a pop operation on a heap using a -// `comp` other than `operator<`. -template -void c_pop_heap(RandomAccessContainer& sequence, Compare&& comp) { - std::pop_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -// c_make_heap() -// -// Container-based version of the `std::make_heap()` function -// to make a container a heap. -template -void c_make_heap(RandomAccessContainer& sequence) { - std::make_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_make_heap() for performing heap comparisons using a -// `comp` other than `operator<` -template -void c_make_heap(RandomAccessContainer& sequence, Compare&& comp) { - std::make_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -// c_sort_heap() -// -// Container-based version of the `std::sort_heap()` function -// to sort a heap into ascending order (after which it is no longer a heap). -template -void c_sort_heap(RandomAccessContainer& sequence) { - std::sort_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_sort_heap() for performing heap comparisons using a -// `comp` other than `operator<` -template -void c_sort_heap(RandomAccessContainer& sequence, Compare&& comp) { - std::sort_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -// c_is_heap() -// -// Container-based version of the `std::is_heap()` function -// to check whether the given container is a heap. -template -bool c_is_heap(const RandomAccessContainer& sequence) { - return std::is_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_is_heap() for performing heap comparisons using a -// `comp` other than `operator<` -template -bool c_is_heap(const RandomAccessContainer& sequence, Compare&& comp) { - return std::is_heap(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -// c_is_heap_until() -// -// Container-based version of the `std::is_heap_until()` function -// to find the first element in a given container which is not in heap order. -template -container_algorithm_internal::ContainerIter -c_is_heap_until(RandomAccessContainer& sequence) { - return std::is_heap_until(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_is_heap_until() for performing heap comparisons using a -// `comp` other than `operator<` -template -container_algorithm_internal::ContainerIter -c_is_heap_until(RandomAccessContainer& sequence, Compare&& comp) { - return std::is_heap_until(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -//------------------------------------------------------------------------------ -// Min/max -//------------------------------------------------------------------------------ - -// c_min_element() -// -// Container-based version of the `std::min_element()` function -// to return an iterator pointing to the element with the smallest value, using -// `operator<` to make the comparisons. -template -container_algorithm_internal::ContainerIter c_min_element( - Sequence& sequence) { - return std::min_element(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_min_element() for performing a `comp` comparison other than -// `operator<`. -template -container_algorithm_internal::ContainerIter c_min_element( - Sequence& sequence, Compare&& comp) { - return std::min_element(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -// c_max_element() -// -// Container-based version of the `std::max_element()` function -// to return an iterator pointing to the element with the largest value, using -// `operator<` to make the comparisons. -template -container_algorithm_internal::ContainerIter c_max_element( - Sequence& sequence) { - return std::max_element(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence)); -} - -// Overload of c_max_element() for performing a `comp` comparison other than -// `operator<`. -template -container_algorithm_internal::ContainerIter c_max_element( - Sequence& sequence, Compare&& comp) { - return std::max_element(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(comp)); -} - -// c_minmax_element() -// -// Container-based version of the `std::minmax_element()` function -// to return a pair of iterators pointing to the elements containing the -// smallest and largest values, respectively, using `operator<` to make the -// comparisons. -template -container_algorithm_internal::ContainerIterPairType -c_minmax_element(C& c) { - return std::minmax_element(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c)); -} - -// Overload of c_minmax_element() for performing `comp` comparisons other than -// `operator<`. -template -container_algorithm_internal::ContainerIterPairType -c_minmax_element(C& c, Compare&& comp) { - return std::minmax_element(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(comp)); -} - -//------------------------------------------------------------------------------ -// Lexicographical Comparisons -//------------------------------------------------------------------------------ - -// c_lexicographical_compare() -// -// Container-based version of the `std::lexicographical_compare()` -// function to lexicographically compare (e.g. sort words alphabetically) two -// container sequences. The comparison is performed using `operator<`. Note -// that capital letters ("A-Z") have ASCII values less than lowercase letters -// ("a-z"). -template -bool c_lexicographical_compare(Sequence1&& sequence1, Sequence2&& sequence2) { - return std::lexicographical_compare( - container_algorithm_internal::c_begin(sequence1), - container_algorithm_internal::c_end(sequence1), - container_algorithm_internal::c_begin(sequence2), - container_algorithm_internal::c_end(sequence2)); -} - -// Overload of c_lexicographical_compare() for performing a lexicographical -// comparison using a `comp` operator instead of `operator<`. -template -bool c_lexicographical_compare(Sequence1&& sequence1, Sequence2&& sequence2, - Compare&& comp) { - return std::lexicographical_compare( - container_algorithm_internal::c_begin(sequence1), - container_algorithm_internal::c_end(sequence1), - container_algorithm_internal::c_begin(sequence2), - container_algorithm_internal::c_end(sequence2), - std::forward(comp)); -} - -// c_next_permutation() -// -// Container-based version of the `std::next_permutation()` function -// to rearrange a container's elements into the next lexicographically greater -// permutation. -template -bool c_next_permutation(C& c) { - return std::next_permutation(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c)); -} - -// Overload of c_next_permutation() for performing a lexicographical -// comparison using a `comp` operator instead of `operator<`. -template -bool c_next_permutation(C& c, Compare&& comp) { - return std::next_permutation(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(comp)); -} - -// c_prev_permutation() -// -// Container-based version of the `std::prev_permutation()` function -// to rearrange a container's elements into the next lexicographically lesser -// permutation. -template -bool c_prev_permutation(C& c) { - return std::prev_permutation(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c)); -} - -// Overload of c_prev_permutation() for performing a lexicographical -// comparison using a `comp` operator instead of `operator<`. -template -bool c_prev_permutation(C& c, Compare&& comp) { - return std::prev_permutation(container_algorithm_internal::c_begin(c), - container_algorithm_internal::c_end(c), - std::forward(comp)); -} - -//------------------------------------------------------------------------------ -// algorithms -//------------------------------------------------------------------------------ - -// c_iota() -// -// Container-based version of the `std::iota()` function -// to compute successive values of `value`, as if incremented with `++value` -// after each element is written. and write them to the container. -template -void c_iota(Sequence& sequence, T&& value) { - std::iota(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(value)); -} -// c_accumulate() -// -// Container-based version of the `std::accumulate()` function -// to accumulate the element values of a container to `init` and return that -// accumulation by value. -// -// Note: Due to a language technicality this function has return type -// absl::decay_t. As a user of this function you can casually read -// this as "returns T by value" and assume it does the right thing. -template -decay_t c_accumulate(const Sequence& sequence, T&& init) { - return std::accumulate(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(init)); -} - -// Overload of c_accumulate() for using a binary operations other than -// addition for computing the accumulation. -template -decay_t c_accumulate(const Sequence& sequence, T&& init, - BinaryOp&& binary_op) { - return std::accumulate(container_algorithm_internal::c_begin(sequence), - container_algorithm_internal::c_end(sequence), - std::forward(init), - std::forward(binary_op)); -} - -// c_inner_product() -// -// Container-based version of the `std::inner_product()` function -// to compute the cumulative inner product of container element pairs. -// -// Note: Due to a language technicality this function has return type -// absl::decay_t. As a user of this function you can casually read -// this as "returns T by value" and assume it does the right thing. -template -decay_t c_inner_product(const Sequence1& factors1, const Sequence2& factors2, - T&& sum) { - return std::inner_product(container_algorithm_internal::c_begin(factors1), - container_algorithm_internal::c_end(factors1), - container_algorithm_internal::c_begin(factors2), - std::forward(sum)); -} - -// Overload of c_inner_product() for using binary operations other than -// `operator+` (for computing the accumulation) and `operator*` (for computing -// the product between the two container's element pair). -template -decay_t c_inner_product(const Sequence1& factors1, const Sequence2& factors2, - T&& sum, BinaryOp1&& op1, BinaryOp2&& op2) { - return std::inner_product(container_algorithm_internal::c_begin(factors1), - container_algorithm_internal::c_end(factors1), - container_algorithm_internal::c_begin(factors2), - std::forward(sum), std::forward(op1), - std::forward(op2)); -} - -// c_adjacent_difference() -// -// Container-based version of the `std::adjacent_difference()` -// function to compute the difference between each element and the one preceding -// it and write it to an iterator. -template -OutputIt c_adjacent_difference(const InputSequence& input, - OutputIt output_first) { - return std::adjacent_difference(container_algorithm_internal::c_begin(input), - container_algorithm_internal::c_end(input), - output_first); -} - -// Overload of c_adjacent_difference() for using a binary operation other than -// subtraction to compute the adjacent difference. -template -OutputIt c_adjacent_difference(const InputSequence& input, - OutputIt output_first, BinaryOp&& op) { - return std::adjacent_difference(container_algorithm_internal::c_begin(input), - container_algorithm_internal::c_end(input), - output_first, std::forward(op)); -} - -// c_partial_sum() -// -// Container-based version of the `std::partial_sum()` function -// to compute the partial sum of the elements in a sequence and write them -// to an iterator. The partial sum is the sum of all element values so far in -// the sequence. -template -OutputIt c_partial_sum(const InputSequence& input, OutputIt output_first) { - return std::partial_sum(container_algorithm_internal::c_begin(input), - container_algorithm_internal::c_end(input), - output_first); -} - -// Overload of c_partial_sum() for using a binary operation other than addition -// to compute the "partial sum". -template -OutputIt c_partial_sum(const InputSequence& input, OutputIt output_first, - BinaryOp&& op) { - return std::partial_sum(container_algorithm_internal::c_begin(input), - container_algorithm_internal::c_end(input), - output_first, std::forward(op)); -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_ALGORITHM_CONTAINER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/attributes.h b/client/webrtc/webrtc_demo/third/include/absl/base/attributes.h deleted file mode 100644 index cf2cb55..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/attributes.h +++ /dev/null @@ -1,702 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This header file defines macros for declaring attributes for functions, -// types, and variables. -// -// These macros are used within Abseil and allow the compiler to optimize, where -// applicable, certain function calls. -// -// Most macros here are exposing GCC or Clang features, and are stubbed out for -// other compilers. -// -// GCC attributes documentation: -// https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html -// https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Variable-Attributes.html -// https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Type-Attributes.html -// -// Most attributes in this file are already supported by GCC 4.7. However, some -// of them are not supported in older version of Clang. Thus, we check -// `__has_attribute()` first. If the check fails, we check if we are on GCC and -// assume the attribute exists on GCC (which is verified on GCC 4.7). - -#ifndef ABSL_BASE_ATTRIBUTES_H_ -#define ABSL_BASE_ATTRIBUTES_H_ - -#include "absl/base/config.h" - -// ABSL_HAVE_ATTRIBUTE -// -// A function-like feature checking macro that is a wrapper around -// `__has_attribute`, which is defined by GCC 5+ and Clang and evaluates to a -// nonzero constant integer if the attribute is supported or 0 if not. -// -// It evaluates to zero if `__has_attribute` is not defined by the compiler. -// -// GCC: https://gcc.gnu.org/gcc-5/changes.html -// Clang: https://clang.llvm.org/docs/LanguageExtensions.html -#ifdef __has_attribute -#define ABSL_HAVE_ATTRIBUTE(x) __has_attribute(x) -#else -#define ABSL_HAVE_ATTRIBUTE(x) 0 -#endif - -// ABSL_HAVE_CPP_ATTRIBUTE -// -// A function-like feature checking macro that accepts C++11 style attributes. -// It's a wrapper around `__has_cpp_attribute`, defined by ISO C++ SD-6 -// (https://en.cppreference.com/w/cpp/experimental/feature_test). If we don't -// find `__has_cpp_attribute`, will evaluate to 0. -#if defined(__cplusplus) && defined(__has_cpp_attribute) -// NOTE: requiring __cplusplus above should not be necessary, but -// works around https://bugs.llvm.org/show_bug.cgi?id=23435. -#define ABSL_HAVE_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) -#else -#define ABSL_HAVE_CPP_ATTRIBUTE(x) 0 -#endif - -// ----------------------------------------------------------------------------- -// Function Attributes -// ----------------------------------------------------------------------------- -// -// GCC: https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html -// Clang: https://clang.llvm.org/docs/AttributeReference.html - -// ABSL_PRINTF_ATTRIBUTE -// ABSL_SCANF_ATTRIBUTE -// -// Tells the compiler to perform `printf` format string checking if the -// compiler supports it; see the 'format' attribute in -// . -// -// Note: As the GCC manual states, "[s]ince non-static C++ methods -// have an implicit 'this' argument, the arguments of such methods -// should be counted from two, not one." -#if ABSL_HAVE_ATTRIBUTE(format) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_PRINTF_ATTRIBUTE(string_index, first_to_check) \ - __attribute__((__format__(__printf__, string_index, first_to_check))) -#define ABSL_SCANF_ATTRIBUTE(string_index, first_to_check) \ - __attribute__((__format__(__scanf__, string_index, first_to_check))) -#else -#define ABSL_PRINTF_ATTRIBUTE(string_index, first_to_check) -#define ABSL_SCANF_ATTRIBUTE(string_index, first_to_check) -#endif - -// ABSL_ATTRIBUTE_ALWAYS_INLINE -// ABSL_ATTRIBUTE_NOINLINE -// -// Forces functions to either inline or not inline. Introduced in gcc 3.1. -#if ABSL_HAVE_ATTRIBUTE(always_inline) || \ - (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline)) -#define ABSL_HAVE_ATTRIBUTE_ALWAYS_INLINE 1 -#else -#define ABSL_ATTRIBUTE_ALWAYS_INLINE -#endif - -#if ABSL_HAVE_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_NOINLINE __attribute__((noinline)) -#define ABSL_HAVE_ATTRIBUTE_NOINLINE 1 -#else -#define ABSL_ATTRIBUTE_NOINLINE -#endif - -// ABSL_ATTRIBUTE_NO_TAIL_CALL -// -// Prevents the compiler from optimizing away stack frames for functions which -// end in a call to another function. -#if ABSL_HAVE_ATTRIBUTE(disable_tail_calls) -#define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 1 -#define ABSL_ATTRIBUTE_NO_TAIL_CALL __attribute__((disable_tail_calls)) -#elif defined(__GNUC__) && !defined(__clang__) && !defined(__e2k__) -#define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 1 -#define ABSL_ATTRIBUTE_NO_TAIL_CALL \ - __attribute__((optimize("no-optimize-sibling-calls"))) -#else -#define ABSL_ATTRIBUTE_NO_TAIL_CALL -#define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 0 -#endif - -// ABSL_ATTRIBUTE_WEAK -// -// Tags a function as weak for the purposes of compilation and linking. -// Weak attributes currently do not work properly in LLVM's Windows backend, -// so disable them there. See https://bugs.llvm.org/show_bug.cgi?id=37598 -// for further information. -// The MinGW compiler doesn't complain about the weak attribute until the link -// step, presumably because Windows doesn't use ELF binaries. -#if (ABSL_HAVE_ATTRIBUTE(weak) || \ - (defined(__GNUC__) && !defined(__clang__))) && \ - !(defined(__llvm__) && defined(_WIN32)) && !defined(__MINGW32__) -#undef ABSL_ATTRIBUTE_WEAK -#define ABSL_ATTRIBUTE_WEAK __attribute__((weak)) -#define ABSL_HAVE_ATTRIBUTE_WEAK 1 -#else -#define ABSL_ATTRIBUTE_WEAK -#define ABSL_HAVE_ATTRIBUTE_WEAK 0 -#endif - -// ABSL_ATTRIBUTE_NONNULL -// -// Tells the compiler either (a) that a particular function parameter -// should be a non-null pointer, or (b) that all pointer arguments should -// be non-null. -// -// Note: As the GCC manual states, "[s]ince non-static C++ methods -// have an implicit 'this' argument, the arguments of such methods -// should be counted from two, not one." -// -// Args are indexed starting at 1. -// -// For non-static class member functions, the implicit `this` argument -// is arg 1, and the first explicit argument is arg 2. For static class member -// functions, there is no implicit `this`, and the first explicit argument is -// arg 1. -// -// Example: -// -// /* arg_a cannot be null, but arg_b can */ -// void Function(void* arg_a, void* arg_b) ABSL_ATTRIBUTE_NONNULL(1); -// -// class C { -// /* arg_a cannot be null, but arg_b can */ -// void Method(void* arg_a, void* arg_b) ABSL_ATTRIBUTE_NONNULL(2); -// -// /* arg_a cannot be null, but arg_b can */ -// static void StaticMethod(void* arg_a, void* arg_b) -// ABSL_ATTRIBUTE_NONNULL(1); -// }; -// -// If no arguments are provided, then all pointer arguments should be non-null. -// -// /* No pointer arguments may be null. */ -// void Function(void* arg_a, void* arg_b, int arg_c) ABSL_ATTRIBUTE_NONNULL(); -// -// NOTE: The GCC nonnull attribute actually accepts a list of arguments, but -// ABSL_ATTRIBUTE_NONNULL does not. -#if ABSL_HAVE_ATTRIBUTE(nonnull) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_NONNULL(arg_index) __attribute__((nonnull(arg_index))) -#else -#define ABSL_ATTRIBUTE_NONNULL(...) -#endif - -// ABSL_ATTRIBUTE_NORETURN -// -// Tells the compiler that a given function never returns. -#if ABSL_HAVE_ATTRIBUTE(noreturn) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_NORETURN __attribute__((noreturn)) -#elif defined(_MSC_VER) -#define ABSL_ATTRIBUTE_NORETURN __declspec(noreturn) -#else -#define ABSL_ATTRIBUTE_NORETURN -#endif - -// ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS -// -// Tells the AddressSanitizer (or other memory testing tools) to ignore a given -// function. Useful for cases when a function reads random locations on stack, -// calls _exit from a cloned subprocess, deliberately accesses buffer -// out of bounds or does other scary things with memory. -// NOTE: GCC supports AddressSanitizer(asan) since 4.8. -// https://gcc.gnu.org/gcc-4.8/changes.html -#if ABSL_HAVE_ATTRIBUTE(no_sanitize_address) -#define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) -#else -#define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS -#endif - -// ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY -// -// Tells the MemorySanitizer to relax the handling of a given function. All "Use -// of uninitialized value" warnings from such functions will be suppressed, and -// all values loaded from memory will be considered fully initialized. This -// attribute is similar to the ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS attribute -// above, but deals with initialized-ness rather than addressability issues. -// NOTE: MemorySanitizer(msan) is supported by Clang but not GCC. -#if ABSL_HAVE_ATTRIBUTE(no_sanitize_memory) -#define ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory)) -#else -#define ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY -#endif - -// ABSL_ATTRIBUTE_NO_SANITIZE_THREAD -// -// Tells the ThreadSanitizer to not instrument a given function. -// NOTE: GCC supports ThreadSanitizer(tsan) since 4.8. -// https://gcc.gnu.org/gcc-4.8/changes.html -#if ABSL_HAVE_ATTRIBUTE(no_sanitize_thread) -#define ABSL_ATTRIBUTE_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) -#else -#define ABSL_ATTRIBUTE_NO_SANITIZE_THREAD -#endif - -// ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED -// -// Tells the UndefinedSanitizer to ignore a given function. Useful for cases -// where certain behavior (eg. division by zero) is being used intentionally. -// NOTE: GCC supports UndefinedBehaviorSanitizer(ubsan) since 4.9. -// https://gcc.gnu.org/gcc-4.9/changes.html -#if ABSL_HAVE_ATTRIBUTE(no_sanitize_undefined) -#define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED \ - __attribute__((no_sanitize_undefined)) -#elif ABSL_HAVE_ATTRIBUTE(no_sanitize) -#define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED \ - __attribute__((no_sanitize("undefined"))) -#else -#define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED -#endif - -// ABSL_ATTRIBUTE_NO_SANITIZE_CFI -// -// Tells the ControlFlowIntegrity sanitizer to not instrument a given function. -// See https://clang.llvm.org/docs/ControlFlowIntegrity.html for details. -#if ABSL_HAVE_ATTRIBUTE(no_sanitize) -#define ABSL_ATTRIBUTE_NO_SANITIZE_CFI __attribute__((no_sanitize("cfi"))) -#else -#define ABSL_ATTRIBUTE_NO_SANITIZE_CFI -#endif - -// ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK -// -// Tells the SafeStack to not instrument a given function. -// See https://clang.llvm.org/docs/SafeStack.html for details. -#if ABSL_HAVE_ATTRIBUTE(no_sanitize) -#define ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK \ - __attribute__((no_sanitize("safe-stack"))) -#else -#define ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK -#endif - -// ABSL_ATTRIBUTE_RETURNS_NONNULL -// -// Tells the compiler that a particular function never returns a null pointer. -#if ABSL_HAVE_ATTRIBUTE(returns_nonnull) || \ - (defined(__GNUC__) && \ - (__GNUC__ > 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) && \ - !defined(__clang__)) -#define ABSL_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull)) -#else -#define ABSL_ATTRIBUTE_RETURNS_NONNULL -#endif - -// ABSL_HAVE_ATTRIBUTE_SECTION -// -// Indicates whether labeled sections are supported. Weak symbol support is -// a prerequisite. Labeled sections are not supported on Darwin/iOS. -#ifdef ABSL_HAVE_ATTRIBUTE_SECTION -#error ABSL_HAVE_ATTRIBUTE_SECTION cannot be directly set -#elif (ABSL_HAVE_ATTRIBUTE(section) || \ - (defined(__GNUC__) && !defined(__clang__))) && \ - !defined(__APPLE__) && ABSL_HAVE_ATTRIBUTE_WEAK -#define ABSL_HAVE_ATTRIBUTE_SECTION 1 - -// ABSL_ATTRIBUTE_SECTION -// -// Tells the compiler/linker to put a given function into a section and define -// `__start_ ## name` and `__stop_ ## name` symbols to bracket the section. -// This functionality is supported by GNU linker. Any function annotated with -// `ABSL_ATTRIBUTE_SECTION` must not be inlined, or it will be placed into -// whatever section its caller is placed into. -// -#ifndef ABSL_ATTRIBUTE_SECTION -#define ABSL_ATTRIBUTE_SECTION(name) \ - __attribute__((section(#name))) __attribute__((noinline)) -#endif - - -// ABSL_ATTRIBUTE_SECTION_VARIABLE -// -// Tells the compiler/linker to put a given variable into a section and define -// `__start_ ## name` and `__stop_ ## name` symbols to bracket the section. -// This functionality is supported by GNU linker. -#ifndef ABSL_ATTRIBUTE_SECTION_VARIABLE -#define ABSL_ATTRIBUTE_SECTION_VARIABLE(name) __attribute__((section(#name))) -#endif - -// ABSL_DECLARE_ATTRIBUTE_SECTION_VARS -// -// A weak section declaration to be used as a global declaration -// for ABSL_ATTRIBUTE_SECTION_START|STOP(name) to compile and link -// even without functions with ABSL_ATTRIBUTE_SECTION(name). -// ABSL_DEFINE_ATTRIBUTE_SECTION should be in the exactly one file; it's -// a no-op on ELF but not on Mach-O. -// -#ifndef ABSL_DECLARE_ATTRIBUTE_SECTION_VARS -#define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) \ - extern char __start_##name[] ABSL_ATTRIBUTE_WEAK; \ - extern char __stop_##name[] ABSL_ATTRIBUTE_WEAK -#endif -#ifndef ABSL_DEFINE_ATTRIBUTE_SECTION_VARS -#define ABSL_INIT_ATTRIBUTE_SECTION_VARS(name) -#define ABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name) -#endif - -// ABSL_ATTRIBUTE_SECTION_START -// -// Returns `void*` pointers to start/end of a section of code with -// functions having ABSL_ATTRIBUTE_SECTION(name). -// Returns 0 if no such functions exist. -// One must ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) for this to compile and -// link. -// -#define ABSL_ATTRIBUTE_SECTION_START(name) \ - (reinterpret_cast(__start_##name)) -#define ABSL_ATTRIBUTE_SECTION_STOP(name) \ - (reinterpret_cast(__stop_##name)) - -#else // !ABSL_HAVE_ATTRIBUTE_SECTION - -#define ABSL_HAVE_ATTRIBUTE_SECTION 0 - -// provide dummy definitions -#define ABSL_ATTRIBUTE_SECTION(name) -#define ABSL_ATTRIBUTE_SECTION_VARIABLE(name) -#define ABSL_INIT_ATTRIBUTE_SECTION_VARS(name) -#define ABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name) -#define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) -#define ABSL_ATTRIBUTE_SECTION_START(name) (reinterpret_cast(0)) -#define ABSL_ATTRIBUTE_SECTION_STOP(name) (reinterpret_cast(0)) - -#endif // ABSL_ATTRIBUTE_SECTION - -// ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC -// -// Support for aligning the stack on 32-bit x86. -#if ABSL_HAVE_ATTRIBUTE(force_align_arg_pointer) || \ - (defined(__GNUC__) && !defined(__clang__)) -#if defined(__i386__) -#define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC \ - __attribute__((force_align_arg_pointer)) -#define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0) -#elif defined(__x86_64__) -#define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (1) -#define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC -#else // !__i386__ && !__x86_64 -#define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0) -#define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC -#endif // __i386__ -#else -#define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC -#define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0) -#endif - -// ABSL_MUST_USE_RESULT -// -// Tells the compiler to warn about unused results. -// -// When annotating a function, it must appear as the first part of the -// declaration or definition. The compiler will warn if the return value from -// such a function is unused: -// -// ABSL_MUST_USE_RESULT Sprocket* AllocateSprocket(); -// AllocateSprocket(); // Triggers a warning. -// -// When annotating a class, it is equivalent to annotating every function which -// returns an instance. -// -// class ABSL_MUST_USE_RESULT Sprocket {}; -// Sprocket(); // Triggers a warning. -// -// Sprocket MakeSprocket(); -// MakeSprocket(); // Triggers a warning. -// -// Note that references and pointers are not instances: -// -// Sprocket* SprocketPointer(); -// SprocketPointer(); // Does *not* trigger a warning. -// -// ABSL_MUST_USE_RESULT allows using cast-to-void to suppress the unused result -// warning. For that, warn_unused_result is used only for clang but not for gcc. -// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425 -// -// Note: past advice was to place the macro after the argument list. -#if ABSL_HAVE_ATTRIBUTE(nodiscard) -#define ABSL_MUST_USE_RESULT [[nodiscard]] -#elif defined(__clang__) && ABSL_HAVE_ATTRIBUTE(warn_unused_result) -#define ABSL_MUST_USE_RESULT __attribute__((warn_unused_result)) -#else -#define ABSL_MUST_USE_RESULT -#endif - -// ABSL_ATTRIBUTE_HOT, ABSL_ATTRIBUTE_COLD -// -// Tells GCC that a function is hot or cold. GCC can use this information to -// improve static analysis, i.e. a conditional branch to a cold function -// is likely to be not-taken. -// This annotation is used for function declarations. -// -// Example: -// -// int foo() ABSL_ATTRIBUTE_HOT; -#if ABSL_HAVE_ATTRIBUTE(hot) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_HOT __attribute__((hot)) -#else -#define ABSL_ATTRIBUTE_HOT -#endif - -#if ABSL_HAVE_ATTRIBUTE(cold) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_COLD __attribute__((cold)) -#else -#define ABSL_ATTRIBUTE_COLD -#endif - -// ABSL_XRAY_ALWAYS_INSTRUMENT, ABSL_XRAY_NEVER_INSTRUMENT, ABSL_XRAY_LOG_ARGS -// -// We define the ABSL_XRAY_ALWAYS_INSTRUMENT and ABSL_XRAY_NEVER_INSTRUMENT -// macro used as an attribute to mark functions that must always or never be -// instrumented by XRay. Currently, this is only supported in Clang/LLVM. -// -// For reference on the LLVM XRay instrumentation, see -// http://llvm.org/docs/XRay.html. -// -// A function with the XRAY_ALWAYS_INSTRUMENT macro attribute in its declaration -// will always get the XRay instrumentation sleds. These sleds may introduce -// some binary size and runtime overhead and must be used sparingly. -// -// These attributes only take effect when the following conditions are met: -// -// * The file/target is built in at least C++11 mode, with a Clang compiler -// that supports XRay attributes. -// * The file/target is built with the -fxray-instrument flag set for the -// Clang/LLVM compiler. -// * The function is defined in the translation unit (the compiler honors the -// attribute in either the definition or the declaration, and must match). -// -// There are cases when, even when building with XRay instrumentation, users -// might want to control specifically which functions are instrumented for a -// particular build using special-case lists provided to the compiler. These -// special case lists are provided to Clang via the -// -fxray-always-instrument=... and -fxray-never-instrument=... flags. The -// attributes in source take precedence over these special-case lists. -// -// To disable the XRay attributes at build-time, users may define -// ABSL_NO_XRAY_ATTRIBUTES. Do NOT define ABSL_NO_XRAY_ATTRIBUTES on specific -// packages/targets, as this may lead to conflicting definitions of functions at -// link-time. -// -// XRay isn't currently supported on Android: -// https://github.com/android/ndk/issues/368 -#if ABSL_HAVE_CPP_ATTRIBUTE(clang::xray_always_instrument) && \ - !defined(ABSL_NO_XRAY_ATTRIBUTES) && !defined(__ANDROID__) -#define ABSL_XRAY_ALWAYS_INSTRUMENT [[clang::xray_always_instrument]] -#define ABSL_XRAY_NEVER_INSTRUMENT [[clang::xray_never_instrument]] -#if ABSL_HAVE_CPP_ATTRIBUTE(clang::xray_log_args) -#define ABSL_XRAY_LOG_ARGS(N) \ - [[clang::xray_always_instrument, clang::xray_log_args(N)]] -#else -#define ABSL_XRAY_LOG_ARGS(N) [[clang::xray_always_instrument]] -#endif -#else -#define ABSL_XRAY_ALWAYS_INSTRUMENT -#define ABSL_XRAY_NEVER_INSTRUMENT -#define ABSL_XRAY_LOG_ARGS(N) -#endif - -// ABSL_ATTRIBUTE_REINITIALIZES -// -// Indicates that a member function reinitializes the entire object to a known -// state, independent of the previous state of the object. -// -// The clang-tidy check bugprone-use-after-move allows member functions marked -// with this attribute to be called on objects that have been moved from; -// without the attribute, this would result in a use-after-move warning. -#if ABSL_HAVE_CPP_ATTRIBUTE(clang::reinitializes) -#define ABSL_ATTRIBUTE_REINITIALIZES [[clang::reinitializes]] -#else -#define ABSL_ATTRIBUTE_REINITIALIZES -#endif - -// ----------------------------------------------------------------------------- -// Variable Attributes -// ----------------------------------------------------------------------------- - -// ABSL_ATTRIBUTE_UNUSED -// -// Prevents the compiler from complaining about variables that appear unused. -#if ABSL_HAVE_ATTRIBUTE(unused) || (defined(__GNUC__) && !defined(__clang__)) -#undef ABSL_ATTRIBUTE_UNUSED -#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__)) -#else -#define ABSL_ATTRIBUTE_UNUSED -#endif - -// ABSL_ATTRIBUTE_INITIAL_EXEC -// -// Tells the compiler to use "initial-exec" mode for a thread-local variable. -// See http://people.redhat.com/drepper/tls.pdf for the gory details. -#if ABSL_HAVE_ATTRIBUTE(tls_model) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_INITIAL_EXEC __attribute__((tls_model("initial-exec"))) -#else -#define ABSL_ATTRIBUTE_INITIAL_EXEC -#endif - -// ABSL_ATTRIBUTE_PACKED -// -// Instructs the compiler not to use natural alignment for a tagged data -// structure, but instead to reduce its alignment to 1. This attribute can -// either be applied to members of a structure or to a structure in its -// entirety. Applying this attribute (judiciously) to a structure in its -// entirety to optimize the memory footprint of very commonly-used structs is -// fine. Do not apply this attribute to a structure in its entirety if the -// purpose is to control the offsets of the members in the structure. Instead, -// apply this attribute only to structure members that need it. -// -// When applying ABSL_ATTRIBUTE_PACKED only to specific structure members the -// natural alignment of structure members not annotated is preserved. Aligned -// member accesses are faster than non-aligned member accesses even if the -// targeted microprocessor supports non-aligned accesses. -#if ABSL_HAVE_ATTRIBUTE(packed) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_PACKED __attribute__((__packed__)) -#else -#define ABSL_ATTRIBUTE_PACKED -#endif - -// ABSL_ATTRIBUTE_FUNC_ALIGN -// -// Tells the compiler to align the function start at least to certain -// alignment boundary -#if ABSL_HAVE_ATTRIBUTE(aligned) || (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes) __attribute__((aligned(bytes))) -#else -#define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes) -#endif - -// ABSL_FALLTHROUGH_INTENDED -// -// Annotates implicit fall-through between switch labels, allowing a case to -// indicate intentional fallthrough and turn off warnings about any lack of a -// `break` statement. The ABSL_FALLTHROUGH_INTENDED macro should be followed by -// a semicolon and can be used in most places where `break` can, provided that -// no statements exist between it and the next switch label. -// -// Example: -// -// switch (x) { -// case 40: -// case 41: -// if (truth_is_out_there) { -// ++x; -// ABSL_FALLTHROUGH_INTENDED; // Use instead of/along with annotations -// // in comments -// } else { -// return x; -// } -// case 42: -// ... -// -// Notes: when compiled with clang in C++11 mode, the ABSL_FALLTHROUGH_INTENDED -// macro is expanded to the [[clang::fallthrough]] attribute, which is analysed -// when performing switch labels fall-through diagnostic -// (`-Wimplicit-fallthrough`). See clang documentation on language extensions -// for details: -// https://clang.llvm.org/docs/AttributeReference.html#fallthrough-clang-fallthrough -// -// When used with unsupported compilers, the ABSL_FALLTHROUGH_INTENDED macro -// has no effect on diagnostics. In any case this macro has no effect on runtime -// behavior and performance of code. - -#ifdef ABSL_FALLTHROUGH_INTENDED -#error "ABSL_FALLTHROUGH_INTENDED should not be defined." -#endif - -// TODO(zhangxy): Use c++17 standard [[fallthrough]] macro, when supported. -#if defined(__clang__) && defined(__has_warning) -#if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough") -#define ABSL_FALLTHROUGH_INTENDED [[clang::fallthrough]] -#endif -#elif defined(__GNUC__) && __GNUC__ >= 7 -#define ABSL_FALLTHROUGH_INTENDED [[gnu::fallthrough]] -#endif - -#ifndef ABSL_FALLTHROUGH_INTENDED -#define ABSL_FALLTHROUGH_INTENDED \ - do { \ - } while (0) -#endif - -// ABSL_DEPRECATED() -// -// Marks a deprecated class, struct, enum, function, method and variable -// declarations. The macro argument is used as a custom diagnostic message (e.g. -// suggestion of a better alternative). -// -// Examples: -// -// class ABSL_DEPRECATED("Use Bar instead") Foo {...}; -// -// ABSL_DEPRECATED("Use Baz() instead") void Bar() {...} -// -// template -// ABSL_DEPRECATED("Use DoThat() instead") -// void DoThis(); -// -// Every usage of a deprecated entity will trigger a warning when compiled with -// clang's `-Wdeprecated-declarations` option. This option is turned off by -// default, but the warnings will be reported by clang-tidy. -#if defined(__clang__) && defined(__cplusplus) && __cplusplus >= 201103L -#define ABSL_DEPRECATED(message) __attribute__((deprecated(message))) -#endif - -#ifndef ABSL_DEPRECATED -#define ABSL_DEPRECATED(message) -#endif - -// ABSL_CONST_INIT -// -// A variable declaration annotated with the `ABSL_CONST_INIT` attribute will -// not compile (on supported platforms) unless the variable has a constant -// initializer. This is useful for variables with static and thread storage -// duration, because it guarantees that they will not suffer from the so-called -// "static init order fiasco". Prefer to put this attribute on the most visible -// declaration of the variable, if there's more than one, because code that -// accesses the variable can then use the attribute for optimization. -// -// Example: -// -// class MyClass { -// public: -// ABSL_CONST_INIT static MyType my_var; -// }; -// -// MyType MyClass::my_var = MakeMyType(...); -// -// Note that this attribute is redundant if the variable is declared constexpr. -#if ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization) -#define ABSL_CONST_INIT [[clang::require_constant_initialization]] -#else -#define ABSL_CONST_INIT -#endif // ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization) - -// ABSL_ATTRIBUTE_PURE_FUNCTION -// -// ABSL_ATTRIBUTE_PURE_FUNCTION is used to annotate declarations of "pure" -// functions. A function is pure if its return value is only a function of its -// arguments. The pure attribute prohibits a function from modifying the state -// of the program that is observable by means other than inspecting the -// function's return value. Declaring such functions with the pure attribute -// allows the compiler to avoid emitting some calls in repeated invocations of -// the function with the same argument values. -// -// Example: -// -// ABSL_ATTRIBUTE_PURE_FUNCTION int64_t ToInt64Milliseconds(Duration d); -#if ABSL_HAVE_CPP_ATTRIBUTE(gnu::pure) -#define ABSL_ATTRIBUTE_PURE_FUNCTION [[gnu::pure]] -#elif ABSL_HAVE_ATTRIBUTE(pure) -#define ABSL_ATTRIBUTE_PURE_FUNCTION __attribute__((pure)) -#else -#define ABSL_ATTRIBUTE_PURE_FUNCTION -#endif - -#endif // ABSL_BASE_ATTRIBUTES_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/call_once.h b/client/webrtc/webrtc_demo/third/include/absl/base/call_once.h deleted file mode 100644 index 96109f5..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/call_once.h +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: call_once.h -// ----------------------------------------------------------------------------- -// -// This header file provides an Abseil version of `std::call_once` for invoking -// a given function at most once, across all threads. This Abseil version is -// faster than the C++11 version and incorporates the C++17 argument-passing -// fix, so that (for example) non-const references may be passed to the invoked -// function. - -#ifndef ABSL_BASE_CALL_ONCE_H_ -#define ABSL_BASE_CALL_ONCE_H_ - -#include -#include -#include -#include -#include - -#include "absl/base/internal/invoke.h" -#include "absl/base/internal/low_level_scheduling.h" -#include "absl/base/internal/raw_logging.h" -#include "absl/base/internal/scheduling_mode.h" -#include "absl/base/internal/spinlock_wait.h" -#include "absl/base/macros.h" -#include "absl/base/optimization.h" -#include "absl/base/port.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -class once_flag; - -namespace base_internal { -std::atomic* ControlWord(absl::once_flag* flag); -} // namespace base_internal - -// call_once() -// -// For all invocations using a given `once_flag`, invokes a given `fn` exactly -// once across all threads. The first call to `call_once()` with a particular -// `once_flag` argument (that does not throw an exception) will run the -// specified function with the provided `args`; other calls with the same -// `once_flag` argument will not run the function, but will wait -// for the provided function to finish running (if it is still running). -// -// This mechanism provides a safe, simple, and fast mechanism for one-time -// initialization in a multi-threaded process. -// -// Example: -// -// class MyInitClass { -// public: -// ... -// mutable absl::once_flag once_; -// -// MyInitClass* init() const { -// absl::call_once(once_, &MyInitClass::Init, this); -// return ptr_; -// } -// -template -void call_once(absl::once_flag& flag, Callable&& fn, Args&&... args); - -// once_flag -// -// Objects of this type are used to distinguish calls to `call_once()` and -// ensure the provided function is only invoked once across all threads. This -// type is not copyable or movable. However, it has a `constexpr` -// constructor, and is safe to use as a namespace-scoped global variable. -class once_flag { - public: - constexpr once_flag() : control_(0) {} - once_flag(const once_flag&) = delete; - once_flag& operator=(const once_flag&) = delete; - - private: - friend std::atomic* base_internal::ControlWord(once_flag* flag); - std::atomic control_; -}; - -//------------------------------------------------------------------------------ -// End of public interfaces. -// Implementation details follow. -//------------------------------------------------------------------------------ - -namespace base_internal { - -// Like call_once, but uses KERNEL_ONLY scheduling. Intended to be used to -// initialize entities used by the scheduler implementation. -template -void LowLevelCallOnce(absl::once_flag* flag, Callable&& fn, Args&&... args); - -// Disables scheduling while on stack when scheduling mode is non-cooperative. -// No effect for cooperative scheduling modes. -class SchedulingHelper { - public: - explicit SchedulingHelper(base_internal::SchedulingMode mode) : mode_(mode) { - if (mode_ == base_internal::SCHEDULE_KERNEL_ONLY) { - guard_result_ = base_internal::SchedulingGuard::DisableRescheduling(); - } - } - - ~SchedulingHelper() { - if (mode_ == base_internal::SCHEDULE_KERNEL_ONLY) { - base_internal::SchedulingGuard::EnableRescheduling(guard_result_); - } - } - - private: - base_internal::SchedulingMode mode_; - bool guard_result_; -}; - -// Bit patterns for call_once state machine values. Internal implementation -// detail, not for use by clients. -// -// The bit patterns are arbitrarily chosen from unlikely values, to aid in -// debugging. However, kOnceInit must be 0, so that a zero-initialized -// once_flag will be valid for immediate use. -enum { - kOnceInit = 0, - kOnceRunning = 0x65C2937B, - kOnceWaiter = 0x05A308D2, - // A very small constant is chosen for kOnceDone so that it fit in a single - // compare with immediate instruction for most common ISAs. This is verified - // for x86, POWER and ARM. - kOnceDone = 221, // Random Number -}; - -template -ABSL_ATTRIBUTE_NOINLINE -void CallOnceImpl(std::atomic* control, - base_internal::SchedulingMode scheduling_mode, Callable&& fn, - Args&&... args) { -#ifndef NDEBUG - { - uint32_t old_control = control->load(std::memory_order_relaxed); - if (old_control != kOnceInit && - old_control != kOnceRunning && - old_control != kOnceWaiter && - old_control != kOnceDone) { - ABSL_RAW_LOG(FATAL, "Unexpected value for control word: 0x%lx", - static_cast(old_control)); // NOLINT - } - } -#endif // NDEBUG - static const base_internal::SpinLockWaitTransition trans[] = { - {kOnceInit, kOnceRunning, true}, - {kOnceRunning, kOnceWaiter, false}, - {kOnceDone, kOnceDone, true}}; - - // Must do this before potentially modifying control word's state. - base_internal::SchedulingHelper maybe_disable_scheduling(scheduling_mode); - // Short circuit the simplest case to avoid procedure call overhead. - // The base_internal::SpinLockWait() call returns either kOnceInit or - // kOnceDone. If it returns kOnceDone, it must have loaded the control word - // with std::memory_order_acquire and seen a value of kOnceDone. - uint32_t old_control = kOnceInit; - if (control->compare_exchange_strong(old_control, kOnceRunning, - std::memory_order_relaxed) || - base_internal::SpinLockWait(control, ABSL_ARRAYSIZE(trans), trans, - scheduling_mode) == kOnceInit) { - base_internal::invoke(std::forward(fn), - std::forward(args)...); - old_control = - control->exchange(base_internal::kOnceDone, std::memory_order_release); - if (old_control == base_internal::kOnceWaiter) { - base_internal::SpinLockWake(control, true); - } - } // else *control is already kOnceDone -} - -inline std::atomic* ControlWord(once_flag* flag) { - return &flag->control_; -} - -template -void LowLevelCallOnce(absl::once_flag* flag, Callable&& fn, Args&&... args) { - std::atomic* once = base_internal::ControlWord(flag); - uint32_t s = once->load(std::memory_order_acquire); - if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) { - base_internal::CallOnceImpl(once, base_internal::SCHEDULE_KERNEL_ONLY, - std::forward(fn), - std::forward(args)...); - } -} - -} // namespace base_internal - -template -void call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) { - std::atomic* once = base_internal::ControlWord(&flag); - uint32_t s = once->load(std::memory_order_acquire); - if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) { - base_internal::CallOnceImpl( - once, base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL, - std::forward(fn), std::forward(args)...); - } -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_CALL_ONCE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/casts.h b/client/webrtc/webrtc_demo/third/include/absl/base/casts.h deleted file mode 100644 index 83c6912..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/casts.h +++ /dev/null @@ -1,187 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: casts.h -// ----------------------------------------------------------------------------- -// -// This header file defines casting templates to fit use cases not covered by -// the standard casts provided in the C++ standard. As with all cast operations, -// use these with caution and only if alternatives do not exist. - -#ifndef ABSL_BASE_CASTS_H_ -#define ABSL_BASE_CASTS_H_ - -#include -#include -#include -#include - -#include "absl/base/internal/identity.h" -#include "absl/base/macros.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -namespace internal_casts { - -template -struct is_bitcastable - : std::integral_constant< - bool, - sizeof(Dest) == sizeof(Source) && - type_traits_internal::is_trivially_copyable::value && - type_traits_internal::is_trivially_copyable::value && - std::is_default_constructible::value> {}; - -} // namespace internal_casts - -// implicit_cast() -// -// Performs an implicit conversion between types following the language -// rules for implicit conversion; if an implicit conversion is otherwise -// allowed by the language in the given context, this function performs such an -// implicit conversion. -// -// Example: -// -// // If the context allows implicit conversion: -// From from; -// To to = from; -// -// // Such code can be replaced by: -// implicit_cast(from); -// -// An `implicit_cast()` may also be used to annotate numeric type conversions -// that, although safe, may produce compiler warnings (such as `long` to `int`). -// Additionally, an `implicit_cast()` is also useful within return statements to -// indicate a specific implicit conversion is being undertaken. -// -// Example: -// -// return implicit_cast(size_in_bytes) / capacity_; -// -// Annotating code with `implicit_cast()` allows you to explicitly select -// particular overloads and template instantiations, while providing a safer -// cast than `reinterpret_cast()` or `static_cast()`. -// -// Additionally, an `implicit_cast()` can be used to allow upcasting within a -// type hierarchy where incorrect use of `static_cast()` could accidentally -// allow downcasting. -// -// Finally, an `implicit_cast()` can be used to perform implicit conversions -// from unrelated types that otherwise couldn't be implicitly cast directly; -// C++ will normally only implicitly cast "one step" in such conversions. -// -// That is, if C is a type which can be implicitly converted to B, with B being -// a type that can be implicitly converted to A, an `implicit_cast()` can be -// used to convert C to B (which the compiler can then implicitly convert to A -// using language rules). -// -// Example: -// -// // Assume an object C is convertible to B, which is implicitly convertible -// // to A -// A a = implicit_cast(C); -// -// Such implicit cast chaining may be useful within template logic. -template -constexpr To implicit_cast(typename absl::internal::identity_t to) { - return to; -} - -// bit_cast() -// -// Performs a bitwise cast on a type without changing the underlying bit -// representation of that type's value. The two types must be of the same size -// and both types must be trivially copyable. As with most casts, use with -// caution. A `bit_cast()` might be needed when you need to temporarily treat a -// type as some other type, such as in the following cases: -// -// * Serialization (casting temporarily to `char *` for those purposes is -// always allowed by the C++ standard) -// * Managing the individual bits of a type within mathematical operations -// that are not normally accessible through that type -// * Casting non-pointer types to pointer types (casting the other way is -// allowed by `reinterpret_cast()` but round-trips cannot occur the other -// way). -// -// Example: -// -// float f = 3.14159265358979; -// int i = bit_cast(f); -// // i = 0x40490fdb -// -// Casting non-pointer types to pointer types and then dereferencing them -// traditionally produces undefined behavior. -// -// Example: -// -// // WRONG -// float f = 3.14159265358979; // WRONG -// int i = * reinterpret_cast(&f); // WRONG -// -// The address-casting method produces undefined behavior according to the ISO -// C++ specification section [basic.lval]. Roughly, this section says: if an -// object in memory has one type, and a program accesses it with a different -// type, the result is undefined behavior for most values of "different type". -// -// Such casting results in type punning: holding an object in memory of one type -// and reading its bits back using a different type. A `bit_cast()` avoids this -// issue by implementing its casts using `memcpy()`, which avoids introducing -// this undefined behavior. -// -// NOTE: The requirements here are more strict than the bit_cast of standard -// proposal p0476 due to the need for workarounds and lack of intrinsics. -// Specifically, this implementation also requires `Dest` to be -// default-constructible. -template < - typename Dest, typename Source, - typename std::enable_if::value, - int>::type = 0> -inline Dest bit_cast(const Source& source) { - Dest dest; - memcpy(static_cast(std::addressof(dest)), - static_cast(std::addressof(source)), sizeof(dest)); - return dest; -} - -// NOTE: This overload is only picked if the requirements of bit_cast are -// not met. It is therefore UB, but is provided temporarily as previous -// versions of this function template were unchecked. Do not use this in -// new code. -template < - typename Dest, typename Source, - typename std::enable_if< - !internal_casts::is_bitcastable::value, - int>::type = 0> -ABSL_DEPRECATED( - "absl::bit_cast type requirements were violated. Update the types " - "being used such that they are the same size and are both " - "TriviallyCopyable.") -inline Dest bit_cast(const Source& source) { - static_assert(sizeof(Dest) == sizeof(Source), - "Source and destination types should have equal sizes."); - - Dest dest; - memcpy(&dest, &source, sizeof(dest)); - return dest; -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_CASTS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/config.h b/client/webrtc/webrtc_demo/third/include/absl/base/config.h deleted file mode 100644 index 9544996..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/config.h +++ /dev/null @@ -1,742 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: config.h -// ----------------------------------------------------------------------------- -// -// This header file defines a set of macros for checking the presence of -// important compiler and platform features. Such macros can be used to -// produce portable code by parameterizing compilation based on the presence or -// lack of a given feature. -// -// We define a "feature" as some interface we wish to program to: for example, -// a library function or system call. A value of `1` indicates support for -// that feature; any other value indicates the feature support is undefined. -// -// Example: -// -// Suppose a programmer wants to write a program that uses the 'mmap()' system -// call. The Abseil macro for that feature (`ABSL_HAVE_MMAP`) allows you to -// selectively include the `mmap.h` header and bracket code using that feature -// in the macro: -// -// #include "absl/base/config.h" -// -// #ifdef ABSL_HAVE_MMAP -// #include "sys/mman.h" -// #endif //ABSL_HAVE_MMAP -// -// ... -// #ifdef ABSL_HAVE_MMAP -// void *ptr = mmap(...); -// ... -// #endif // ABSL_HAVE_MMAP - -#ifndef ABSL_BASE_CONFIG_H_ -#define ABSL_BASE_CONFIG_H_ - -// Included for the __GLIBC__ macro (or similar macros on other systems). -#include - -#ifdef __cplusplus -// Included for __GLIBCXX__, _LIBCPP_VERSION -#include -#endif // __cplusplus - -#if defined(__APPLE__) -// Included for TARGET_OS_IPHONE, __IPHONE_OS_VERSION_MIN_REQUIRED, -// __IPHONE_8_0. -#include -#include -#endif - -#include "absl/base/options.h" -#include "absl/base/policy_checks.h" - -// Helper macro to convert a CPP variable to a string literal. -#define ABSL_INTERNAL_DO_TOKEN_STR(x) #x -#define ABSL_INTERNAL_TOKEN_STR(x) ABSL_INTERNAL_DO_TOKEN_STR(x) - -// ----------------------------------------------------------------------------- -// Abseil namespace annotations -// ----------------------------------------------------------------------------- - -// ABSL_NAMESPACE_BEGIN/ABSL_NAMESPACE_END -// -// An annotation placed at the beginning/end of each `namespace absl` scope. -// This is used to inject an inline namespace. -// -// The proper way to write Abseil code in the `absl` namespace is: -// -// namespace absl { -// ABSL_NAMESPACE_BEGIN -// -// void Foo(); // absl::Foo(). -// -// ABSL_NAMESPACE_END -// } // namespace absl -// -// Users of Abseil should not use these macros, because users of Abseil should -// not write `namespace absl {` in their own code for any reason. (Abseil does -// not support forward declarations of its own types, nor does it support -// user-provided specialization of Abseil templates. Code that violates these -// rules may be broken without warning.) -#if !defined(ABSL_OPTION_USE_INLINE_NAMESPACE) || \ - !defined(ABSL_OPTION_INLINE_NAMESPACE_NAME) -#error options.h is misconfigured. -#endif - -// Check that ABSL_OPTION_INLINE_NAMESPACE_NAME is neither "head" nor "" -#if defined(__cplusplus) && ABSL_OPTION_USE_INLINE_NAMESPACE == 1 - -#define ABSL_INTERNAL_INLINE_NAMESPACE_STR \ - ABSL_INTERNAL_TOKEN_STR(ABSL_OPTION_INLINE_NAMESPACE_NAME) - -static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != '\0', - "options.h misconfigured: ABSL_OPTION_INLINE_NAMESPACE_NAME must " - "not be empty."); -static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' || - ABSL_INTERNAL_INLINE_NAMESPACE_STR[1] != 'e' || - ABSL_INTERNAL_INLINE_NAMESPACE_STR[2] != 'a' || - ABSL_INTERNAL_INLINE_NAMESPACE_STR[3] != 'd' || - ABSL_INTERNAL_INLINE_NAMESPACE_STR[4] != '\0', - "options.h misconfigured: ABSL_OPTION_INLINE_NAMESPACE_NAME must " - "be changed to a new, unique identifier name."); - -#endif - -#if ABSL_OPTION_USE_INLINE_NAMESPACE == 0 -#define ABSL_NAMESPACE_BEGIN -#define ABSL_NAMESPACE_END -#define ABSL_INTERNAL_C_SYMBOL(x) x -#elif ABSL_OPTION_USE_INLINE_NAMESPACE == 1 -#define ABSL_NAMESPACE_BEGIN \ - inline namespace ABSL_OPTION_INLINE_NAMESPACE_NAME { -#define ABSL_NAMESPACE_END } -#define ABSL_INTERNAL_C_SYMBOL_HELPER_2(x, v) x##_##v -#define ABSL_INTERNAL_C_SYMBOL_HELPER_1(x, v) \ - ABSL_INTERNAL_C_SYMBOL_HELPER_2(x, v) -#define ABSL_INTERNAL_C_SYMBOL(x) \ - ABSL_INTERNAL_C_SYMBOL_HELPER_1(x, ABSL_OPTION_INLINE_NAMESPACE_NAME) -#else -#error options.h is misconfigured. -#endif - -// ----------------------------------------------------------------------------- -// Compiler Feature Checks -// ----------------------------------------------------------------------------- - -// ABSL_HAVE_BUILTIN() -// -// Checks whether the compiler supports a Clang Feature Checking Macro, and if -// so, checks whether it supports the provided builtin function "x" where x -// is one of the functions noted in -// https://clang.llvm.org/docs/LanguageExtensions.html -// -// Note: Use this macro to avoid an extra level of #ifdef __has_builtin check. -// http://releases.llvm.org/3.3/tools/clang/docs/LanguageExtensions.html -#ifdef __has_builtin -#define ABSL_HAVE_BUILTIN(x) __has_builtin(x) -#else -#define ABSL_HAVE_BUILTIN(x) 0 -#endif - -#if defined(__is_identifier) -#define ABSL_INTERNAL_HAS_KEYWORD(x) !(__is_identifier(x)) -#else -#define ABSL_INTERNAL_HAS_KEYWORD(x) 0 -#endif - -#ifdef __has_feature -#define ABSL_HAVE_FEATURE(f) __has_feature(f) -#else -#define ABSL_HAVE_FEATURE(f) 0 -#endif - -// ABSL_HAVE_TLS is defined to 1 when __thread should be supported. -// We assume __thread is supported on Linux when compiled with Clang or compiled -// against libstdc++ with _GLIBCXX_HAVE_TLS defined. -#ifdef ABSL_HAVE_TLS -#error ABSL_HAVE_TLS cannot be directly set -#elif defined(__linux__) && (defined(__clang__) || defined(_GLIBCXX_HAVE_TLS)) -#define ABSL_HAVE_TLS 1 -#endif - -// ABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE -// -// Checks whether `std::is_trivially_destructible` is supported. -// -// Notes: All supported compilers using libc++ support this feature, as does -// gcc >= 4.8.1 using libstdc++, and Visual Studio. -#ifdef ABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE -#error ABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE cannot be directly set -#elif defined(_LIBCPP_VERSION) || \ - (!defined(__clang__) && defined(__GNUC__) && defined(__GLIBCXX__) && \ - (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))) || \ - defined(_MSC_VER) -#define ABSL_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE 1 -#endif - -// ABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE -// -// Checks whether `std::is_trivially_default_constructible` and -// `std::is_trivially_copy_constructible` are supported. - -// ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE -// -// Checks whether `std::is_trivially_copy_assignable` is supported. - -// Notes: Clang with libc++ supports these features, as does gcc >= 5.1 with -// either libc++ or libstdc++, and Visual Studio (but not NVCC). -#if defined(ABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE) -#error ABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE cannot be directly set -#elif defined(ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE) -#error ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE cannot directly set -#elif (defined(__clang__) && defined(_LIBCPP_VERSION)) || \ - (!defined(__clang__) && defined(__GNUC__) && \ - (__GNUC__ > 7 || (__GNUC__ == 7 && __GNUC_MINOR__ >= 4)) && \ - (defined(_LIBCPP_VERSION) || defined(__GLIBCXX__))) || \ - (defined(_MSC_VER) && !defined(__NVCC__)) -#define ABSL_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE 1 -#define ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE 1 -#endif - -// ABSL_HAVE_SOURCE_LOCATION_CURRENT -// -// Indicates whether `absl::SourceLocation::current()` will return useful -// information in some contexts. -#ifndef ABSL_HAVE_SOURCE_LOCATION_CURRENT -#if ABSL_INTERNAL_HAS_KEYWORD(__builtin_LINE) && \ - ABSL_INTERNAL_HAS_KEYWORD(__builtin_FILE) -#define ABSL_HAVE_SOURCE_LOCATION_CURRENT 1 -#elif defined(__GNUC__) && __GNUC__ >= 5 -#define ABSL_HAVE_SOURCE_LOCATION_CURRENT 1 -#endif -#endif - -// ABSL_HAVE_THREAD_LOCAL -// -// Checks whether C++11's `thread_local` storage duration specifier is -// supported. -#ifdef ABSL_HAVE_THREAD_LOCAL -#error ABSL_HAVE_THREAD_LOCAL cannot be directly set -#elif defined(__APPLE__) -// Notes: -// * Xcode's clang did not support `thread_local` until version 8, and -// even then not for all iOS < 9.0. -// * Xcode 9.3 started disallowing `thread_local` for 32-bit iOS simulator -// targeting iOS 9.x. -// * Xcode 10 moves the deployment target check for iOS < 9.0 to link time -// making ABSL_HAVE_FEATURE unreliable there. -// -#if ABSL_HAVE_FEATURE(cxx_thread_local) && \ - !(TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0) -#define ABSL_HAVE_THREAD_LOCAL 1 -#endif -#else // !defined(__APPLE__) -#define ABSL_HAVE_THREAD_LOCAL 1 -#endif - -// There are platforms for which TLS should not be used even though the compiler -// makes it seem like it's supported (Android NDK < r12b for example). -// This is primarily because of linker problems and toolchain misconfiguration: -// Abseil does not intend to support this indefinitely. Currently, the newest -// toolchain that we intend to support that requires this behavior is the -// r11 NDK - allowing for a 5 year support window on that means this option -// is likely to be removed around June of 2021. -// TLS isn't supported until NDK r12b per -// https://developer.android.com/ndk/downloads/revision_history.html -// Since NDK r16, `__NDK_MAJOR__` and `__NDK_MINOR__` are defined in -// . For NDK < r16, users should define these macros, -// e.g. `-D__NDK_MAJOR__=11 -D__NKD_MINOR__=0` for NDK r11. -#if defined(__ANDROID__) && defined(__clang__) -#if __has_include() -#include -#endif // __has_include() -#if defined(__ANDROID__) && defined(__clang__) && defined(__NDK_MAJOR__) && \ - defined(__NDK_MINOR__) && \ - ((__NDK_MAJOR__ < 12) || ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1))) -#undef ABSL_HAVE_TLS -#undef ABSL_HAVE_THREAD_LOCAL -#endif -#endif // defined(__ANDROID__) && defined(__clang__) - -// ABSL_HAVE_INTRINSIC_INT128 -// -// Checks whether the __int128 compiler extension for a 128-bit integral type is -// supported. -// -// Note: __SIZEOF_INT128__ is defined by Clang and GCC when __int128 is -// supported, but we avoid using it in certain cases: -// * On Clang: -// * Building using Clang for Windows, where the Clang runtime library has -// 128-bit support only on LP64 architectures, but Windows is LLP64. -// * On Nvidia's nvcc: -// * nvcc also defines __GNUC__ and __SIZEOF_INT128__, but not all versions -// actually support __int128. -#ifdef ABSL_HAVE_INTRINSIC_INT128 -#error ABSL_HAVE_INTRINSIC_INT128 cannot be directly set -#elif defined(__SIZEOF_INT128__) -#if (defined(__clang__) && !defined(_WIN32)) || \ - (defined(__CUDACC__) && __CUDACC_VER_MAJOR__ >= 9) || \ - (defined(__GNUC__) && !defined(__clang__) && !defined(__CUDACC__)) -#define ABSL_HAVE_INTRINSIC_INT128 1 -#elif defined(__CUDACC__) -// __CUDACC_VER__ is a full version number before CUDA 9, and is defined to a -// string explaining that it has been removed starting with CUDA 9. We use -// nested #ifs because there is no short-circuiting in the preprocessor. -// NOTE: `__CUDACC__` could be undefined while `__CUDACC_VER__` is defined. -#if __CUDACC_VER__ >= 70000 -#define ABSL_HAVE_INTRINSIC_INT128 1 -#endif // __CUDACC_VER__ >= 70000 -#endif // defined(__CUDACC__) -#endif // ABSL_HAVE_INTRINSIC_INT128 - -// ABSL_HAVE_EXCEPTIONS -// -// Checks whether the compiler both supports and enables exceptions. Many -// compilers support a "no exceptions" mode that disables exceptions. -// -// Generally, when ABSL_HAVE_EXCEPTIONS is not defined: -// -// * Code using `throw` and `try` may not compile. -// * The `noexcept` specifier will still compile and behave as normal. -// * The `noexcept` operator may still return `false`. -// -// For further details, consult the compiler's documentation. -#ifdef ABSL_HAVE_EXCEPTIONS -#error ABSL_HAVE_EXCEPTIONS cannot be directly set. - -#elif defined(__clang__) - -#if __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 6) -// Clang >= 3.6 -#if ABSL_HAVE_FEATURE(cxx_exceptions) -#define ABSL_HAVE_EXCEPTIONS 1 -#endif // ABSL_HAVE_FEATURE(cxx_exceptions) -#else -// Clang < 3.6 -// http://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html#the-exceptions-macro -#if defined(__EXCEPTIONS) && ABSL_HAVE_FEATURE(cxx_exceptions) -#define ABSL_HAVE_EXCEPTIONS 1 -#endif // defined(__EXCEPTIONS) && ABSL_HAVE_FEATURE(cxx_exceptions) -#endif // __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 6) - -// Handle remaining special cases and default to exceptions being supported. -#elif !(defined(__GNUC__) && (__GNUC__ < 5) && !defined(__EXCEPTIONS)) && \ - !(defined(__GNUC__) && (__GNUC__ >= 5) && !defined(__cpp_exceptions)) && \ - !(defined(_MSC_VER) && !defined(_CPPUNWIND)) -#define ABSL_HAVE_EXCEPTIONS 1 -#endif - -// ----------------------------------------------------------------------------- -// Platform Feature Checks -// ----------------------------------------------------------------------------- - -// Currently supported operating systems and associated preprocessor -// symbols: -// -// Linux and Linux-derived __linux__ -// Android __ANDROID__ (implies __linux__) -// Linux (non-Android) __linux__ && !__ANDROID__ -// Darwin (macOS and iOS) __APPLE__ -// Akaros (http://akaros.org) __ros__ -// Windows _WIN32 -// NaCL __native_client__ -// AsmJS __asmjs__ -// WebAssembly __wasm__ -// Fuchsia __Fuchsia__ -// -// Note that since Android defines both __ANDROID__ and __linux__, one -// may probe for either Linux or Android by simply testing for __linux__. - -// ABSL_HAVE_MMAP -// -// Checks whether the platform has an mmap(2) implementation as defined in -// POSIX.1-2001. -#ifdef ABSL_HAVE_MMAP -#error ABSL_HAVE_MMAP cannot be directly set -#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \ - defined(__ros__) || defined(__native_client__) || defined(__asmjs__) || \ - defined(__wasm__) || defined(__Fuchsia__) || defined(__sun) || \ - defined(__ASYLO__) || defined(__myriad2__) -#define ABSL_HAVE_MMAP 1 -#endif - -// ABSL_HAVE_PTHREAD_GETSCHEDPARAM -// -// Checks whether the platform implements the pthread_(get|set)schedparam(3) -// functions as defined in POSIX.1-2001. -#ifdef ABSL_HAVE_PTHREAD_GETSCHEDPARAM -#error ABSL_HAVE_PTHREAD_GETSCHEDPARAM cannot be directly set -#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \ - defined(__ros__) -#define ABSL_HAVE_PTHREAD_GETSCHEDPARAM 1 -#endif - -// ABSL_HAVE_SCHED_GETCPU -// -// Checks whether sched_getcpu is available. -#ifdef ABSL_HAVE_SCHED_GETCPU -#error ABSL_HAVE_SCHED_GETCPU cannot be directly set -#elif defined(__linux__) -#define ABSL_HAVE_SCHED_GETCPU 1 -#endif - -// ABSL_HAVE_SCHED_YIELD -// -// Checks whether the platform implements sched_yield(2) as defined in -// POSIX.1-2001. -#ifdef ABSL_HAVE_SCHED_YIELD -#error ABSL_HAVE_SCHED_YIELD cannot be directly set -#elif defined(__linux__) || defined(__ros__) || defined(__native_client__) -#define ABSL_HAVE_SCHED_YIELD 1 -#endif - -// ABSL_HAVE_SEMAPHORE_H -// -// Checks whether the platform supports the header and sem_init(3) -// family of functions as standardized in POSIX.1-2001. -// -// Note: While Apple provides for both iOS and macOS, it is -// explicitly deprecated and will cause build failures if enabled for those -// platforms. We side-step the issue by not defining it here for Apple -// platforms. -#ifdef ABSL_HAVE_SEMAPHORE_H -#error ABSL_HAVE_SEMAPHORE_H cannot be directly set -#elif defined(__linux__) || defined(__ros__) -#define ABSL_HAVE_SEMAPHORE_H 1 -#endif - -// ABSL_HAVE_ALARM -// -// Checks whether the platform supports the header and alarm(2) -// function as standardized in POSIX.1-2001. -#ifdef ABSL_HAVE_ALARM -#error ABSL_HAVE_ALARM cannot be directly set -#elif defined(__GOOGLE_GRTE_VERSION__) -// feature tests for Google's GRTE -#define ABSL_HAVE_ALARM 1 -#elif defined(__GLIBC__) -// feature test for glibc -#define ABSL_HAVE_ALARM 1 -#elif defined(_MSC_VER) -// feature tests for Microsoft's library -#elif defined(__MINGW32__) -// mingw32 doesn't provide alarm(2): -// https://osdn.net/projects/mingw/scm/git/mingw-org-wsl/blobs/5.2-trunk/mingwrt/include/unistd.h -// mingw-w64 provides a no-op implementation: -// https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-crt/misc/alarm.c -#elif defined(__EMSCRIPTEN__) -// emscripten doesn't support signals -#elif defined(__Fuchsia__) -// Signals don't exist on fuchsia. -#elif defined(__native_client__) -#else -// other standard libraries -#define ABSL_HAVE_ALARM 1 -#endif - -// ABSL_IS_LITTLE_ENDIAN -// ABSL_IS_BIG_ENDIAN -// -// Checks the endianness of the platform. -// -// Notes: uses the built in endian macros provided by GCC (since 4.6) and -// Clang (since 3.2); see -// https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html. -// Otherwise, if _WIN32, assume little endian. Otherwise, bail with an error. -#if defined(ABSL_IS_BIG_ENDIAN) -#error "ABSL_IS_BIG_ENDIAN cannot be directly set." -#endif -#if defined(ABSL_IS_LITTLE_ENDIAN) -#error "ABSL_IS_LITTLE_ENDIAN cannot be directly set." -#endif - -#if (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ - __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) -#define ABSL_IS_LITTLE_ENDIAN 1 -#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \ - __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -#define ABSL_IS_BIG_ENDIAN 1 -#elif defined(_WIN32) -#define ABSL_IS_LITTLE_ENDIAN 1 -#else -#error "absl endian detection needs to be set up for your compiler" -#endif - -// macOS 10.13 and iOS 10.11 don't let you use , , or -// even though the headers exist and are publicly noted to work. See -// https://github.com/abseil/abseil-cpp/issues/207 and -// https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes -// libc++ spells out the availability requirements in the file -// llvm-project/libcxx/include/__config via the #define -// _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS. -#if defined(__APPLE__) && defined(_LIBCPP_VERSION) && \ - ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ - __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101400) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \ - __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 120000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \ - __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \ - __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 120000)) -#define ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 1 -#else -#define ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 0 -#endif - -// ABSL_HAVE_STD_ANY -// -// Checks whether C++17 std::any is available by checking whether exists. -#ifdef ABSL_HAVE_STD_ANY -#error "ABSL_HAVE_STD_ANY cannot be directly set." -#endif - -#ifdef __has_include -#if __has_include() && defined(__cplusplus) && __cplusplus >= 201703L && \ - !ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE -#define ABSL_HAVE_STD_ANY 1 -#endif -#endif - -// ABSL_HAVE_STD_OPTIONAL -// -// Checks whether C++17 std::optional is available. -#ifdef ABSL_HAVE_STD_OPTIONAL -#error "ABSL_HAVE_STD_OPTIONAL cannot be directly set." -#endif - -#ifdef __has_include -#if __has_include() && defined(__cplusplus) && \ - __cplusplus >= 201703L && !ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE -#define ABSL_HAVE_STD_OPTIONAL 1 -#endif -#endif - -// ABSL_HAVE_STD_VARIANT -// -// Checks whether C++17 std::variant is available. -#ifdef ABSL_HAVE_STD_VARIANT -#error "ABSL_HAVE_STD_VARIANT cannot be directly set." -#endif - -#ifdef __has_include -#if __has_include() && defined(__cplusplus) && \ - __cplusplus >= 201703L && !ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE -#define ABSL_HAVE_STD_VARIANT 1 -#endif -#endif - -// ABSL_HAVE_STD_STRING_VIEW -// -// Checks whether C++17 std::string_view is available. -#ifdef ABSL_HAVE_STD_STRING_VIEW -#error "ABSL_HAVE_STD_STRING_VIEW cannot be directly set." -#endif - -#ifdef __has_include -#if __has_include() && defined(__cplusplus) && \ - __cplusplus >= 201703L -#define ABSL_HAVE_STD_STRING_VIEW 1 -#endif -#endif - -// For MSVC, `__has_include` is supported in VS 2017 15.3, which is later than -// the support for , , , . So we use -// _MSC_VER to check whether we have VS 2017 RTM (when , , -// , is implemented) or higher. Also, `__cplusplus` is -// not correctly set by MSVC, so we use `_MSVC_LANG` to check the language -// version. -// TODO(zhangxy): fix tests before enabling aliasing for `std::any`. -#if defined(_MSC_VER) && _MSC_VER >= 1910 && \ - ((defined(_MSVC_LANG) && _MSVC_LANG > 201402) || \ - (defined(__cplusplus) && __cplusplus > 201402)) -// #define ABSL_HAVE_STD_ANY 1 -#define ABSL_HAVE_STD_OPTIONAL 1 -#define ABSL_HAVE_STD_VARIANT 1 -#define ABSL_HAVE_STD_STRING_VIEW 1 -#endif - -// ABSL_USES_STD_ANY -// -// Indicates whether absl::any is an alias for std::any. -#if !defined(ABSL_OPTION_USE_STD_ANY) -#error options.h is misconfigured. -#elif ABSL_OPTION_USE_STD_ANY == 0 || \ - (ABSL_OPTION_USE_STD_ANY == 2 && !defined(ABSL_HAVE_STD_ANY)) -#undef ABSL_USES_STD_ANY -#elif ABSL_OPTION_USE_STD_ANY == 1 || \ - (ABSL_OPTION_USE_STD_ANY == 2 && defined(ABSL_HAVE_STD_ANY)) -#define ABSL_USES_STD_ANY 1 -#else -#error options.h is misconfigured. -#endif - -// ABSL_USES_STD_OPTIONAL -// -// Indicates whether absl::optional is an alias for std::optional. -#if !defined(ABSL_OPTION_USE_STD_OPTIONAL) -#error options.h is misconfigured. -#elif ABSL_OPTION_USE_STD_OPTIONAL == 0 || \ - (ABSL_OPTION_USE_STD_OPTIONAL == 2 && !defined(ABSL_HAVE_STD_OPTIONAL)) -#undef ABSL_USES_STD_OPTIONAL -#elif ABSL_OPTION_USE_STD_OPTIONAL == 1 || \ - (ABSL_OPTION_USE_STD_OPTIONAL == 2 && defined(ABSL_HAVE_STD_OPTIONAL)) -#define ABSL_USES_STD_OPTIONAL 1 -#else -#error options.h is misconfigured. -#endif - -// ABSL_USES_STD_VARIANT -// -// Indicates whether absl::variant is an alias for std::variant. -#if !defined(ABSL_OPTION_USE_STD_VARIANT) -#error options.h is misconfigured. -#elif ABSL_OPTION_USE_STD_VARIANT == 0 || \ - (ABSL_OPTION_USE_STD_VARIANT == 2 && !defined(ABSL_HAVE_STD_VARIANT)) -#undef ABSL_USES_STD_VARIANT -#elif ABSL_OPTION_USE_STD_VARIANT == 1 || \ - (ABSL_OPTION_USE_STD_VARIANT == 2 && defined(ABSL_HAVE_STD_VARIANT)) -#define ABSL_USES_STD_VARIANT 1 -#else -#error options.h is misconfigured. -#endif - -// ABSL_USES_STD_STRING_VIEW -// -// Indicates whether absl::string_view is an alias for std::string_view. -#if !defined(ABSL_OPTION_USE_STD_STRING_VIEW) -#error options.h is misconfigured. -#elif ABSL_OPTION_USE_STD_STRING_VIEW == 0 || \ - (ABSL_OPTION_USE_STD_STRING_VIEW == 2 && \ - !defined(ABSL_HAVE_STD_STRING_VIEW)) -#undef ABSL_USES_STD_STRING_VIEW -#elif ABSL_OPTION_USE_STD_STRING_VIEW == 1 || \ - (ABSL_OPTION_USE_STD_STRING_VIEW == 2 && \ - defined(ABSL_HAVE_STD_STRING_VIEW)) -#define ABSL_USES_STD_STRING_VIEW 1 -#else -#error options.h is misconfigured. -#endif - -// In debug mode, MSVC 2017's std::variant throws a EXCEPTION_ACCESS_VIOLATION -// SEH exception from emplace for variant when constructing the -// struct can throw. This defeats some of variant_test and -// variant_exception_safety_test. -#if defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_DEBUG) -#define ABSL_INTERNAL_MSVC_2017_DBG_MODE -#endif - -// ABSL_INTERNAL_MANGLED_NS -// ABSL_INTERNAL_MANGLED_BACKREFERENCE -// -// Internal macros for building up mangled names in our internal fork of CCTZ. -// This implementation detail is only needed and provided for the MSVC build. -// -// These macros both expand to string literals. ABSL_INTERNAL_MANGLED_NS is -// the mangled spelling of the `absl` namespace, and -// ABSL_INTERNAL_MANGLED_BACKREFERENCE is a back-reference integer representing -// the proper count to skip past the CCTZ fork namespace names. (This number -// is one larger when there is an inline namespace name to skip.) -#if defined(_MSC_VER) -#if ABSL_OPTION_USE_INLINE_NAMESPACE == 0 -#define ABSL_INTERNAL_MANGLED_NS "absl" -#define ABSL_INTERNAL_MANGLED_BACKREFERENCE "5" -#else -#define ABSL_INTERNAL_MANGLED_NS \ - ABSL_INTERNAL_TOKEN_STR(ABSL_OPTION_INLINE_NAMESPACE_NAME) "@absl" -#define ABSL_INTERNAL_MANGLED_BACKREFERENCE "6" -#endif -#endif - -#undef ABSL_INTERNAL_HAS_KEYWORD - -// ABSL_DLL -// -// When building Abseil as a DLL, this macro expands to `__declspec(dllexport)` -// so we can annotate symbols appropriately as being exported. When used in -// headers consuming a DLL, this macro expands to `__declspec(dllimport)` so -// that consumers know the symbol is defined inside the DLL. In all other cases, -// the macro expands to nothing. -#if defined(_MSC_VER) -#if defined(ABSL_BUILD_DLL) -#define ABSL_DLL __declspec(dllexport) -#elif defined(ABSL_CONSUME_DLL) -#define ABSL_DLL __declspec(dllimport) -#else -#define ABSL_DLL -#endif -#else -#define ABSL_DLL -#endif // defined(_MSC_VER) - -// ABSL_HAVE_MEMORY_SANITIZER -// -// MemorySanitizer (MSan) is a detector of uninitialized reads. It consists of -// a compiler instrumentation module and a run-time library. -#ifdef ABSL_HAVE_MEMORY_SANITIZER -#error "ABSL_HAVE_MEMORY_SANITIZER cannot be directly set." -#elif defined(MEMORY_SANITIZER) -// The MEMORY_SANITIZER macro is deprecated but we will continue to honor it -// for now. -#define ABSL_HAVE_MEMORY_SANITIZER 1 -#elif defined(__SANITIZE_MEMORY__) -#define ABSL_HAVE_MEMORY_SANITIZER 1 -#elif !defined(__native_client__) && ABSL_HAVE_FEATURE(memory_sanitizer) -#define ABSL_HAVE_MEMORY_SANITIZER 1 -#endif - -// ABSL_HAVE_THREAD_SANITIZER -// -// ThreadSanitizer (TSan) is a fast data race detector. -#ifdef ABSL_HAVE_THREAD_SANITIZER -#error "ABSL_HAVE_THREAD_SANITIZER cannot be directly set." -#elif defined(THREAD_SANITIZER) -// The THREAD_SANITIZER macro is deprecated but we will continue to honor it -// for now. -#define ABSL_HAVE_THREAD_SANITIZER 1 -#elif defined(__SANITIZE_THREAD__) -#define ABSL_HAVE_THREAD_SANITIZER 1 -#elif ABSL_HAVE_FEATURE(thread_sanitizer) -#define ABSL_HAVE_THREAD_SANITIZER 1 -#endif - -// ABSL_HAVE_ADDRESS_SANITIZER -// -// AddressSanitizer (ASan) is a fast memory error detector. -#ifdef ABSL_HAVE_ADDRESS_SANITIZER -#error "ABSL_HAVE_ADDRESS_SANITIZER cannot be directly set." -#elif defined(ADDRESS_SANITIZER) -// The ADDRESS_SANITIZER macro is deprecated but we will continue to honor it -// for now. -#define ABSL_HAVE_ADDRESS_SANITIZER 1 -#elif defined(__SANITIZE_ADDRESS__) -#define ABSL_HAVE_ADDRESS_SANITIZER 1 -#elif ABSL_HAVE_FEATURE(address_sanitizer) -#define ABSL_HAVE_ADDRESS_SANITIZER 1 -#endif - -// ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION -// -// Class template argument deduction is a language feature added in C++17. -#ifdef ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION -#error "ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION cannot be directly set." -#elif defined(__cpp_deduction_guides) -#define ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION 1 -#endif - -#endif // ABSL_BASE_CONFIG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/const_init.h b/client/webrtc/webrtc_demo/third/include/absl/base/const_init.h deleted file mode 100644 index 16520b6..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/const_init.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// kConstInit -// ----------------------------------------------------------------------------- -// -// A constructor tag used to mark an object as safe for use as a global -// variable, avoiding the usual lifetime issues that can affect globals. - -#ifndef ABSL_BASE_CONST_INIT_H_ -#define ABSL_BASE_CONST_INIT_H_ - -#include "absl/base/config.h" - -// In general, objects with static storage duration (such as global variables) -// can trigger tricky object lifetime situations. Attempting to access them -// from the constructors or destructors of other global objects can result in -// undefined behavior, unless their constructors and destructors are designed -// with this issue in mind. -// -// The normal way to deal with this issue in C++11 is to use constant -// initialization and trivial destructors. -// -// Constant initialization is guaranteed to occur before any other code -// executes. Constructors that are declared 'constexpr' are eligible for -// constant initialization. You can annotate a variable declaration with the -// ABSL_CONST_INIT macro to express this intent. For compilers that support -// it, this annotation will cause a compilation error for declarations that -// aren't subject to constant initialization (perhaps because a runtime value -// was passed as a constructor argument). -// -// On program shutdown, lifetime issues can be avoided on global objects by -// ensuring that they contain trivial destructors. A class has a trivial -// destructor unless it has a user-defined destructor, a virtual method or base -// class, or a data member or base class with a non-trivial destructor of its -// own. Objects with static storage duration and a trivial destructor are not -// cleaned up on program shutdown, and are thus safe to access from other code -// running during shutdown. -// -// For a few core Abseil classes, we make a best effort to allow for safe global -// instances, even though these classes have non-trivial destructors. These -// objects can be created with the absl::kConstInit tag. For example: -// ABSL_CONST_INIT absl::Mutex global_mutex(absl::kConstInit); -// -// The line above declares a global variable of type absl::Mutex which can be -// accessed at any point during startup or shutdown. global_mutex's destructor -// will still run, but will not invalidate the object. Note that C++ specifies -// that accessing an object after its destructor has run results in undefined -// behavior, but this pattern works on the toolchains we support. -// -// The absl::kConstInit tag should only be used to define objects with static -// or thread_local storage duration. - -namespace absl { -ABSL_NAMESPACE_BEGIN - -enum ConstInitType { - kConstInit, -}; - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_CONST_INIT_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/dynamic_annotations.h b/client/webrtc/webrtc_demo/third/include/absl/base/dynamic_annotations.h deleted file mode 100644 index bf874db..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/dynamic_annotations.h +++ /dev/null @@ -1,493 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// This file defines dynamic annotations for use with dynamic analysis tool -// such as valgrind, PIN, etc. -// -// Dynamic annotation is a source code annotation that affects the generated -// code (that is, the annotation is not a comment). Each such annotation is -// attached to a particular instruction and/or to a particular object (address) -// in the program. -// -// The annotations that should be used by users are macros in all upper-case -// (e.g., ABSL_ANNOTATE_THREAD_NAME). -// -// Actual implementation of these macros may differ depending on the dynamic -// analysis tool being used. -// -// This file supports the following configurations: -// - Dynamic Annotations enabled (with static thread-safety warnings disabled). -// In this case, macros expand to functions implemented by Thread Sanitizer, -// when building with TSan. When not provided an external implementation, -// dynamic_annotations.cc provides no-op implementations. -// -// - Static Clang thread-safety warnings enabled. -// When building with a Clang compiler that supports thread-safety warnings, -// a subset of annotations can be statically-checked at compile-time. We -// expand these macros to static-inline functions that can be analyzed for -// thread-safety, but afterwards elided when building the final binary. -// -// - All annotations are disabled. -// If neither Dynamic Annotations nor Clang thread-safety warnings are -// enabled, then all annotation-macros expand to empty. - -#ifndef ABSL_BASE_DYNAMIC_ANNOTATIONS_H_ -#define ABSL_BASE_DYNAMIC_ANNOTATIONS_H_ - -#include - -#include "absl/base/attributes.h" -#include "absl/base/config.h" -#ifdef __cplusplus -#include "absl/base/macros.h" -#endif - -// ------------------------------------------------------------------------- -// Decide which features are enabled. - -#ifdef ABSL_HAVE_THREAD_SANITIZER - -#define ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED 1 -#define ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED 1 -#define ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED 1 -#define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 0 -#define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED 1 - -#else - -#define ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED 0 -#define ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED 0 -#define ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED 0 - -// Clang provides limited support for static thread-safety analysis through a -// feature called Annotalysis. We configure macro-definitions according to -// whether Annotalysis support is available. When running in opt-mode, GCC -// will issue a warning, if these attributes are compiled. Only include them -// when compiling using Clang. - -#if defined(__clang__) -#define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 1 -#if !defined(SWIG) -#define ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED 1 -#endif -#else -#define ABSL_INTERNAL_ANNOTALYSIS_ENABLED 0 -#endif - -// Read/write annotations are enabled in Annotalysis mode; disabled otherwise. -#define ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED \ - ABSL_INTERNAL_ANNOTALYSIS_ENABLED - -#endif // ABSL_HAVE_THREAD_SANITIZER - -#ifdef __cplusplus -#define ABSL_INTERNAL_BEGIN_EXTERN_C extern "C" { -#define ABSL_INTERNAL_END_EXTERN_C } // extern "C" -#define ABSL_INTERNAL_GLOBAL_SCOPED(F) ::F -#define ABSL_INTERNAL_STATIC_INLINE inline -#else -#define ABSL_INTERNAL_BEGIN_EXTERN_C // empty -#define ABSL_INTERNAL_END_EXTERN_C // empty -#define ABSL_INTERNAL_GLOBAL_SCOPED(F) F -#define ABSL_INTERNAL_STATIC_INLINE static inline -#endif - -// ------------------------------------------------------------------------- -// Define race annotations. - -#if ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED == 1 -// Some of the symbols used in this section (e.g. AnnotateBenignRaceSized) are -// defined by the compiler-based santizer implementation, not by the Abseil -// library. Therefore they do not use ABSL_INTERNAL_C_SYMBOL. - -// ------------------------------------------------------------- -// Annotations that suppress errors. It is usually better to express the -// program's synchronization using the other annotations, but these can be used -// when all else fails. - -// Report that we may have a benign race at `pointer`, with size -// "sizeof(*(pointer))". `pointer` must be a non-void* pointer. Insert at the -// point where `pointer` has been allocated, preferably close to the point -// where the race happens. See also ABSL_ANNOTATE_BENIGN_RACE_STATIC. -#define ABSL_ANNOTATE_BENIGN_RACE(pointer, description) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateBenignRaceSized) \ - (__FILE__, __LINE__, pointer, sizeof(*(pointer)), description) - -// Same as ABSL_ANNOTATE_BENIGN_RACE(`address`, `description`), but applies to -// the memory range [`address`, `address`+`size`). -#define ABSL_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateBenignRaceSized) \ - (__FILE__, __LINE__, address, size, description) - -// Enable (`enable`!=0) or disable (`enable`==0) race detection for all threads. -// This annotation could be useful if you want to skip expensive race analysis -// during some period of program execution, e.g. during initialization. -#define ABSL_ANNOTATE_ENABLE_RACE_DETECTION(enable) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateEnableRaceDetection) \ - (__FILE__, __LINE__, enable) - -// ------------------------------------------------------------- -// Annotations useful for debugging. - -// Report the current thread `name` to a race detector. -#define ABSL_ANNOTATE_THREAD_NAME(name) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateThreadName)(__FILE__, __LINE__, name) - -// ------------------------------------------------------------- -// Annotations useful when implementing locks. They are not normally needed by -// modules that merely use locks. The `lock` argument is a pointer to the lock -// object. - -// Report that a lock has been created at address `lock`. -#define ABSL_ANNOTATE_RWLOCK_CREATE(lock) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockCreate)(__FILE__, __LINE__, lock) - -// Report that a linker initialized lock has been created at address `lock`. -#ifdef ABSL_HAVE_THREAD_SANITIZER -#define ABSL_ANNOTATE_RWLOCK_CREATE_STATIC(lock) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockCreateStatic) \ - (__FILE__, __LINE__, lock) -#else -#define ABSL_ANNOTATE_RWLOCK_CREATE_STATIC(lock) \ - ABSL_ANNOTATE_RWLOCK_CREATE(lock) -#endif - -// Report that the lock at address `lock` is about to be destroyed. -#define ABSL_ANNOTATE_RWLOCK_DESTROY(lock) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockDestroy)(__FILE__, __LINE__, lock) - -// Report that the lock at address `lock` has been acquired. -// `is_w`=1 for writer lock, `is_w`=0 for reader lock. -#define ABSL_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockAcquired) \ - (__FILE__, __LINE__, lock, is_w) - -// Report that the lock at address `lock` is about to be released. -// `is_w`=1 for writer lock, `is_w`=0 for reader lock. -#define ABSL_ANNOTATE_RWLOCK_RELEASED(lock, is_w) \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateRWLockReleased) \ - (__FILE__, __LINE__, lock, is_w) - -// Apply ABSL_ANNOTATE_BENIGN_RACE_SIZED to a static variable `static_var`. -#define ABSL_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \ - namespace { \ - class static_var##_annotator { \ - public: \ - static_var##_annotator() { \ - ABSL_ANNOTATE_BENIGN_RACE_SIZED(&static_var, sizeof(static_var), \ - #static_var ": " description); \ - } \ - }; \ - static static_var##_annotator the##static_var##_annotator; \ - } // namespace - -// Function prototypes of annotations provided by the compiler-based sanitizer -// implementation. -ABSL_INTERNAL_BEGIN_EXTERN_C -void AnnotateRWLockCreate(const char* file, int line, - const volatile void* lock); -void AnnotateRWLockCreateStatic(const char* file, int line, - const volatile void* lock); -void AnnotateRWLockDestroy(const char* file, int line, - const volatile void* lock); -void AnnotateRWLockAcquired(const char* file, int line, - const volatile void* lock, long is_w); // NOLINT -void AnnotateRWLockReleased(const char* file, int line, - const volatile void* lock, long is_w); // NOLINT -void AnnotateBenignRace(const char* file, int line, - const volatile void* address, const char* description); -void AnnotateBenignRaceSized(const char* file, int line, - const volatile void* address, size_t size, - const char* description); -void AnnotateThreadName(const char* file, int line, const char* name); -void AnnotateEnableRaceDetection(const char* file, int line, int enable); -ABSL_INTERNAL_END_EXTERN_C - -#else // ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED == 0 - -#define ABSL_ANNOTATE_RWLOCK_CREATE(lock) // empty -#define ABSL_ANNOTATE_RWLOCK_CREATE_STATIC(lock) // empty -#define ABSL_ANNOTATE_RWLOCK_DESTROY(lock) // empty -#define ABSL_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) // empty -#define ABSL_ANNOTATE_RWLOCK_RELEASED(lock, is_w) // empty -#define ABSL_ANNOTATE_BENIGN_RACE(address, description) // empty -#define ABSL_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) // empty -#define ABSL_ANNOTATE_THREAD_NAME(name) // empty -#define ABSL_ANNOTATE_ENABLE_RACE_DETECTION(enable) // empty -#define ABSL_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) // empty - -#endif // ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED - -// ------------------------------------------------------------------------- -// Define memory annotations. - -#ifdef ABSL_HAVE_MEMORY_SANITIZER - -#include - -#define ABSL_ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \ - __msan_unpoison(address, size) - -#define ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) \ - __msan_allocated_memory(address, size) - -#else // !defined(ABSL_HAVE_MEMORY_SANITIZER) - -// TODO(rogeeff): remove this branch -#ifdef ABSL_HAVE_THREAD_SANITIZER -#define ABSL_ANNOTATE_MEMORY_IS_INITIALIZED(address, size) \ - do { \ - (void)(address); \ - (void)(size); \ - } while (0) -#define ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) \ - do { \ - (void)(address); \ - (void)(size); \ - } while (0) -#else - -#define ABSL_ANNOTATE_MEMORY_IS_INITIALIZED(address, size) // empty -#define ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(address, size) // empty - -#endif - -#endif // ABSL_HAVE_MEMORY_SANITIZER - -// ------------------------------------------------------------------------- -// Define IGNORE_READS_BEGIN/_END attributes. - -#if defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED) - -#define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE \ - __attribute((exclusive_lock_function("*"))) -#define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE \ - __attribute((unlock_function("*"))) - -#else // !defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED) - -#define ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE // empty -#define ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE // empty - -#endif // defined(ABSL_INTERNAL_IGNORE_READS_ATTRIBUTE_ENABLED) - -// ------------------------------------------------------------------------- -// Define IGNORE_READS_BEGIN/_END annotations. - -#if ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED == 1 -// Some of the symbols used in this section (e.g. AnnotateIgnoreReadsBegin) are -// defined by the compiler-based implementation, not by the Abseil -// library. Therefore they do not use ABSL_INTERNAL_C_SYMBOL. - -// Request the analysis tool to ignore all reads in the current thread until -// ABSL_ANNOTATE_IGNORE_READS_END is called. Useful to ignore intentional racey -// reads, while still checking other reads and all writes. -// See also ABSL_ANNOTATE_UNPROTECTED_READ. -#define ABSL_ANNOTATE_IGNORE_READS_BEGIN() \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreReadsBegin) \ - (__FILE__, __LINE__) - -// Stop ignoring reads. -#define ABSL_ANNOTATE_IGNORE_READS_END() \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreReadsEnd) \ - (__FILE__, __LINE__) - -// Function prototypes of annotations provided by the compiler-based sanitizer -// implementation. -ABSL_INTERNAL_BEGIN_EXTERN_C -void AnnotateIgnoreReadsBegin(const char* file, int line) - ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE; -void AnnotateIgnoreReadsEnd(const char* file, - int line) ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE; -ABSL_INTERNAL_END_EXTERN_C - -#elif defined(ABSL_INTERNAL_ANNOTALYSIS_ENABLED) - -// When Annotalysis is enabled without Dynamic Annotations, the use of -// static-inline functions allows the annotations to be read at compile-time, -// while still letting the compiler elide the functions from the final build. -// -// TODO(delesley) -- The exclusive lock here ignores writes as well, but -// allows IGNORE_READS_AND_WRITES to work properly. - -#define ABSL_ANNOTATE_IGNORE_READS_BEGIN() \ - ABSL_INTERNAL_GLOBAL_SCOPED( \ - ABSL_INTERNAL_C_SYMBOL(AbslInternalAnnotateIgnoreReadsBegin)) \ - () - -#define ABSL_ANNOTATE_IGNORE_READS_END() \ - ABSL_INTERNAL_GLOBAL_SCOPED( \ - ABSL_INTERNAL_C_SYMBOL(AbslInternalAnnotateIgnoreReadsEnd)) \ - () - -ABSL_INTERNAL_STATIC_INLINE void ABSL_INTERNAL_C_SYMBOL( - AbslInternalAnnotateIgnoreReadsBegin)() - ABSL_INTERNAL_IGNORE_READS_BEGIN_ATTRIBUTE {} - -ABSL_INTERNAL_STATIC_INLINE void ABSL_INTERNAL_C_SYMBOL( - AbslInternalAnnotateIgnoreReadsEnd)() - ABSL_INTERNAL_IGNORE_READS_END_ATTRIBUTE {} - -#else - -#define ABSL_ANNOTATE_IGNORE_READS_BEGIN() // empty -#define ABSL_ANNOTATE_IGNORE_READS_END() // empty - -#endif - -// ------------------------------------------------------------------------- -// Define IGNORE_WRITES_BEGIN/_END annotations. - -#if ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED == 1 - -// Similar to ABSL_ANNOTATE_IGNORE_READS_BEGIN, but ignore writes instead. -#define ABSL_ANNOTATE_IGNORE_WRITES_BEGIN() \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreWritesBegin)(__FILE__, __LINE__) - -// Stop ignoring writes. -#define ABSL_ANNOTATE_IGNORE_WRITES_END() \ - ABSL_INTERNAL_GLOBAL_SCOPED(AnnotateIgnoreWritesEnd)(__FILE__, __LINE__) - -// Function prototypes of annotations provided by the compiler-based sanitizer -// implementation. -ABSL_INTERNAL_BEGIN_EXTERN_C -void AnnotateIgnoreWritesBegin(const char* file, int line); -void AnnotateIgnoreWritesEnd(const char* file, int line); -ABSL_INTERNAL_END_EXTERN_C - -#else - -#define ABSL_ANNOTATE_IGNORE_WRITES_BEGIN() // empty -#define ABSL_ANNOTATE_IGNORE_WRITES_END() // empty - -#endif - -// ------------------------------------------------------------------------- -// Define the ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_* annotations using the more -// primitive annotations defined above. -// -// Instead of doing -// ABSL_ANNOTATE_IGNORE_READS_BEGIN(); -// ... = x; -// ABSL_ANNOTATE_IGNORE_READS_END(); -// one can use -// ... = ABSL_ANNOTATE_UNPROTECTED_READ(x); - -#if defined(ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED) - -// Start ignoring all memory accesses (both reads and writes). -#define ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \ - do { \ - ABSL_ANNOTATE_IGNORE_READS_BEGIN(); \ - ABSL_ANNOTATE_IGNORE_WRITES_BEGIN(); \ - } while (0) - -// Stop ignoring both reads and writes. -#define ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END() \ - do { \ - ABSL_ANNOTATE_IGNORE_WRITES_END(); \ - ABSL_ANNOTATE_IGNORE_READS_END(); \ - } while (0) - -#ifdef __cplusplus -// ABSL_ANNOTATE_UNPROTECTED_READ is the preferred way to annotate racey reads. -#define ABSL_ANNOTATE_UNPROTECTED_READ(x) \ - absl::base_internal::AnnotateUnprotectedRead(x) - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -template -inline T AnnotateUnprotectedRead(const volatile T& x) { // NOLINT - ABSL_ANNOTATE_IGNORE_READS_BEGIN(); - T res = x; - ABSL_ANNOTATE_IGNORE_READS_END(); - return res; -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl -#endif - -#else - -#define ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() // empty -#define ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END() // empty -#define ABSL_ANNOTATE_UNPROTECTED_READ(x) (x) - -#endif - -#ifdef __cplusplus -#ifdef ABSL_HAVE_THREAD_SANITIZER -ABSL_INTERNAL_BEGIN_EXTERN_C -int RunningOnValgrind(); -double ValgrindSlowdown(); -ABSL_INTERNAL_END_EXTERN_C -#else -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { -ABSL_DEPRECATED( - "Don't use this interface. It is misleading and is being deleted.") -ABSL_ATTRIBUTE_ALWAYS_INLINE inline int RunningOnValgrind() { return 0; } -ABSL_DEPRECATED( - "Don't use this interface. It is misleading and is being deleted.") -ABSL_ATTRIBUTE_ALWAYS_INLINE inline double ValgrindSlowdown() { return 1.0; } -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -using absl::base_internal::RunningOnValgrind; -using absl::base_internal::ValgrindSlowdown; -#endif -#endif - -// ------------------------------------------------------------------------- -// Address sanitizer annotations - -#ifdef ABSL_HAVE_ADDRESS_SANITIZER -// Describe the current state of a contiguous container such as e.g. -// std::vector or std::string. For more details see -// sanitizer/common_interface_defs.h, which is provided by the compiler. -#include - -#define ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(beg, end, old_mid, new_mid) \ - __sanitizer_annotate_contiguous_container(beg, end, old_mid, new_mid) -#define ABSL_ADDRESS_SANITIZER_REDZONE(name) \ - struct { \ - char x[8] __attribute__((aligned(8))); \ - } name - -#else - -#define ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(beg, end, old_mid, new_mid) // empty -#define ABSL_ADDRESS_SANITIZER_REDZONE(name) static_assert(true, "") - -#endif // ABSL_HAVE_ADDRESS_SANITIZER - -// ------------------------------------------------------------------------- -// Undefine the macros intended only for this file. - -#undef ABSL_INTERNAL_RACE_ANNOTATIONS_ENABLED -#undef ABSL_INTERNAL_READS_ANNOTATIONS_ENABLED -#undef ABSL_INTERNAL_WRITES_ANNOTATIONS_ENABLED -#undef ABSL_INTERNAL_ANNOTALYSIS_ENABLED -#undef ABSL_INTERNAL_READS_WRITES_ANNOTATIONS_ENABLED -#undef ABSL_INTERNAL_BEGIN_EXTERN_C -#undef ABSL_INTERNAL_END_EXTERN_C -#undef ABSL_INTERNAL_STATIC_INLINE - -#endif // ABSL_BASE_DYNAMIC_ANNOTATIONS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/atomic_hook.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/atomic_hook.h deleted file mode 100644 index ae21cd7..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/atomic_hook.h +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_ATOMIC_HOOK_H_ -#define ABSL_BASE_INTERNAL_ATOMIC_HOOK_H_ - -#include -#include -#include -#include - -#include "absl/base/attributes.h" -#include "absl/base/config.h" - -#if defined(_MSC_VER) && !defined(__clang__) -#define ABSL_HAVE_WORKING_CONSTEXPR_STATIC_INIT 0 -#else -#define ABSL_HAVE_WORKING_CONSTEXPR_STATIC_INIT 1 -#endif - -#if defined(_MSC_VER) -#define ABSL_HAVE_WORKING_ATOMIC_POINTER 0 -#else -#define ABSL_HAVE_WORKING_ATOMIC_POINTER 1 -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -template -class AtomicHook; - -// To workaround AtomicHook not being constant-initializable on some platforms, -// prefer to annotate instances with `ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES` -// instead of `ABSL_CONST_INIT`. -#if ABSL_HAVE_WORKING_CONSTEXPR_STATIC_INIT -#define ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES ABSL_CONST_INIT -#else -#define ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES -#endif - -// `AtomicHook` is a helper class, templatized on a raw function pointer type, -// for implementing Abseil customization hooks. It is a callable object that -// dispatches to the registered hook. Objects of type `AtomicHook` must have -// static or thread storage duration. -// -// A default constructed object performs a no-op (and returns a default -// constructed object) if no hook has been registered. -// -// Hooks can be pre-registered via constant initialization, for example: -// -// ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES static AtomicHook -// my_hook(DefaultAction); -// -// and then changed at runtime via a call to `Store()`. -// -// Reads and writes guarantee memory_order_acquire/memory_order_release -// semantics. -template -class AtomicHook { - public: - using FnPtr = ReturnType (*)(Args...); - - // Constructs an object that by default performs a no-op (and - // returns a default constructed object) when no hook as been registered. - constexpr AtomicHook() : AtomicHook(DummyFunction) {} - - // Constructs an object that by default dispatches to/returns the - // pre-registered default_fn when no hook has been registered at runtime. -#if ABSL_HAVE_WORKING_ATOMIC_POINTER && ABSL_HAVE_WORKING_CONSTEXPR_STATIC_INIT - explicit constexpr AtomicHook(FnPtr default_fn) - : hook_(default_fn), default_fn_(default_fn) {} -#elif ABSL_HAVE_WORKING_CONSTEXPR_STATIC_INIT - explicit constexpr AtomicHook(FnPtr default_fn) - : hook_(kUninitialized), default_fn_(default_fn) {} -#else - // As of January 2020, on all known versions of MSVC this constructor runs in - // the global constructor sequence. If `Store()` is called by a dynamic - // initializer, we want to preserve the value, even if this constructor runs - // after the call to `Store()`. If not, `hook_` will be - // zero-initialized by the linker and we have no need to set it. - // https://developercommunity.visualstudio.com/content/problem/336946/class-with-constexpr-constructor-not-using-static.html - explicit constexpr AtomicHook(FnPtr default_fn) - : /* hook_(deliberately omitted), */ default_fn_(default_fn) { - static_assert(kUninitialized == 0, "here we rely on zero-initialization"); - } -#endif - - // Stores the provided function pointer as the value for this hook. - // - // This is intended to be called once. Multiple calls are legal only if the - // same function pointer is provided for each call. The store is implemented - // as a memory_order_release operation, and read accesses are implemented as - // memory_order_acquire. - void Store(FnPtr fn) { - bool success = DoStore(fn); - static_cast(success); - assert(success); - } - - // Invokes the registered callback. If no callback has yet been registered, a - // default-constructed object of the appropriate type is returned instead. - template - ReturnType operator()(CallArgs&&... args) const { - return DoLoad()(std::forward(args)...); - } - - // Returns the registered callback, or nullptr if none has been registered. - // Useful if client code needs to conditionalize behavior based on whether a - // callback was registered. - // - // Note that atomic_hook.Load()() and atomic_hook() have different semantics: - // operator()() will perform a no-op if no callback was registered, while - // Load()() will dereference a null function pointer. Prefer operator()() to - // Load()() unless you must conditionalize behavior on whether a hook was - // registered. - FnPtr Load() const { - FnPtr ptr = DoLoad(); - return (ptr == DummyFunction) ? nullptr : ptr; - } - - private: - static ReturnType DummyFunction(Args...) { - return ReturnType(); - } - - // Current versions of MSVC (as of September 2017) have a broken - // implementation of std::atomic: Its constructor attempts to do the - // equivalent of a reinterpret_cast in a constexpr context, which is not - // allowed. - // - // This causes an issue when building with LLVM under Windows. To avoid this, - // we use a less-efficient, intptr_t-based implementation on Windows. -#if ABSL_HAVE_WORKING_ATOMIC_POINTER - // Return the stored value, or DummyFunction if no value has been stored. - FnPtr DoLoad() const { return hook_.load(std::memory_order_acquire); } - - // Store the given value. Returns false if a different value was already - // stored to this object. - bool DoStore(FnPtr fn) { - assert(fn); - FnPtr expected = default_fn_; - const bool store_succeeded = hook_.compare_exchange_strong( - expected, fn, std::memory_order_acq_rel, std::memory_order_acquire); - const bool same_value_already_stored = (expected == fn); - return store_succeeded || same_value_already_stored; - } - - std::atomic hook_; -#else // !ABSL_HAVE_WORKING_ATOMIC_POINTER - // Use a sentinel value unlikely to be the address of an actual function. - static constexpr intptr_t kUninitialized = 0; - - static_assert(sizeof(intptr_t) >= sizeof(FnPtr), - "intptr_t can't contain a function pointer"); - - FnPtr DoLoad() const { - const intptr_t value = hook_.load(std::memory_order_acquire); - if (value == kUninitialized) { - return default_fn_; - } - return reinterpret_cast(value); - } - - bool DoStore(FnPtr fn) { - assert(fn); - const auto value = reinterpret_cast(fn); - intptr_t expected = kUninitialized; - const bool store_succeeded = hook_.compare_exchange_strong( - expected, value, std::memory_order_acq_rel, std::memory_order_acquire); - const bool same_value_already_stored = (expected == value); - return store_succeeded || same_value_already_stored; - } - - std::atomic hook_; -#endif - - const FnPtr default_fn_; -}; - -#undef ABSL_HAVE_WORKING_ATOMIC_POINTER -#undef ABSL_HAVE_WORKING_CONSTEXPR_STATIC_INIT - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_ATOMIC_HOOK_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/atomic_hook_test_helper.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/atomic_hook_test_helper.h deleted file mode 100644 index 3e72b49..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/atomic_hook_test_helper.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_ATOMIC_HOOK_TEST_HELPER_H_ -#define ABSL_BASE_ATOMIC_HOOK_TEST_HELPER_H_ - -#include "absl/base/internal/atomic_hook.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace atomic_hook_internal { - -using VoidF = void (*)(); -extern absl::base_internal::AtomicHook func; -extern int default_func_calls; -void DefaultFunc(); -void RegisterFunc(VoidF func); - -} // namespace atomic_hook_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_ATOMIC_HOOK_TEST_HELPER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/cycleclock.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/cycleclock.h deleted file mode 100644 index a18b584..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/cycleclock.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// ----------------------------------------------------------------------------- -// File: cycleclock.h -// ----------------------------------------------------------------------------- -// -// This header file defines a `CycleClock`, which yields the value and frequency -// of a cycle counter that increments at a rate that is approximately constant. -// -// NOTE: -// -// The cycle counter frequency is not necessarily related to the core clock -// frequency and should not be treated as such. That is, `CycleClock` cycles are -// not necessarily "CPU cycles" and code should not rely on that behavior, even -// if experimentally observed. -// -// An arbitrary offset may have been added to the counter at power on. -// -// On some platforms, the rate and offset of the counter may differ -// slightly when read from different CPUs of a multiprocessor. Usually, -// we try to ensure that the operating system adjusts values periodically -// so that values agree approximately. If you need stronger guarantees, -// consider using alternate interfaces. -// -// The CPU is not required to maintain the ordering of a cycle counter read -// with respect to surrounding instructions. - -#ifndef ABSL_BASE_INTERNAL_CYCLECLOCK_H_ -#define ABSL_BASE_INTERNAL_CYCLECLOCK_H_ - -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// ----------------------------------------------------------------------------- -// CycleClock -// ----------------------------------------------------------------------------- -class CycleClock { - public: - // CycleClock::Now() - // - // Returns the value of a cycle counter that counts at a rate that is - // approximately constant. - static int64_t Now(); - - // CycleClock::Frequency() - // - // Returns the amount by which `CycleClock::Now()` increases per second. Note - // that this value may not necessarily match the core CPU clock frequency. - static double Frequency(); - - private: - CycleClock() = delete; // no instances - CycleClock(const CycleClock&) = delete; - CycleClock& operator=(const CycleClock&) = delete; -}; - -using CycleClockSourceFunc = int64_t (*)(); - -class CycleClockSource { - private: - // CycleClockSource::Register() - // - // Register a function that provides an alternate source for the unscaled CPU - // cycle count value. The source function must be async signal safe, must not - // call CycleClock::Now(), and must have a frequency that matches that of the - // unscaled clock used by CycleClock. A nullptr value resets CycleClock to use - // the default source. - static void Register(CycleClockSourceFunc source); -}; - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_CYCLECLOCK_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/direct_mmap.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/direct_mmap.h deleted file mode 100644 index 274054c..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/direct_mmap.h +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Functions for directly invoking mmap() via syscall, avoiding the case where -// mmap() has been locally overridden. - -#ifndef ABSL_BASE_INTERNAL_DIRECT_MMAP_H_ -#define ABSL_BASE_INTERNAL_DIRECT_MMAP_H_ - -#include "absl/base/config.h" - -#if ABSL_HAVE_MMAP - -#include - -#ifdef __linux__ - -#include -#ifdef __BIONIC__ -#include -#else -#include -#endif - -#include -#include -#include -#include -#include - -#ifdef __mips__ -// Include definitions of the ABI currently in use. -#ifdef __BIONIC__ -// Android doesn't have sgidefs.h, but does have asm/sgidefs.h, which has the -// definitions we need. -#include -#else -#include -#endif // __BIONIC__ -#endif // __mips__ - -// SYS_mmap and SYS_munmap are not defined in Android. -#ifdef __BIONIC__ -extern "C" void* __mmap2(void*, size_t, int, int, int, size_t); -#if defined(__NR_mmap) && !defined(SYS_mmap) -#define SYS_mmap __NR_mmap -#endif -#ifndef SYS_munmap -#define SYS_munmap __NR_munmap -#endif -#endif // __BIONIC__ - -#if defined(__NR_mmap2) && !defined(SYS_mmap2) -#define SYS_mmap2 __NR_mmap2 -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// Platform specific logic extracted from -// https://chromium.googlesource.com/linux-syscall-support/+/master/linux_syscall_support.h -inline void* DirectMmap(void* start, size_t length, int prot, int flags, int fd, - off64_t offset) noexcept { -#if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__) || \ - defined(__m68k__) || defined(__sh__) || \ - (defined(__hppa__) && !defined(__LP64__)) || \ - (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) || \ - (defined(__PPC__) && !defined(__PPC64__)) || \ - (defined(__riscv) && __riscv_xlen == 32) || \ - (defined(__s390__) && !defined(__s390x__)) || \ - (defined(__sparc__) && !defined(__arch64__)) - // On these architectures, implement mmap with mmap2. - static int pagesize = 0; - if (pagesize == 0) { -#if defined(__wasm__) || defined(__asmjs__) - pagesize = getpagesize(); -#else - pagesize = sysconf(_SC_PAGESIZE); -#endif - } - if (offset < 0 || offset % pagesize != 0) { - errno = EINVAL; - return MAP_FAILED; - } -#ifdef __BIONIC__ - // SYS_mmap2 has problems on Android API level <= 16. - // Workaround by invoking __mmap2() instead. - return __mmap2(start, length, prot, flags, fd, offset / pagesize); -#else - return reinterpret_cast( - syscall(SYS_mmap2, start, length, prot, flags, fd, - static_cast(offset / pagesize))); -#endif -#elif defined(__s390x__) - // On s390x, mmap() arguments are passed in memory. - unsigned long buf[6] = {reinterpret_cast(start), // NOLINT - static_cast(length), // NOLINT - static_cast(prot), // NOLINT - static_cast(flags), // NOLINT - static_cast(fd), // NOLINT - static_cast(offset)}; // NOLINT - return reinterpret_cast(syscall(SYS_mmap, buf)); -#elif defined(__x86_64__) -// The x32 ABI has 32 bit longs, but the syscall interface is 64 bit. -// We need to explicitly cast to an unsigned 64 bit type to avoid implicit -// sign extension. We can't cast pointers directly because those are -// 32 bits, and gcc will dump ugly warnings about casting from a pointer -// to an integer of a different size. We also need to make sure __off64_t -// isn't truncated to 32-bits under x32. -#define MMAP_SYSCALL_ARG(x) ((uint64_t)(uintptr_t)(x)) - return reinterpret_cast( - syscall(SYS_mmap, MMAP_SYSCALL_ARG(start), MMAP_SYSCALL_ARG(length), - MMAP_SYSCALL_ARG(prot), MMAP_SYSCALL_ARG(flags), - MMAP_SYSCALL_ARG(fd), static_cast(offset))); -#undef MMAP_SYSCALL_ARG -#else // Remaining 64-bit aritectures. - static_assert(sizeof(unsigned long) == 8, "Platform is not 64-bit"); - return reinterpret_cast( - syscall(SYS_mmap, start, length, prot, flags, fd, offset)); -#endif -} - -inline int DirectMunmap(void* start, size_t length) { - return static_cast(syscall(SYS_munmap, start, length)); -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#else // !__linux__ - -// For non-linux platforms where we have mmap, just dispatch directly to the -// actual mmap()/munmap() methods. - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -inline void* DirectMmap(void* start, size_t length, int prot, int flags, int fd, - off_t offset) { - return mmap(start, length, prot, flags, fd, offset); -} - -inline int DirectMunmap(void* start, size_t length) { - return munmap(start, length); -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // __linux__ - -#endif // ABSL_HAVE_MMAP - -#endif // ABSL_BASE_INTERNAL_DIRECT_MMAP_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/endian.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/endian.h deleted file mode 100644 index dad0e9a..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/endian.h +++ /dev/null @@ -1,327 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ABSL_BASE_INTERNAL_ENDIAN_H_ -#define ABSL_BASE_INTERNAL_ENDIAN_H_ - -// The following guarantees declaration of the byte swap functions -#ifdef _MSC_VER -#include // NOLINT(build/include) -#elif defined(__FreeBSD__) -#include -#elif defined(__GLIBC__) -#include // IWYU pragma: export -#endif - -#include -#include "absl/base/casts.h" -#include "absl/base/config.h" -#include "absl/base/internal/unaligned_access.h" -#include "absl/base/port.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// Use compiler byte-swapping intrinsics if they are available. 32-bit -// and 64-bit versions are available in Clang and GCC as of GCC 4.3.0. -// The 16-bit version is available in Clang and GCC only as of GCC 4.8.0. -// For simplicity, we enable them all only for GCC 4.8.0 or later. -#if defined(__clang__) || \ - (defined(__GNUC__) && \ - ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || __GNUC__ >= 5)) -inline uint64_t gbswap_64(uint64_t host_int) { - return __builtin_bswap64(host_int); -} -inline uint32_t gbswap_32(uint32_t host_int) { - return __builtin_bswap32(host_int); -} -inline uint16_t gbswap_16(uint16_t host_int) { - return __builtin_bswap16(host_int); -} - -#elif defined(_MSC_VER) -inline uint64_t gbswap_64(uint64_t host_int) { - return _byteswap_uint64(host_int); -} -inline uint32_t gbswap_32(uint32_t host_int) { - return _byteswap_ulong(host_int); -} -inline uint16_t gbswap_16(uint16_t host_int) { - return _byteswap_ushort(host_int); -} - -#else -inline uint64_t gbswap_64(uint64_t host_int) { -#if defined(__GNUC__) && defined(__x86_64__) && !defined(__APPLE__) - // Adapted from /usr/include/byteswap.h. Not available on Mac. - if (__builtin_constant_p(host_int)) { - return __bswap_constant_64(host_int); - } else { - uint64_t result; - __asm__("bswap %0" : "=r"(result) : "0"(host_int)); - return result; - } -#elif defined(__GLIBC__) - return bswap_64(host_int); -#else - return (((host_int & uint64_t{0xFF}) << 56) | - ((host_int & uint64_t{0xFF00}) << 40) | - ((host_int & uint64_t{0xFF0000}) << 24) | - ((host_int & uint64_t{0xFF000000}) << 8) | - ((host_int & uint64_t{0xFF00000000}) >> 8) | - ((host_int & uint64_t{0xFF0000000000}) >> 24) | - ((host_int & uint64_t{0xFF000000000000}) >> 40) | - ((host_int & uint64_t{0xFF00000000000000}) >> 56)); -#endif // bswap_64 -} - -inline uint32_t gbswap_32(uint32_t host_int) { -#if defined(__GLIBC__) - return bswap_32(host_int); -#else - return (((host_int & uint32_t{0xFF}) << 24) | - ((host_int & uint32_t{0xFF00}) << 8) | - ((host_int & uint32_t{0xFF0000}) >> 8) | - ((host_int & uint32_t{0xFF000000}) >> 24)); -#endif -} - -inline uint16_t gbswap_16(uint16_t host_int) { -#if defined(__GLIBC__) - return bswap_16(host_int); -#else - return (((host_int & uint16_t{0xFF}) << 8) | - ((host_int & uint16_t{0xFF00}) >> 8)); -#endif -} - -#endif // intrinsics available - -#ifdef ABSL_IS_LITTLE_ENDIAN - -// Definitions for ntohl etc. that don't require us to include -// netinet/in.h. We wrap gbswap_32 and gbswap_16 in functions rather -// than just #defining them because in debug mode, gcc doesn't -// correctly handle the (rather involved) definitions of bswap_32. -// gcc guarantees that inline functions are as fast as macros, so -// this isn't a performance hit. -inline uint16_t ghtons(uint16_t x) { return gbswap_16(x); } -inline uint32_t ghtonl(uint32_t x) { return gbswap_32(x); } -inline uint64_t ghtonll(uint64_t x) { return gbswap_64(x); } - -#elif defined ABSL_IS_BIG_ENDIAN - -// These definitions are simpler on big-endian machines -// These are functions instead of macros to avoid self-assignment warnings -// on calls such as "i = ghtnol(i);". This also provides type checking. -inline uint16_t ghtons(uint16_t x) { return x; } -inline uint32_t ghtonl(uint32_t x) { return x; } -inline uint64_t ghtonll(uint64_t x) { return x; } - -#else -#error \ - "Unsupported byte order: Either ABSL_IS_BIG_ENDIAN or " \ - "ABSL_IS_LITTLE_ENDIAN must be defined" -#endif // byte order - -inline uint16_t gntohs(uint16_t x) { return ghtons(x); } -inline uint32_t gntohl(uint32_t x) { return ghtonl(x); } -inline uint64_t gntohll(uint64_t x) { return ghtonll(x); } - -// Utilities to convert numbers between the current hosts's native byte -// order and little-endian byte order -// -// Load/Store methods are alignment safe -namespace little_endian { -// Conversion functions. -#ifdef ABSL_IS_LITTLE_ENDIAN - -inline uint16_t FromHost16(uint16_t x) { return x; } -inline uint16_t ToHost16(uint16_t x) { return x; } - -inline uint32_t FromHost32(uint32_t x) { return x; } -inline uint32_t ToHost32(uint32_t x) { return x; } - -inline uint64_t FromHost64(uint64_t x) { return x; } -inline uint64_t ToHost64(uint64_t x) { return x; } - -inline constexpr bool IsLittleEndian() { return true; } - -#elif defined ABSL_IS_BIG_ENDIAN - -inline uint16_t FromHost16(uint16_t x) { return gbswap_16(x); } -inline uint16_t ToHost16(uint16_t x) { return gbswap_16(x); } - -inline uint32_t FromHost32(uint32_t x) { return gbswap_32(x); } -inline uint32_t ToHost32(uint32_t x) { return gbswap_32(x); } - -inline uint64_t FromHost64(uint64_t x) { return gbswap_64(x); } -inline uint64_t ToHost64(uint64_t x) { return gbswap_64(x); } - -inline constexpr bool IsLittleEndian() { return false; } - -#endif /* ENDIAN */ - -inline uint8_t FromHost(uint8_t x) { return x; } -inline uint16_t FromHost(uint16_t x) { return FromHost16(x); } -inline uint32_t FromHost(uint32_t x) { return FromHost32(x); } -inline uint64_t FromHost(uint64_t x) { return FromHost64(x); } -inline uint8_t ToHost(uint8_t x) { return x; } -inline uint16_t ToHost(uint16_t x) { return ToHost16(x); } -inline uint32_t ToHost(uint32_t x) { return ToHost32(x); } -inline uint64_t ToHost(uint64_t x) { return ToHost64(x); } - -inline int8_t FromHost(int8_t x) { return x; } -inline int16_t FromHost(int16_t x) { - return bit_cast(FromHost16(bit_cast(x))); -} -inline int32_t FromHost(int32_t x) { - return bit_cast(FromHost32(bit_cast(x))); -} -inline int64_t FromHost(int64_t x) { - return bit_cast(FromHost64(bit_cast(x))); -} -inline int8_t ToHost(int8_t x) { return x; } -inline int16_t ToHost(int16_t x) { - return bit_cast(ToHost16(bit_cast(x))); -} -inline int32_t ToHost(int32_t x) { - return bit_cast(ToHost32(bit_cast(x))); -} -inline int64_t ToHost(int64_t x) { - return bit_cast(ToHost64(bit_cast(x))); -} - -// Functions to do unaligned loads and stores in little-endian order. -inline uint16_t Load16(const void *p) { - return ToHost16(ABSL_INTERNAL_UNALIGNED_LOAD16(p)); -} - -inline void Store16(void *p, uint16_t v) { - ABSL_INTERNAL_UNALIGNED_STORE16(p, FromHost16(v)); -} - -inline uint32_t Load32(const void *p) { - return ToHost32(ABSL_INTERNAL_UNALIGNED_LOAD32(p)); -} - -inline void Store32(void *p, uint32_t v) { - ABSL_INTERNAL_UNALIGNED_STORE32(p, FromHost32(v)); -} - -inline uint64_t Load64(const void *p) { - return ToHost64(ABSL_INTERNAL_UNALIGNED_LOAD64(p)); -} - -inline void Store64(void *p, uint64_t v) { - ABSL_INTERNAL_UNALIGNED_STORE64(p, FromHost64(v)); -} - -} // namespace little_endian - -// Utilities to convert numbers between the current hosts's native byte -// order and big-endian byte order (same as network byte order) -// -// Load/Store methods are alignment safe -namespace big_endian { -#ifdef ABSL_IS_LITTLE_ENDIAN - -inline uint16_t FromHost16(uint16_t x) { return gbswap_16(x); } -inline uint16_t ToHost16(uint16_t x) { return gbswap_16(x); } - -inline uint32_t FromHost32(uint32_t x) { return gbswap_32(x); } -inline uint32_t ToHost32(uint32_t x) { return gbswap_32(x); } - -inline uint64_t FromHost64(uint64_t x) { return gbswap_64(x); } -inline uint64_t ToHost64(uint64_t x) { return gbswap_64(x); } - -inline constexpr bool IsLittleEndian() { return true; } - -#elif defined ABSL_IS_BIG_ENDIAN - -inline uint16_t FromHost16(uint16_t x) { return x; } -inline uint16_t ToHost16(uint16_t x) { return x; } - -inline uint32_t FromHost32(uint32_t x) { return x; } -inline uint32_t ToHost32(uint32_t x) { return x; } - -inline uint64_t FromHost64(uint64_t x) { return x; } -inline uint64_t ToHost64(uint64_t x) { return x; } - -inline constexpr bool IsLittleEndian() { return false; } - -#endif /* ENDIAN */ - -inline uint8_t FromHost(uint8_t x) { return x; } -inline uint16_t FromHost(uint16_t x) { return FromHost16(x); } -inline uint32_t FromHost(uint32_t x) { return FromHost32(x); } -inline uint64_t FromHost(uint64_t x) { return FromHost64(x); } -inline uint8_t ToHost(uint8_t x) { return x; } -inline uint16_t ToHost(uint16_t x) { return ToHost16(x); } -inline uint32_t ToHost(uint32_t x) { return ToHost32(x); } -inline uint64_t ToHost(uint64_t x) { return ToHost64(x); } - -inline int8_t FromHost(int8_t x) { return x; } -inline int16_t FromHost(int16_t x) { - return bit_cast(FromHost16(bit_cast(x))); -} -inline int32_t FromHost(int32_t x) { - return bit_cast(FromHost32(bit_cast(x))); -} -inline int64_t FromHost(int64_t x) { - return bit_cast(FromHost64(bit_cast(x))); -} -inline int8_t ToHost(int8_t x) { return x; } -inline int16_t ToHost(int16_t x) { - return bit_cast(ToHost16(bit_cast(x))); -} -inline int32_t ToHost(int32_t x) { - return bit_cast(ToHost32(bit_cast(x))); -} -inline int64_t ToHost(int64_t x) { - return bit_cast(ToHost64(bit_cast(x))); -} - -// Functions to do unaligned loads and stores in big-endian order. -inline uint16_t Load16(const void *p) { - return ToHost16(ABSL_INTERNAL_UNALIGNED_LOAD16(p)); -} - -inline void Store16(void *p, uint16_t v) { - ABSL_INTERNAL_UNALIGNED_STORE16(p, FromHost16(v)); -} - -inline uint32_t Load32(const void *p) { - return ToHost32(ABSL_INTERNAL_UNALIGNED_LOAD32(p)); -} - -inline void Store32(void *p, uint32_t v) { - ABSL_INTERNAL_UNALIGNED_STORE32(p, FromHost32(v)); -} - -inline uint64_t Load64(const void *p) { - return ToHost64(ABSL_INTERNAL_UNALIGNED_LOAD64(p)); -} - -inline void Store64(void *p, uint64_t v) { - ABSL_INTERNAL_UNALIGNED_STORE64(p, FromHost64(v)); -} - -} // namespace big_endian - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_ENDIAN_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/errno_saver.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/errno_saver.h deleted file mode 100644 index 251de51..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/errno_saver.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_ERRNO_SAVER_H_ -#define ABSL_BASE_INTERNAL_ERRNO_SAVER_H_ - -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// `ErrnoSaver` captures the value of `errno` upon construction and restores it -// upon deletion. It is used in low-level code and must be super fast. Do not -// add instrumentation, even in debug modes. -class ErrnoSaver { - public: - ErrnoSaver() : saved_errno_(errno) {} - ~ErrnoSaver() { errno = saved_errno_; } - int operator()() const { return saved_errno_; } - - private: - const int saved_errno_; -}; - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_ERRNO_SAVER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/exception_safety_testing.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/exception_safety_testing.h deleted file mode 100644 index 6ba89d0..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/exception_safety_testing.h +++ /dev/null @@ -1,1101 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Utilities for testing exception-safety - -#ifndef ABSL_BASE_INTERNAL_EXCEPTION_SAFETY_TESTING_H_ -#define ABSL_BASE_INTERNAL_EXCEPTION_SAFETY_TESTING_H_ - -#include "absl/base/config.h" - -#ifdef ABSL_HAVE_EXCEPTIONS - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "gtest/gtest.h" -#include "absl/base/internal/pretty_function.h" -#include "absl/memory/memory.h" -#include "absl/meta/type_traits.h" -#include "absl/strings/string_view.h" -#include "absl/strings/substitute.h" -#include "absl/utility/utility.h" - -namespace testing { - -enum class TypeSpec; -enum class AllocSpec; - -constexpr TypeSpec operator|(TypeSpec a, TypeSpec b) { - using T = absl::underlying_type_t; - return static_cast(static_cast(a) | static_cast(b)); -} - -constexpr TypeSpec operator&(TypeSpec a, TypeSpec b) { - using T = absl::underlying_type_t; - return static_cast(static_cast(a) & static_cast(b)); -} - -constexpr AllocSpec operator|(AllocSpec a, AllocSpec b) { - using T = absl::underlying_type_t; - return static_cast(static_cast(a) | static_cast(b)); -} - -constexpr AllocSpec operator&(AllocSpec a, AllocSpec b) { - using T = absl::underlying_type_t; - return static_cast(static_cast(a) & static_cast(b)); -} - -namespace exceptions_internal { - -std::string GetSpecString(TypeSpec); -std::string GetSpecString(AllocSpec); - -struct NoThrowTag {}; -struct StrongGuaranteeTagType {}; - -// A simple exception class. We throw this so that test code can catch -// exceptions specifically thrown by ThrowingValue. -class TestException { - public: - explicit TestException(absl::string_view msg) : msg_(msg) {} - virtual ~TestException() {} - virtual const char* what() const noexcept { return msg_.c_str(); } - - private: - std::string msg_; -}; - -// TestBadAllocException exists because allocation functions must throw an -// exception which can be caught by a handler of std::bad_alloc. We use a child -// class of std::bad_alloc so we can customise the error message, and also -// derive from TestException so we don't accidentally end up catching an actual -// bad_alloc exception in TestExceptionSafety. -class TestBadAllocException : public std::bad_alloc, public TestException { - public: - explicit TestBadAllocException(absl::string_view msg) : TestException(msg) {} - using TestException::what; -}; - -extern int countdown; - -// Allows the countdown variable to be set manually (defaulting to the initial -// value of 0) -inline void SetCountdown(int i = 0) { countdown = i; } -// Sets the countdown to the terminal value -1 -inline void UnsetCountdown() { SetCountdown(-1); } - -void MaybeThrow(absl::string_view msg, bool throw_bad_alloc = false); - -testing::AssertionResult FailureMessage(const TestException& e, - int countdown) noexcept; - -struct TrackedAddress { - bool is_alive; - std::string description; -}; - -// Inspects the constructions and destructions of anything inheriting from -// TrackedObject. This allows us to safely "leak" TrackedObjects, as -// ConstructorTracker will destroy everything left over in its destructor. -class ConstructorTracker { - public: - explicit ConstructorTracker(int count) : countdown_(count) { - assert(current_tracker_instance_ == nullptr); - current_tracker_instance_ = this; - } - - ~ConstructorTracker() { - assert(current_tracker_instance_ == this); - current_tracker_instance_ = nullptr; - - for (auto& it : address_map_) { - void* address = it.first; - TrackedAddress& tracked_address = it.second; - if (tracked_address.is_alive) { - ADD_FAILURE() << ErrorMessage(address, tracked_address.description, - countdown_, "Object was not destroyed."); - } - } - } - - static void ObjectConstructed(void* address, std::string description) { - if (!CurrentlyTracking()) return; - - TrackedAddress& tracked_address = - current_tracker_instance_->address_map_[address]; - if (tracked_address.is_alive) { - ADD_FAILURE() << ErrorMessage( - address, tracked_address.description, - current_tracker_instance_->countdown_, - "Object was re-constructed. Current object was constructed by " + - description); - } - tracked_address = {true, std::move(description)}; - } - - static void ObjectDestructed(void* address) { - if (!CurrentlyTracking()) return; - - auto it = current_tracker_instance_->address_map_.find(address); - // Not tracked. Ignore. - if (it == current_tracker_instance_->address_map_.end()) return; - - TrackedAddress& tracked_address = it->second; - if (!tracked_address.is_alive) { - ADD_FAILURE() << ErrorMessage(address, tracked_address.description, - current_tracker_instance_->countdown_, - "Object was re-destroyed."); - } - tracked_address.is_alive = false; - } - - private: - static bool CurrentlyTracking() { - return current_tracker_instance_ != nullptr; - } - - static std::string ErrorMessage(void* address, - const std::string& address_description, - int countdown, - const std::string& error_description) { - return absl::Substitute( - "With coundtown at $0:\n" - " $1\n" - " Object originally constructed by $2\n" - " Object address: $3\n", - countdown, error_description, address_description, address); - } - - std::unordered_map address_map_; - int countdown_; - - static ConstructorTracker* current_tracker_instance_; -}; - -class TrackedObject { - public: - TrackedObject(const TrackedObject&) = delete; - TrackedObject(TrackedObject&&) = delete; - - protected: - explicit TrackedObject(std::string description) { - ConstructorTracker::ObjectConstructed(this, std::move(description)); - } - - ~TrackedObject() noexcept { ConstructorTracker::ObjectDestructed(this); } -}; -} // namespace exceptions_internal - -extern exceptions_internal::NoThrowTag nothrow_ctor; - -extern exceptions_internal::StrongGuaranteeTagType strong_guarantee; - -// A test class which is convertible to bool. The conversion can be -// instrumented to throw at a controlled time. -class ThrowingBool { - public: - ThrowingBool(bool b) noexcept : b_(b) {} // NOLINT(runtime/explicit) - operator bool() const { // NOLINT - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return b_; - } - - private: - bool b_; -}; - -/* - * Configuration enum for the ThrowingValue type that defines behavior for the - * lifetime of the instance. Use testing::nothrow_ctor to prevent the integer - * constructor from throwing. - * - * kEverythingThrows: Every operation can throw an exception - * kNoThrowCopy: Copy construction and copy assignment will not throw - * kNoThrowMove: Move construction and move assignment will not throw - * kNoThrowNew: Overloaded operators new and new[] will not throw - */ -enum class TypeSpec { - kEverythingThrows = 0, - kNoThrowCopy = 1, - kNoThrowMove = 1 << 1, - kNoThrowNew = 1 << 2, -}; - -/* - * A testing class instrumented to throw an exception at a controlled time. - * - * ThrowingValue implements a slightly relaxed version of the Regular concept -- - * that is it's a value type with the expected semantics. It also implements - * arithmetic operations. It doesn't implement member and pointer operators - * like operator-> or operator[]. - * - * ThrowingValue can be instrumented to have certain operations be noexcept by - * using compile-time bitfield template arguments. That is, to make an - * ThrowingValue which has noexcept move construction/assignment and noexcept - * copy construction/assignment, use the following: - * ThrowingValue my_thrwr{val}; - */ -template -class ThrowingValue : private exceptions_internal::TrackedObject { - static constexpr bool IsSpecified(TypeSpec spec) { - return static_cast(Spec & spec); - } - - static constexpr int kDefaultValue = 0; - static constexpr int kBadValue = 938550620; - - public: - ThrowingValue() : TrackedObject(GetInstanceString(kDefaultValue)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ = kDefaultValue; - } - - ThrowingValue(const ThrowingValue& other) noexcept( - IsSpecified(TypeSpec::kNoThrowCopy)) - : TrackedObject(GetInstanceString(other.dummy_)) { - if (!IsSpecified(TypeSpec::kNoThrowCopy)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - } - dummy_ = other.dummy_; - } - - ThrowingValue(ThrowingValue&& other) noexcept( - IsSpecified(TypeSpec::kNoThrowMove)) - : TrackedObject(GetInstanceString(other.dummy_)) { - if (!IsSpecified(TypeSpec::kNoThrowMove)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - } - dummy_ = other.dummy_; - } - - explicit ThrowingValue(int i) : TrackedObject(GetInstanceString(i)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ = i; - } - - ThrowingValue(int i, exceptions_internal::NoThrowTag) noexcept - : TrackedObject(GetInstanceString(i)), dummy_(i) {} - - // absl expects nothrow destructors - ~ThrowingValue() noexcept = default; - - ThrowingValue& operator=(const ThrowingValue& other) noexcept( - IsSpecified(TypeSpec::kNoThrowCopy)) { - dummy_ = kBadValue; - if (!IsSpecified(TypeSpec::kNoThrowCopy)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - } - dummy_ = other.dummy_; - return *this; - } - - ThrowingValue& operator=(ThrowingValue&& other) noexcept( - IsSpecified(TypeSpec::kNoThrowMove)) { - dummy_ = kBadValue; - if (!IsSpecified(TypeSpec::kNoThrowMove)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - } - dummy_ = other.dummy_; - return *this; - } - - // Arithmetic Operators - ThrowingValue operator+(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ + other.dummy_, nothrow_ctor); - } - - ThrowingValue operator+() const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_, nothrow_ctor); - } - - ThrowingValue operator-(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ - other.dummy_, nothrow_ctor); - } - - ThrowingValue operator-() const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(-dummy_, nothrow_ctor); - } - - ThrowingValue& operator++() { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - ++dummy_; - return *this; - } - - ThrowingValue operator++(int) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - auto out = ThrowingValue(dummy_, nothrow_ctor); - ++dummy_; - return out; - } - - ThrowingValue& operator--() { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - --dummy_; - return *this; - } - - ThrowingValue operator--(int) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - auto out = ThrowingValue(dummy_, nothrow_ctor); - --dummy_; - return out; - } - - ThrowingValue operator*(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ * other.dummy_, nothrow_ctor); - } - - ThrowingValue operator/(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ / other.dummy_, nothrow_ctor); - } - - ThrowingValue operator%(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ % other.dummy_, nothrow_ctor); - } - - ThrowingValue operator<<(int shift) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ << shift, nothrow_ctor); - } - - ThrowingValue operator>>(int shift) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ >> shift, nothrow_ctor); - } - - // Comparison Operators - // NOTE: We use `ThrowingBool` instead of `bool` because most STL - // types/containers requires T to be convertible to bool. - friend ThrowingBool operator==(const ThrowingValue& a, - const ThrowingValue& b) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return a.dummy_ == b.dummy_; - } - friend ThrowingBool operator!=(const ThrowingValue& a, - const ThrowingValue& b) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return a.dummy_ != b.dummy_; - } - friend ThrowingBool operator<(const ThrowingValue& a, - const ThrowingValue& b) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return a.dummy_ < b.dummy_; - } - friend ThrowingBool operator<=(const ThrowingValue& a, - const ThrowingValue& b) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return a.dummy_ <= b.dummy_; - } - friend ThrowingBool operator>(const ThrowingValue& a, - const ThrowingValue& b) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return a.dummy_ > b.dummy_; - } - friend ThrowingBool operator>=(const ThrowingValue& a, - const ThrowingValue& b) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return a.dummy_ >= b.dummy_; - } - - // Logical Operators - ThrowingBool operator!() const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return !dummy_; - } - - ThrowingBool operator&&(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return dummy_ && other.dummy_; - } - - ThrowingBool operator||(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return dummy_ || other.dummy_; - } - - // Bitwise Logical Operators - ThrowingValue operator~() const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(~dummy_, nothrow_ctor); - } - - ThrowingValue operator&(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ & other.dummy_, nothrow_ctor); - } - - ThrowingValue operator|(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ | other.dummy_, nothrow_ctor); - } - - ThrowingValue operator^(const ThrowingValue& other) const { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return ThrowingValue(dummy_ ^ other.dummy_, nothrow_ctor); - } - - // Compound Assignment operators - ThrowingValue& operator+=(const ThrowingValue& other) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ += other.dummy_; - return *this; - } - - ThrowingValue& operator-=(const ThrowingValue& other) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ -= other.dummy_; - return *this; - } - - ThrowingValue& operator*=(const ThrowingValue& other) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ *= other.dummy_; - return *this; - } - - ThrowingValue& operator/=(const ThrowingValue& other) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ /= other.dummy_; - return *this; - } - - ThrowingValue& operator%=(const ThrowingValue& other) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ %= other.dummy_; - return *this; - } - - ThrowingValue& operator&=(const ThrowingValue& other) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ &= other.dummy_; - return *this; - } - - ThrowingValue& operator|=(const ThrowingValue& other) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ |= other.dummy_; - return *this; - } - - ThrowingValue& operator^=(const ThrowingValue& other) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ ^= other.dummy_; - return *this; - } - - ThrowingValue& operator<<=(int shift) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ <<= shift; - return *this; - } - - ThrowingValue& operator>>=(int shift) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ >>= shift; - return *this; - } - - // Pointer operators - void operator&() const = delete; // NOLINT(runtime/operator) - - // Stream operators - friend std::ostream& operator<<(std::ostream& os, const ThrowingValue& tv) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return os << GetInstanceString(tv.dummy_); - } - - friend std::istream& operator>>(std::istream& is, const ThrowingValue&) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - return is; - } - - // Memory management operators - // Args.. allows us to overload regular and placement new in one shot - template - static void* operator new(size_t s, Args&&... args) noexcept( - IsSpecified(TypeSpec::kNoThrowNew)) { - if (!IsSpecified(TypeSpec::kNoThrowNew)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION, true); - } - return ::operator new(s, std::forward(args)...); - } - - template - static void* operator new[](size_t s, Args&&... args) noexcept( - IsSpecified(TypeSpec::kNoThrowNew)) { - if (!IsSpecified(TypeSpec::kNoThrowNew)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION, true); - } - return ::operator new[](s, std::forward(args)...); - } - - // Abseil doesn't support throwing overloaded operator delete. These are - // provided so a throwing operator-new can clean up after itself. - // - // We provide both regular and templated operator delete because if only the - // templated version is provided as we did with operator new, the compiler has - // no way of knowing which overload of operator delete to call. See - // https://en.cppreference.com/w/cpp/memory/new/operator_delete and - // https://en.cppreference.com/w/cpp/language/delete for the gory details. - void operator delete(void* p) noexcept { ::operator delete(p); } - - template - void operator delete(void* p, Args&&... args) noexcept { - ::operator delete(p, std::forward(args)...); - } - - void operator delete[](void* p) noexcept { return ::operator delete[](p); } - - template - void operator delete[](void* p, Args&&... args) noexcept { - return ::operator delete[](p, std::forward(args)...); - } - - // Non-standard access to the actual contained value. No need for this to - // throw. - int& Get() noexcept { return dummy_; } - const int& Get() const noexcept { return dummy_; } - - private: - static std::string GetInstanceString(int dummy) { - return absl::StrCat("ThrowingValue<", - exceptions_internal::GetSpecString(Spec), ">(", dummy, - ")"); - } - - int dummy_; -}; -// While not having to do with exceptions, explicitly delete comma operator, to -// make sure we don't use it on user-supplied types. -template -void operator,(const ThrowingValue&, T&&) = delete; -template -void operator,(T&&, const ThrowingValue&) = delete; - -/* - * Configuration enum for the ThrowingAllocator type that defines behavior for - * the lifetime of the instance. - * - * kEverythingThrows: Calls to the member functions may throw - * kNoThrowAllocate: Calls to the member functions will not throw - */ -enum class AllocSpec { - kEverythingThrows = 0, - kNoThrowAllocate = 1, -}; - -/* - * An allocator type which is instrumented to throw at a controlled time, or not - * to throw, using AllocSpec. The supported settings are the default of every - * function which is allowed to throw in a conforming allocator possibly - * throwing, or nothing throws, in line with the ABSL_ALLOCATOR_THROWS - * configuration macro. - */ -template -class ThrowingAllocator : private exceptions_internal::TrackedObject { - static constexpr bool IsSpecified(AllocSpec spec) { - return static_cast(Spec & spec); - } - - public: - using pointer = T*; - using const_pointer = const T*; - using reference = T&; - using const_reference = const T&; - using void_pointer = void*; - using const_void_pointer = const void*; - using value_type = T; - using size_type = size_t; - using difference_type = ptrdiff_t; - - using is_nothrow = - std::integral_constant; - using propagate_on_container_copy_assignment = std::true_type; - using propagate_on_container_move_assignment = std::true_type; - using propagate_on_container_swap = std::true_type; - using is_always_equal = std::false_type; - - ThrowingAllocator() : TrackedObject(GetInstanceString(next_id_)) { - exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION); - dummy_ = std::make_shared(next_id_++); - } - - template - ThrowingAllocator(const ThrowingAllocator& other) noexcept // NOLINT - : TrackedObject(GetInstanceString(*other.State())), - dummy_(other.State()) {} - - // According to C++11 standard [17.6.3.5], Table 28, the move/copy ctors of - // allocator shall not exit via an exception, thus they are marked noexcept. - ThrowingAllocator(const ThrowingAllocator& other) noexcept - : TrackedObject(GetInstanceString(*other.State())), - dummy_(other.State()) {} - - template - ThrowingAllocator(ThrowingAllocator&& other) noexcept // NOLINT - : TrackedObject(GetInstanceString(*other.State())), - dummy_(std::move(other.State())) {} - - ThrowingAllocator(ThrowingAllocator&& other) noexcept - : TrackedObject(GetInstanceString(*other.State())), - dummy_(std::move(other.State())) {} - - ~ThrowingAllocator() noexcept = default; - - ThrowingAllocator& operator=(const ThrowingAllocator& other) noexcept { - dummy_ = other.State(); - return *this; - } - - template - ThrowingAllocator& operator=( - const ThrowingAllocator& other) noexcept { - dummy_ = other.State(); - return *this; - } - - template - ThrowingAllocator& operator=(ThrowingAllocator&& other) noexcept { - dummy_ = std::move(other.State()); - return *this; - } - - template - struct rebind { - using other = ThrowingAllocator; - }; - - pointer allocate(size_type n) noexcept( - IsSpecified(AllocSpec::kNoThrowAllocate)) { - ReadStateAndMaybeThrow(ABSL_PRETTY_FUNCTION); - return static_cast(::operator new(n * sizeof(T))); - } - - pointer allocate(size_type n, const_void_pointer) noexcept( - IsSpecified(AllocSpec::kNoThrowAllocate)) { - return allocate(n); - } - - void deallocate(pointer ptr, size_type) noexcept { - ReadState(); - ::operator delete(static_cast(ptr)); - } - - template - void construct(U* ptr, Args&&... args) noexcept( - IsSpecified(AllocSpec::kNoThrowAllocate)) { - ReadStateAndMaybeThrow(ABSL_PRETTY_FUNCTION); - ::new (static_cast(ptr)) U(std::forward(args)...); - } - - template - void destroy(U* p) noexcept { - ReadState(); - p->~U(); - } - - size_type max_size() const noexcept { - return (std::numeric_limits::max)() / sizeof(value_type); - } - - ThrowingAllocator select_on_container_copy_construction() noexcept( - IsSpecified(AllocSpec::kNoThrowAllocate)) { - auto& out = *this; - ReadStateAndMaybeThrow(ABSL_PRETTY_FUNCTION); - return out; - } - - template - bool operator==(const ThrowingAllocator& other) const noexcept { - return dummy_ == other.dummy_; - } - - template - bool operator!=(const ThrowingAllocator& other) const noexcept { - return dummy_ != other.dummy_; - } - - template - friend class ThrowingAllocator; - - private: - static std::string GetInstanceString(int dummy) { - return absl::StrCat("ThrowingAllocator<", - exceptions_internal::GetSpecString(Spec), ">(", dummy, - ")"); - } - - const std::shared_ptr& State() const { return dummy_; } - std::shared_ptr& State() { return dummy_; } - - void ReadState() { - // we know that this will never be true, but the compiler doesn't, so this - // should safely force a read of the value. - if (*dummy_ < 0) std::abort(); - } - - void ReadStateAndMaybeThrow(absl::string_view msg) const { - if (!IsSpecified(AllocSpec::kNoThrowAllocate)) { - exceptions_internal::MaybeThrow( - absl::Substitute("Allocator id $0 threw from $1", *dummy_, msg)); - } - } - - static int next_id_; - std::shared_ptr dummy_; -}; - -template -int ThrowingAllocator::next_id_ = 0; - -// Tests for resource leaks by attempting to construct a T using args repeatedly -// until successful, using the countdown method. Side effects can then be -// tested for resource leaks. -template -void TestThrowingCtor(Args&&... args) { - struct Cleanup { - ~Cleanup() { exceptions_internal::UnsetCountdown(); } - } c; - for (int count = 0;; ++count) { - exceptions_internal::ConstructorTracker ct(count); - exceptions_internal::SetCountdown(count); - try { - T temp(std::forward(args)...); - static_cast(temp); - break; - } catch (const exceptions_internal::TestException&) { - } - } -} - -// Tests the nothrow guarantee of the provided nullary operation. If the an -// exception is thrown, the result will be AssertionFailure(). Otherwise, it -// will be AssertionSuccess(). -template -testing::AssertionResult TestNothrowOp(const Operation& operation) { - struct Cleanup { - Cleanup() { exceptions_internal::SetCountdown(); } - ~Cleanup() { exceptions_internal::UnsetCountdown(); } - } c; - try { - operation(); - return testing::AssertionSuccess(); - } catch (const exceptions_internal::TestException&) { - return testing::AssertionFailure() - << "TestException thrown during call to operation() when nothrow " - "guarantee was expected."; - } catch (...) { - return testing::AssertionFailure() - << "Unknown exception thrown during call to operation() when " - "nothrow guarantee was expected."; - } -} - -namespace exceptions_internal { - -// Dummy struct for ExceptionSafetyTestBuilder<> partial state. -struct UninitializedT {}; - -template -class DefaultFactory { - public: - explicit DefaultFactory(const T& t) : t_(t) {} - std::unique_ptr operator()() const { return absl::make_unique(t_); } - - private: - T t_; -}; - -template -using EnableIfTestable = typename absl::enable_if_t< - LazyContractsCount != 0 && - !std::is_same::value && - !std::is_same::value>; - -template -class ExceptionSafetyTestBuilder; - -} // namespace exceptions_internal - -/* - * Constructs an empty ExceptionSafetyTestBuilder. All - * ExceptionSafetyTestBuilder objects are immutable and all With[thing] mutation - * methods return new instances of ExceptionSafetyTestBuilder. - * - * In order to test a T for exception safety, a factory for that T, a testable - * operation, and at least one contract callback returning an assertion - * result must be applied using the respective methods. - */ -exceptions_internal::ExceptionSafetyTestBuilder<> MakeExceptionSafetyTester(); - -namespace exceptions_internal { -template -struct IsUniquePtr : std::false_type {}; - -template -struct IsUniquePtr> : std::true_type {}; - -template -struct FactoryPtrTypeHelper { - using type = decltype(std::declval()()); - - static_assert(IsUniquePtr::value, "Factories must return a unique_ptr"); -}; - -template -using FactoryPtrType = typename FactoryPtrTypeHelper::type; - -template -using FactoryElementType = typename FactoryPtrType::element_type; - -template -class ExceptionSafetyTest { - using Factory = std::function()>; - using Operation = std::function; - using Contract = std::function; - - public: - template - explicit ExceptionSafetyTest(const Factory& f, const Operation& op, - const Contracts&... contracts) - : factory_(f), operation_(op), contracts_{WrapContract(contracts)...} {} - - AssertionResult Test() const { - for (int count = 0;; ++count) { - exceptions_internal::ConstructorTracker ct(count); - - for (const auto& contract : contracts_) { - auto t_ptr = factory_(); - try { - SetCountdown(count); - operation_(t_ptr.get()); - // Unset for the case that the operation throws no exceptions, which - // would leave the countdown set and break the *next* exception safety - // test after this one. - UnsetCountdown(); - return AssertionSuccess(); - } catch (const exceptions_internal::TestException& e) { - if (!contract(t_ptr.get())) { - return AssertionFailure() << e.what() << " failed contract check"; - } - } - } - } - } - - private: - template - Contract WrapContract(const ContractFn& contract) { - return [contract](T* t_ptr) { return AssertionResult(contract(t_ptr)); }; - } - - Contract WrapContract(StrongGuaranteeTagType) { - return [this](T* t_ptr) { return AssertionResult(*factory_() == *t_ptr); }; - } - - Factory factory_; - Operation operation_; - std::vector contracts_; -}; - -/* - * Builds a tester object that tests if performing a operation on a T follows - * exception safety guarantees. Verification is done via contract assertion - * callbacks applied to T instances post-throw. - * - * Template parameters for ExceptionSafetyTestBuilder: - * - * - Factory: The factory object (passed in via tester.WithFactory(...) or - * tester.WithInitialValue(...)) must be invocable with the signature - * `std::unique_ptr operator()() const` where T is the type being tested. - * It is used for reliably creating identical T instances to test on. - * - * - Operation: The operation object (passsed in via tester.WithOperation(...) - * or tester.Test(...)) must be invocable with the signature - * `void operator()(T*) const` where T is the type being tested. It is used - * for performing steps on a T instance that may throw and that need to be - * checked for exception safety. Each call to the operation will receive a - * fresh T instance so it's free to modify and destroy the T instances as it - * pleases. - * - * - Contracts...: The contract assertion callback objects (passed in via - * tester.WithContracts(...)) must be invocable with the signature - * `testing::AssertionResult operator()(T*) const` where T is the type being - * tested. Contract assertion callbacks are provided T instances post-throw. - * They must return testing::AssertionSuccess when the type contracts of the - * provided T instance hold. If the type contracts of the T instance do not - * hold, they must return testing::AssertionFailure. Execution order of - * Contracts... is unspecified. They will each individually get a fresh T - * instance so they are free to modify and destroy the T instances as they - * please. - */ -template -class ExceptionSafetyTestBuilder { - public: - /* - * Returns a new ExceptionSafetyTestBuilder with an included T factory based - * on the provided T instance. The existing factory will not be included in - * the newly created tester instance. The created factory returns a new T - * instance by copy-constructing the provided const T& t. - * - * Preconditions for tester.WithInitialValue(const T& t): - * - * - The const T& t object must be copy-constructible where T is the type - * being tested. For non-copy-constructible objects, use the method - * tester.WithFactory(...). - */ - template - ExceptionSafetyTestBuilder, Operation, Contracts...> - WithInitialValue(const T& t) const { - return WithFactory(DefaultFactory(t)); - } - - /* - * Returns a new ExceptionSafetyTestBuilder with the provided T factory - * included. The existing factory will not be included in the newly-created - * tester instance. This method is intended for use with types lacking a copy - * constructor. Types that can be copy-constructed should instead use the - * method tester.WithInitialValue(...). - */ - template - ExceptionSafetyTestBuilder, Operation, Contracts...> - WithFactory(const NewFactory& new_factory) const { - return {new_factory, operation_, contracts_}; - } - - /* - * Returns a new ExceptionSafetyTestBuilder with the provided testable - * operation included. The existing operation will not be included in the - * newly created tester. - */ - template - ExceptionSafetyTestBuilder, Contracts...> - WithOperation(const NewOperation& new_operation) const { - return {factory_, new_operation, contracts_}; - } - - /* - * Returns a new ExceptionSafetyTestBuilder with the provided MoreContracts... - * combined with the Contracts... that were already included in the instance - * on which the method was called. Contracts... cannot be removed or replaced - * once added to an ExceptionSafetyTestBuilder instance. A fresh object must - * be created in order to get an empty Contracts... list. - * - * In addition to passing in custom contract assertion callbacks, this method - * accepts `testing::strong_guarantee` as an argument which checks T instances - * post-throw against freshly created T instances via operator== to verify - * that any state changes made during the execution of the operation were - * properly rolled back. - */ - template - ExceptionSafetyTestBuilder...> - WithContracts(const MoreContracts&... more_contracts) const { - return { - factory_, operation_, - std::tuple_cat(contracts_, std::tuple...>( - more_contracts...))}; - } - - /* - * Returns a testing::AssertionResult that is the reduced result of the - * exception safety algorithm. The algorithm short circuits and returns - * AssertionFailure after the first contract callback returns an - * AssertionFailure. Otherwise, if all contract callbacks return an - * AssertionSuccess, the reduced result is AssertionSuccess. - * - * The passed-in testable operation will not be saved in a new tester instance - * nor will it modify/replace the existing tester instance. This is useful - * when each operation being tested is unique and does not need to be reused. - * - * Preconditions for tester.Test(const NewOperation& new_operation): - * - * - May only be called after at least one contract assertion callback and a - * factory or initial value have been provided. - */ - template < - typename NewOperation, - typename = EnableIfTestable> - testing::AssertionResult Test(const NewOperation& new_operation) const { - return TestImpl(new_operation, absl::index_sequence_for()); - } - - /* - * Returns a testing::AssertionResult that is the reduced result of the - * exception safety algorithm. The algorithm short circuits and returns - * AssertionFailure after the first contract callback returns an - * AssertionFailure. Otherwise, if all contract callbacks return an - * AssertionSuccess, the reduced result is AssertionSuccess. - * - * Preconditions for tester.Test(): - * - * - May only be called after at least one contract assertion callback, a - * factory or initial value and a testable operation have been provided. - */ - template < - typename LazyOperation = Operation, - typename = EnableIfTestable> - testing::AssertionResult Test() const { - return Test(operation_); - } - - private: - template - friend class ExceptionSafetyTestBuilder; - - friend ExceptionSafetyTestBuilder<> testing::MakeExceptionSafetyTester(); - - ExceptionSafetyTestBuilder() {} - - ExceptionSafetyTestBuilder(const Factory& f, const Operation& o, - const std::tuple& i) - : factory_(f), operation_(o), contracts_(i) {} - - template - testing::AssertionResult TestImpl(SelectedOperation selected_operation, - absl::index_sequence) const { - return ExceptionSafetyTest>( - factory_, selected_operation, std::get(contracts_)...) - .Test(); - } - - Factory factory_; - Operation operation_; - std::tuple contracts_; -}; - -} // namespace exceptions_internal - -} // namespace testing - -#endif // ABSL_HAVE_EXCEPTIONS - -#endif // ABSL_BASE_INTERNAL_EXCEPTION_SAFETY_TESTING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/exception_testing.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/exception_testing.h deleted file mode 100644 index 01b5465..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/exception_testing.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Testing utilities for ABSL types which throw exceptions. - -#ifndef ABSL_BASE_INTERNAL_EXCEPTION_TESTING_H_ -#define ABSL_BASE_INTERNAL_EXCEPTION_TESTING_H_ - -#include "gtest/gtest.h" -#include "absl/base/config.h" - -// ABSL_BASE_INTERNAL_EXPECT_FAIL tests either for a specified thrown exception -// if exceptions are enabled, or for death with a specified text in the error -// message -#ifdef ABSL_HAVE_EXCEPTIONS - -#define ABSL_BASE_INTERNAL_EXPECT_FAIL(expr, exception_t, text) \ - EXPECT_THROW(expr, exception_t) - -#elif defined(__ANDROID__) -// Android asserts do not log anywhere that gtest can currently inspect. -// So we expect exit, but cannot match the message. -#define ABSL_BASE_INTERNAL_EXPECT_FAIL(expr, exception_t, text) \ - EXPECT_DEATH(expr, ".*") -#else -#define ABSL_BASE_INTERNAL_EXPECT_FAIL(expr, exception_t, text) \ - EXPECT_DEATH_IF_SUPPORTED(expr, text) - -#endif - -#endif // ABSL_BASE_INTERNAL_EXCEPTION_TESTING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/exponential_biased.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/exponential_biased.h deleted file mode 100644 index 94f79a3..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/exponential_biased.h +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_EXPONENTIAL_BIASED_H_ -#define ABSL_BASE_INTERNAL_EXPONENTIAL_BIASED_H_ - -#include - -#include "absl/base/config.h" -#include "absl/base/macros.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// ExponentialBiased provides a small and fast random number generator for a -// rounded exponential distribution. This generator manages very little state, -// and imposes no synchronization overhead. This makes it useful in specialized -// scenarios requiring minimum overhead, such as stride based periodic sampling. -// -// ExponentialBiased provides two closely related functions, GetSkipCount() and -// GetStride(), both returning a rounded integer defining a number of events -// required before some event with a given mean probability occurs. -// -// The distribution is useful to generate a random wait time or some periodic -// event with a given mean probability. For example, if an action is supposed to -// happen on average once every 'N' events, then we can get a random 'stride' -// counting down how long before the event to happen. For example, if we'd want -// to sample one in every 1000 'Frobber' calls, our code could look like this: -// -// Frobber::Frobber() { -// stride_ = exponential_biased_.GetStride(1000); -// } -// -// void Frobber::Frob(int arg) { -// if (--stride == 0) { -// SampleFrob(arg); -// stride_ = exponential_biased_.GetStride(1000); -// } -// ... -// } -// -// The rounding of the return value creates a bias, especially for smaller means -// where the distribution of the fraction is not evenly distributed. We correct -// this bias by tracking the fraction we rounded up or down on each iteration, -// effectively tracking the distance between the cumulative value, and the -// rounded cumulative value. For example, given a mean of 2: -// -// raw = 1.63076, cumulative = 1.63076, rounded = 2, bias = -0.36923 -// raw = 0.14624, cumulative = 1.77701, rounded = 2, bias = 0.14624 -// raw = 4.93194, cumulative = 6.70895, rounded = 7, bias = -0.06805 -// raw = 0.24206, cumulative = 6.95101, rounded = 7, bias = 0.24206 -// etc... -// -// Adjusting with rounding bias is relatively trivial: -// -// double value = bias_ + exponential_distribution(mean)(); -// double rounded_value = std::round(value); -// bias_ = value - rounded_value; -// return rounded_value; -// -// This class is thread-compatible. -class ExponentialBiased { - public: - // The number of bits set by NextRandom. - static constexpr int kPrngNumBits = 48; - - // `GetSkipCount()` returns the number of events to skip before some chosen - // event happens. For example, randomly tossing a coin, we will on average - // throw heads once before we get tails. We can simulate random coin tosses - // using GetSkipCount() as: - // - // ExponentialBiased eb; - // for (...) { - // int number_of_heads_before_tail = eb.GetSkipCount(1); - // for (int flips = 0; flips < number_of_heads_before_tail; ++flips) { - // printf("head..."); - // } - // printf("tail\n"); - // } - // - int64_t GetSkipCount(int64_t mean); - - // GetStride() returns the number of events required for a specific event to - // happen. See the class comments for a usage example. `GetStride()` is - // equivalent to `GetSkipCount(mean - 1) + 1`. When to use `GetStride()` or - // `GetSkipCount()` depends mostly on what best fits the use case. - int64_t GetStride(int64_t mean); - - // Computes a random number in the range [0, 1<<(kPrngNumBits+1) - 1] - // - // This is public to enable testing. - static uint64_t NextRandom(uint64_t rnd); - - private: - void Initialize(); - - uint64_t rng_{0}; - double bias_{0}; - bool initialized_{false}; -}; - -// Returns the next prng value. -// pRNG is: aX+b mod c with a = 0x5DEECE66D, b = 0xB, c = 1<<48 -// This is the lrand64 generator. -inline uint64_t ExponentialBiased::NextRandom(uint64_t rnd) { - const uint64_t prng_mult = uint64_t{0x5DEECE66D}; - const uint64_t prng_add = 0xB; - const uint64_t prng_mod_power = 48; - const uint64_t prng_mod_mask = - ~((~static_cast(0)) << prng_mod_power); - return (prng_mult * rnd + prng_add) & prng_mod_mask; -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_EXPONENTIAL_BIASED_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/fast_type_id.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/fast_type_id.h deleted file mode 100644 index 3db59e8..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/fast_type_id.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Copyright 2020 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ABSL_BASE_INTERNAL_FAST_TYPE_ID_H_ -#define ABSL_BASE_INTERNAL_FAST_TYPE_ID_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -template -struct FastTypeTag { - constexpr static char dummy_var = 0; -}; - -template -constexpr char FastTypeTag::dummy_var; - -// FastTypeId() evaluates at compile/link-time to a unique pointer for the -// passed-in type. These are meant to be good match for keys into maps or -// straight up comparisons. -using FastTypeIdType = const void*; - -template -constexpr inline FastTypeIdType FastTypeId() { - return &FastTypeTag::dummy_var; -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_FAST_TYPE_ID_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/hide_ptr.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/hide_ptr.h deleted file mode 100644 index 1dba809..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/hide_ptr.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_HIDE_PTR_H_ -#define ABSL_BASE_INTERNAL_HIDE_PTR_H_ - -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// Arbitrary value with high bits set. Xor'ing with it is unlikely -// to map one valid pointer to another valid pointer. -constexpr uintptr_t HideMask() { - return (uintptr_t{0xF03A5F7BU} << (sizeof(uintptr_t) - 4) * 8) | 0xF03A5F7BU; -} - -// Hide a pointer from the leak checker. For internal use only. -// Differs from absl::IgnoreLeak(ptr) in that absl::IgnoreLeak(ptr) causes ptr -// and all objects reachable from ptr to be ignored by the leak checker. -template -inline uintptr_t HidePtr(T* ptr) { - return reinterpret_cast(ptr) ^ HideMask(); -} - -// Return a pointer that has been hidden from the leak checker. -// For internal use only. -template -inline T* UnhidePtr(uintptr_t hidden) { - return reinterpret_cast(hidden ^ HideMask()); -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_HIDE_PTR_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/identity.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/identity.h deleted file mode 100644 index a3154ed..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/identity.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ABSL_BASE_INTERNAL_IDENTITY_H_ -#define ABSL_BASE_INTERNAL_IDENTITY_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace internal { - -template -struct identity { - typedef T type; -}; - -template -using identity_t = typename identity::type; - -} // namespace internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_IDENTITY_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/inline_variable.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/inline_variable.h deleted file mode 100644 index 130d8c2..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/inline_variable.h +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_INLINE_VARIABLE_EMULATION_H_ -#define ABSL_BASE_INTERNAL_INLINE_VARIABLE_EMULATION_H_ - -#include - -#include "absl/base/internal/identity.h" - -// File: -// This file define a macro that allows the creation of or emulation of C++17 -// inline variables based on whether or not the feature is supported. - -//////////////////////////////////////////////////////////////////////////////// -// Macro: ABSL_INTERNAL_INLINE_CONSTEXPR(type, name, init) -// -// Description: -// Expands to the equivalent of an inline constexpr instance of the specified -// `type` and `name`, initialized to the value `init`. If the compiler being -// used is detected as supporting actual inline variables as a language -// feature, then the macro expands to an actual inline variable definition. -// -// Requires: -// `type` is a type that is usable in an extern variable declaration. -// -// Requires: `name` is a valid identifier -// -// Requires: -// `init` is an expression that can be used in the following definition: -// constexpr type name = init; -// -// Usage: -// -// // Equivalent to: `inline constexpr size_t variant_npos = -1;` -// ABSL_INTERNAL_INLINE_CONSTEXPR(size_t, variant_npos, -1); -// -// Differences in implementation: -// For a direct, language-level inline variable, decltype(name) will be the -// type that was specified along with const qualification, whereas for -// emulated inline variables, decltype(name) may be different (in practice -// it will likely be a reference type). -//////////////////////////////////////////////////////////////////////////////// - -#ifdef __cpp_inline_variables - -// Clang's -Wmissing-variable-declarations option erroneously warned that -// inline constexpr objects need to be pre-declared. This has now been fixed, -// but we will need to support this workaround for people building with older -// versions of clang. -// -// Bug: https://bugs.llvm.org/show_bug.cgi?id=35862 -// -// Note: -// identity_t is used here so that the const and name are in the -// appropriate place for pointer types, reference types, function pointer -// types, etc.. -#if defined(__clang__) -#define ABSL_INTERNAL_EXTERN_DECL(type, name) \ - extern const ::absl::internal::identity_t name; -#else // Otherwise, just define the macro to do nothing. -#define ABSL_INTERNAL_EXTERN_DECL(type, name) -#endif // defined(__clang__) - -// See above comment at top of file for details. -#define ABSL_INTERNAL_INLINE_CONSTEXPR(type, name, init) \ - ABSL_INTERNAL_EXTERN_DECL(type, name) \ - inline constexpr ::absl::internal::identity_t name = init - -#else - -// See above comment at top of file for details. -// -// Note: -// identity_t is used here so that the const and name are in the -// appropriate place for pointer types, reference types, function pointer -// types, etc.. -#define ABSL_INTERNAL_INLINE_CONSTEXPR(var_type, name, init) \ - template \ - struct AbslInternalInlineVariableHolder##name { \ - static constexpr ::absl::internal::identity_t kInstance = init; \ - }; \ - \ - template \ - constexpr ::absl::internal::identity_t \ - AbslInternalInlineVariableHolder##name::kInstance; \ - \ - static constexpr const ::absl::internal::identity_t& \ - name = /* NOLINT */ \ - AbslInternalInlineVariableHolder##name<>::kInstance; \ - static_assert(sizeof(void (*)(decltype(name))) != 0, \ - "Silence unused variable warnings.") - -#endif // __cpp_inline_variables - -#endif // ABSL_BASE_INTERNAL_INLINE_VARIABLE_EMULATION_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/inline_variable_testing.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/inline_variable_testing.h deleted file mode 100644 index 3856b9f..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/inline_variable_testing.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INLINE_VARIABLE_TESTING_H_ -#define ABSL_BASE_INLINE_VARIABLE_TESTING_H_ - -#include "absl/base/internal/inline_variable.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace inline_variable_testing_internal { - -struct Foo { - int value = 5; -}; - -ABSL_INTERNAL_INLINE_CONSTEXPR(Foo, inline_variable_foo, {}); -ABSL_INTERNAL_INLINE_CONSTEXPR(Foo, other_inline_variable_foo, {}); - -ABSL_INTERNAL_INLINE_CONSTEXPR(int, inline_variable_int, 5); -ABSL_INTERNAL_INLINE_CONSTEXPR(int, other_inline_variable_int, 5); - -ABSL_INTERNAL_INLINE_CONSTEXPR(void(*)(), inline_variable_fun_ptr, nullptr); - -const Foo& get_foo_a(); -const Foo& get_foo_b(); - -const int& get_int_a(); -const int& get_int_b(); - -} // namespace inline_variable_testing_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INLINE_VARIABLE_TESTING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/invoke.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/invoke.h deleted file mode 100644 index 5c71f32..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/invoke.h +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// absl::base_internal::invoke(f, args...) is an implementation of -// INVOKE(f, args...) from section [func.require] of the C++ standard. -// -// [func.require] -// Define INVOKE (f, t1, t2, ..., tN) as follows: -// 1. (t1.*f)(t2, ..., tN) when f is a pointer to a member function of a class T -// and t1 is an object of type T or a reference to an object of type T or a -// reference to an object of a type derived from T; -// 2. ((*t1).*f)(t2, ..., tN) when f is a pointer to a member function of a -// class T and t1 is not one of the types described in the previous item; -// 3. t1.*f when N == 1 and f is a pointer to member data of a class T and t1 is -// an object of type T or a reference to an object of type T or a reference -// to an object of a type derived from T; -// 4. (*t1).*f when N == 1 and f is a pointer to member data of a class T and t1 -// is not one of the types described in the previous item; -// 5. f(t1, t2, ..., tN) in all other cases. -// -// The implementation is SFINAE-friendly: substitution failure within invoke() -// isn't an error. - -#ifndef ABSL_BASE_INTERNAL_INVOKE_H_ -#define ABSL_BASE_INTERNAL_INVOKE_H_ - -#include -#include -#include - -#include "absl/meta/type_traits.h" - -// The following code is internal implementation detail. See the comment at the -// top of this file for the API documentation. - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// The five classes below each implement one of the clauses from the definition -// of INVOKE. The inner class template Accept checks whether the -// clause is applicable; static function template Invoke(f, args...) does the -// invocation. -// -// By separating the clause selection logic from invocation we make sure that -// Invoke() does exactly what the standard says. - -template -struct StrippedAccept { - template - struct Accept : Derived::template AcceptImpl::type>::type...> {}; -}; - -// (t1.*f)(t2, ..., tN) when f is a pointer to a member function of a class T -// and t1 is an object of type T or a reference to an object of type T or a -// reference to an object of a type derived from T. -struct MemFunAndRef : StrippedAccept { - template - struct AcceptImpl : std::false_type {}; - - template - struct AcceptImpl - : std::integral_constant::value && - absl::is_function::value> { - }; - - template - static decltype((std::declval().* - std::declval())(std::declval()...)) - Invoke(MemFun&& mem_fun, Obj&& obj, Args&&... args) { - return (std::forward(obj).* - std::forward(mem_fun))(std::forward(args)...); - } -}; - -// ((*t1).*f)(t2, ..., tN) when f is a pointer to a member function of a -// class T and t1 is not one of the types described in the previous item. -struct MemFunAndPtr : StrippedAccept { - template - struct AcceptImpl : std::false_type {}; - - template - struct AcceptImpl - : std::integral_constant::value && - absl::is_function::value> { - }; - - template - static decltype(((*std::declval()).* - std::declval())(std::declval()...)) - Invoke(MemFun&& mem_fun, Ptr&& ptr, Args&&... args) { - return ((*std::forward(ptr)).* - std::forward(mem_fun))(std::forward(args)...); - } -}; - -// t1.*f when N == 1 and f is a pointer to member data of a class T and t1 is -// an object of type T or a reference to an object of type T or a reference -// to an object of a type derived from T. -struct DataMemAndRef : StrippedAccept { - template - struct AcceptImpl : std::false_type {}; - - template - struct AcceptImpl - : std::integral_constant::value && - !absl::is_function::value> {}; - - template - static decltype(std::declval().*std::declval()) Invoke( - DataMem&& data_mem, Ref&& ref) { - return std::forward(ref).*std::forward(data_mem); - } -}; - -// (*t1).*f when N == 1 and f is a pointer to member data of a class T and t1 -// is not one of the types described in the previous item. -struct DataMemAndPtr : StrippedAccept { - template - struct AcceptImpl : std::false_type {}; - - template - struct AcceptImpl - : std::integral_constant::value && - !absl::is_function::value> {}; - - template - static decltype((*std::declval()).*std::declval()) Invoke( - DataMem&& data_mem, Ptr&& ptr) { - return (*std::forward(ptr)).*std::forward(data_mem); - } -}; - -// f(t1, t2, ..., tN) in all other cases. -struct Callable { - // Callable doesn't have Accept because it's the last clause that gets picked - // when none of the previous clauses are applicable. - template - static decltype(std::declval()(std::declval()...)) Invoke( - F&& f, Args&&... args) { - return std::forward(f)(std::forward(args)...); - } -}; - -// Resolves to the first matching clause. -template -struct Invoker { - typedef typename std::conditional< - MemFunAndRef::Accept::value, MemFunAndRef, - typename std::conditional< - MemFunAndPtr::Accept::value, MemFunAndPtr, - typename std::conditional< - DataMemAndRef::Accept::value, DataMemAndRef, - typename std::conditional::value, - DataMemAndPtr, Callable>::type>::type>:: - type>::type type; -}; - -// The result type of Invoke. -template -using invoke_result_t = decltype(Invoker::type::Invoke( - std::declval(), std::declval()...)); - -// Invoke(f, args...) is an implementation of INVOKE(f, args...) from section -// [func.require] of the C++ standard. -template -invoke_result_t invoke(F&& f, Args&&... args) { - return Invoker::type::Invoke(std::forward(f), - std::forward(args)...); -} -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_INVOKE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/low_level_alloc.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/low_level_alloc.h deleted file mode 100644 index db91951..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/low_level_alloc.h +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ABSL_BASE_INTERNAL_LOW_LEVEL_ALLOC_H_ -#define ABSL_BASE_INTERNAL_LOW_LEVEL_ALLOC_H_ - -// A simple thread-safe memory allocator that does not depend on -// mutexes or thread-specific data. It is intended to be used -// sparingly, and only when malloc() would introduce an unwanted -// dependency, such as inside the heap-checker, or the Mutex -// implementation. - -// IWYU pragma: private, include "base/low_level_alloc.h" - -#include - -#include - -#include "absl/base/attributes.h" -#include "absl/base/config.h" - -// LowLevelAlloc requires that the platform support low-level -// allocation of virtual memory. Platforms lacking this cannot use -// LowLevelAlloc. -#ifdef ABSL_LOW_LEVEL_ALLOC_MISSING -#error ABSL_LOW_LEVEL_ALLOC_MISSING cannot be directly set -#elif !defined(ABSL_HAVE_MMAP) && !defined(_WIN32) -#define ABSL_LOW_LEVEL_ALLOC_MISSING 1 -#endif - -// Using LowLevelAlloc with kAsyncSignalSafe isn't supported on Windows or -// asm.js / WebAssembly. -// See https://kripken.github.io/emscripten-site/docs/porting/pthreads.html -// for more information. -#ifdef ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING -#error ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING cannot be directly set -#elif defined(_WIN32) || defined(__asmjs__) || defined(__wasm__) -#define ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING 1 -#endif - -#include - -#include "absl/base/port.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -class LowLevelAlloc { - public: - struct Arena; // an arena from which memory may be allocated - - // Returns a pointer to a block of at least "request" bytes - // that have been newly allocated from the specific arena. - // for Alloc() call the DefaultArena() is used. - // Returns 0 if passed request==0. - // Does not return 0 under other circumstances; it crashes if memory - // is not available. - static void *Alloc(size_t request) ABSL_ATTRIBUTE_SECTION(malloc_hook); - static void *AllocWithArena(size_t request, Arena *arena) - ABSL_ATTRIBUTE_SECTION(malloc_hook); - - // Deallocates a region of memory that was previously allocated with - // Alloc(). Does nothing if passed 0. "s" must be either 0, - // or must have been returned from a call to Alloc() and not yet passed to - // Free() since that call to Alloc(). The space is returned to the arena - // from which it was allocated. - static void Free(void *s) ABSL_ATTRIBUTE_SECTION(malloc_hook); - - // ABSL_ATTRIBUTE_SECTION(malloc_hook) for Alloc* and Free - // are to put all callers of MallocHook::Invoke* in this module - // into special section, - // so that MallocHook::GetCallerStackTrace can function accurately. - - // Create a new arena. - // The root metadata for the new arena is allocated in the - // meta_data_arena; the DefaultArena() can be passed for meta_data_arena. - // These values may be ored into flags: - enum { - // Report calls to Alloc() and Free() via the MallocHook interface. - // Set in the DefaultArena. - kCallMallocHook = 0x0001, - -#ifndef ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING - // Make calls to Alloc(), Free() be async-signal-safe. Not set in - // DefaultArena(). Not supported on all platforms. - kAsyncSignalSafe = 0x0002, -#endif - }; - // Construct a new arena. The allocation of the underlying metadata honors - // the provided flags. For example, the call NewArena(kAsyncSignalSafe) - // is itself async-signal-safe, as well as generatating an arena that provides - // async-signal-safe Alloc/Free. - static Arena *NewArena(int32_t flags); - - // Destroys an arena allocated by NewArena and returns true, - // provided no allocated blocks remain in the arena. - // If allocated blocks remain in the arena, does nothing and - // returns false. - // It is illegal to attempt to destroy the DefaultArena(). - static bool DeleteArena(Arena *arena); - - // The default arena that always exists. - static Arena *DefaultArena(); - - private: - LowLevelAlloc(); // no instances -}; - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_LOW_LEVEL_ALLOC_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/low_level_scheduling.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/low_level_scheduling.h deleted file mode 100644 index 9baccc0..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/low_level_scheduling.h +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Core interfaces and definitions used by by low-level interfaces such as -// SpinLock. - -#ifndef ABSL_BASE_INTERNAL_LOW_LEVEL_SCHEDULING_H_ -#define ABSL_BASE_INTERNAL_LOW_LEVEL_SCHEDULING_H_ - -#include "absl/base/internal/raw_logging.h" -#include "absl/base/internal/scheduling_mode.h" -#include "absl/base/macros.h" - -// The following two declarations exist so SchedulingGuard may friend them with -// the appropriate language linkage. These callbacks allow libc internals, such -// as function level statics, to schedule cooperatively when locking. -extern "C" bool __google_disable_rescheduling(void); -extern "C" void __google_enable_rescheduling(bool disable_result); - -namespace absl { -ABSL_NAMESPACE_BEGIN -class CondVar; -class Mutex; - -namespace synchronization_internal { -int MutexDelay(int32_t c, int mode); -} // namespace synchronization_internal - -namespace base_internal { - -class SchedulingHelper; // To allow use of SchedulingGuard. -class SpinLock; // To allow use of SchedulingGuard. - -// SchedulingGuard -// Provides guard semantics that may be used to disable cooperative rescheduling -// of the calling thread within specific program blocks. This is used to -// protect resources (e.g. low-level SpinLocks or Domain code) that cooperative -// scheduling depends on. -// -// Domain implementations capable of rescheduling in reaction to involuntary -// kernel thread actions (e.g blocking due to a pagefault or syscall) must -// guarantee that an annotated thread is not allowed to (cooperatively) -// reschedule until the annotated region is complete. -// -// It is an error to attempt to use a cooperatively scheduled resource (e.g. -// Mutex) within a rescheduling-disabled region. -// -// All methods are async-signal safe. -class SchedulingGuard { - public: - // Returns true iff the calling thread may be cooperatively rescheduled. - static bool ReschedulingIsAllowed(); - SchedulingGuard(const SchedulingGuard&) = delete; - SchedulingGuard& operator=(const SchedulingGuard&) = delete; - - private: - // Disable cooperative rescheduling of the calling thread. It may still - // initiate scheduling operations (e.g. wake-ups), however, it may not itself - // reschedule. Nestable. The returned result is opaque, clients should not - // attempt to interpret it. - // REQUIRES: Result must be passed to a pairing EnableScheduling(). - static bool DisableRescheduling(); - - // Marks the end of a rescheduling disabled region, previously started by - // DisableRescheduling(). - // REQUIRES: Pairs with innermost call (and result) of DisableRescheduling(). - static void EnableRescheduling(bool disable_result); - - // A scoped helper for {Disable, Enable}Rescheduling(). - // REQUIRES: destructor must run in same thread as constructor. - struct ScopedDisable { - ScopedDisable() { disabled = SchedulingGuard::DisableRescheduling(); } - ~ScopedDisable() { SchedulingGuard::EnableRescheduling(disabled); } - - bool disabled; - }; - - // A scoped helper to enable rescheduling temporarily. - // REQUIRES: destructor must run in same thread as constructor. - class ScopedEnable { - public: - ScopedEnable(); - ~ScopedEnable(); - - private: - int scheduling_disabled_depth_; - }; - - // Access to SchedulingGuard is explicitly permitted. - friend class absl::CondVar; - friend class absl::Mutex; - friend class SchedulingHelper; - friend class SpinLock; - friend int absl::synchronization_internal::MutexDelay(int32_t c, int mode); -}; - -//------------------------------------------------------------------------------ -// End of public interfaces. -//------------------------------------------------------------------------------ - -inline bool SchedulingGuard::ReschedulingIsAllowed() { - return false; -} - -inline bool SchedulingGuard::DisableRescheduling() { - return false; -} - -inline void SchedulingGuard::EnableRescheduling(bool /* disable_result */) { - return; -} - -inline SchedulingGuard::ScopedEnable::ScopedEnable() - : scheduling_disabled_depth_(0) {} -inline SchedulingGuard::ScopedEnable::~ScopedEnable() { - ABSL_RAW_CHECK(scheduling_disabled_depth_ == 0, "disable unused warning"); -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_LOW_LEVEL_SCHEDULING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/per_thread_tls.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/per_thread_tls.h deleted file mode 100644 index cf5e97a..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/per_thread_tls.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_PER_THREAD_TLS_H_ -#define ABSL_BASE_INTERNAL_PER_THREAD_TLS_H_ - -// This header defines two macros: -// -// If the platform supports thread-local storage: -// -// * ABSL_PER_THREAD_TLS_KEYWORD is the C keyword needed to declare a -// thread-local variable -// * ABSL_PER_THREAD_TLS is 1 -// -// Otherwise: -// -// * ABSL_PER_THREAD_TLS_KEYWORD is empty -// * ABSL_PER_THREAD_TLS is 0 -// -// Microsoft C supports thread-local storage. -// GCC supports it if the appropriate version of glibc is available, -// which the programmer can indicate by defining ABSL_HAVE_TLS - -#include "absl/base/port.h" // For ABSL_HAVE_TLS - -#if defined(ABSL_PER_THREAD_TLS) -#error ABSL_PER_THREAD_TLS cannot be directly set -#elif defined(ABSL_PER_THREAD_TLS_KEYWORD) -#error ABSL_PER_THREAD_TLS_KEYWORD cannot be directly set -#elif defined(ABSL_HAVE_TLS) -#define ABSL_PER_THREAD_TLS_KEYWORD __thread -#define ABSL_PER_THREAD_TLS 1 -#elif defined(_MSC_VER) -#define ABSL_PER_THREAD_TLS_KEYWORD __declspec(thread) -#define ABSL_PER_THREAD_TLS 1 -#else -#define ABSL_PER_THREAD_TLS_KEYWORD -#define ABSL_PER_THREAD_TLS 0 -#endif - -#endif // ABSL_BASE_INTERNAL_PER_THREAD_TLS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/periodic_sampler.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/periodic_sampler.h deleted file mode 100644 index f8a8679..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/periodic_sampler.h +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_PERIODIC_SAMPLER_H_ -#define ABSL_BASE_INTERNAL_PERIODIC_SAMPLER_H_ - -#include - -#include - -#include "absl/base/internal/exponential_biased.h" -#include "absl/base/optimization.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// PeriodicSamplerBase provides the basic period sampler implementation. -// -// This is the base class for the templated PeriodicSampler class, which holds -// a global std::atomic value identified by a user defined tag, such that -// each specific PeriodSampler implementation holds its own global period. -// -// PeriodicSamplerBase is thread-compatible except where stated otherwise. -class PeriodicSamplerBase { - public: - // PeriodicSamplerBase is trivial / copyable / movable / destructible. - PeriodicSamplerBase() = default; - PeriodicSamplerBase(PeriodicSamplerBase&&) = default; - PeriodicSamplerBase(const PeriodicSamplerBase&) = default; - - // Returns true roughly once every `period` calls. This is established by a - // randomly picked `stride` that is counted down on each call to `Sample`. - // This stride is picked such that the probability of `Sample()` returning - // true is 1 in `period`. - inline bool Sample() noexcept; - - // The below methods are intended for optimized use cases where the - // size of the inlined fast path code is highly important. Applications - // should use the `Sample()` method unless they have proof that their - // specific use case requires the optimizations offered by these methods. - // - // An example of such a use case is SwissTable sampling. All sampling checks - // are in inlined SwissTable methods, and the number of call sites is huge. - // In this case, the inlined code size added to each translation unit calling - // SwissTable methods is non-trivial. - // - // The `SubtleMaybeSample()` function spuriously returns true even if the - // function should not be sampled, applications MUST match each call to - // 'SubtleMaybeSample()' returning true with a `SubtleConfirmSample()` call, - // and use the result of the latter as the sampling decision. - // In other words: the code should logically be equivalent to: - // - // if (SubtleMaybeSample() && SubtleConfirmSample()) { - // // Sample this call - // } - // - // In the 'inline-size' optimized case, the `SubtleConfirmSample()` call can - // be placed out of line, for example, the typical use case looks as follows: - // - // // --- frobber.h ----------- - // void FrobberSampled(); - // - // inline void FrobberImpl() { - // // ... - // } - // - // inline void Frobber() { - // if (ABSL_PREDICT_FALSE(sampler.SubtleMaybeSample())) { - // FrobberSampled(); - // } else { - // FrobberImpl(); - // } - // } - // - // // --- frobber.cc ----------- - // void FrobberSampled() { - // if (!sampler.SubtleConfirmSample())) { - // // Spurious false positive - // FrobberImpl(); - // return; - // } - // - // // Sampled execution - // // ... - // } - inline bool SubtleMaybeSample() noexcept; - bool SubtleConfirmSample() noexcept; - - protected: - // We explicitly don't use a virtual destructor as this class is never - // virtually destroyed, and it keeps the class trivial, which avoids TLS - // prologue and epilogue code for our TLS instances. - ~PeriodicSamplerBase() = default; - - // Returns the next stride for our sampler. - // This function is virtual for testing purposes only. - virtual int64_t GetExponentialBiased(int period) noexcept; - - private: - // Returns the current period of this sampler. Thread-safe. - virtual int period() const noexcept = 0; - - // Keep and decrement stride_ as an unsigned integer, but compare the value - // to zero casted as a signed int. clang and msvc do not create optimum code - // if we use signed for the combined decrement and sign comparison. - // - // Below 3 alternative options, all compiles generate the best code - // using the unsigned increment <---> signed int comparison option. - // - // Option 1: - // int64_t stride_; - // if (ABSL_PREDICT_TRUE(++stride_ < 0)) { ... } - // - // GCC x64 (OK) : https://gcc.godbolt.org/z/R5MzzA - // GCC ppc (OK) : https://gcc.godbolt.org/z/z7NZAt - // Clang x64 (BAD): https://gcc.godbolt.org/z/t4gPsd - // ICC x64 (OK) : https://gcc.godbolt.org/z/rE6s8W - // MSVC x64 (OK) : https://gcc.godbolt.org/z/ARMXqS - // - // Option 2: - // int64_t stride_ = 0; - // if (ABSL_PREDICT_TRUE(--stride_ >= 0)) { ... } - // - // GCC x64 (OK) : https://gcc.godbolt.org/z/jSQxYK - // GCC ppc (OK) : https://gcc.godbolt.org/z/VJdYaA - // Clang x64 (BAD): https://gcc.godbolt.org/z/Xm4NjX - // ICC x64 (OK) : https://gcc.godbolt.org/z/4snaFd - // MSVC x64 (BAD): https://gcc.godbolt.org/z/BgnEKE - // - // Option 3: - // uint64_t stride_; - // if (ABSL_PREDICT_TRUE(static_cast(++stride_) < 0)) { ... } - // - // GCC x64 (OK) : https://gcc.godbolt.org/z/bFbfPy - // GCC ppc (OK) : https://gcc.godbolt.org/z/S9KkUE - // Clang x64 (OK) : https://gcc.godbolt.org/z/UYzRb4 - // ICC x64 (OK) : https://gcc.godbolt.org/z/ptTNfD - // MSVC x64 (OK) : https://gcc.godbolt.org/z/76j4-5 - uint64_t stride_ = 0; - ExponentialBiased rng_; -}; - -inline bool PeriodicSamplerBase::SubtleMaybeSample() noexcept { - // See comments on `stride_` for the unsigned increment / signed compare. - if (ABSL_PREDICT_TRUE(static_cast(++stride_) < 0)) { - return false; - } - return true; -} - -inline bool PeriodicSamplerBase::Sample() noexcept { - return ABSL_PREDICT_FALSE(SubtleMaybeSample()) ? SubtleConfirmSample() - : false; -} - -// PeriodicSampler is a concreted periodic sampler implementation. -// The user provided Tag identifies the implementation, and is required to -// isolate the global state of this instance from other instances. -// -// Typical use case: -// -// struct HashTablezTag {}; -// thread_local PeriodicSampler sampler; -// -// void HashTableSamplingLogic(...) { -// if (sampler.Sample()) { -// HashTableSlowSamplePath(...); -// } -// } -// -template -class PeriodicSampler final : public PeriodicSamplerBase { - public: - ~PeriodicSampler() = default; - - int period() const noexcept final { - return period_.load(std::memory_order_relaxed); - } - - // Sets the global period for this sampler. Thread-safe. - // Setting a period of 0 disables the sampler, i.e., every call to Sample() - // will return false. Setting a period of 1 puts the sampler in 'always on' - // mode, i.e., every call to Sample() returns true. - static void SetGlobalPeriod(int period) { - period_.store(period, std::memory_order_relaxed); - } - - private: - static std::atomic period_; -}; - -template -std::atomic PeriodicSampler::period_(default_period); - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_PERIODIC_SAMPLER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/pretty_function.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/pretty_function.h deleted file mode 100644 index 35d5167..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/pretty_function.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_PRETTY_FUNCTION_H_ -#define ABSL_BASE_INTERNAL_PRETTY_FUNCTION_H_ - -// ABSL_PRETTY_FUNCTION -// -// In C++11, __func__ gives the undecorated name of the current function. That -// is, "main", not "int main()". Various compilers give extra macros to get the -// decorated function name, including return type and arguments, to -// differentiate between overload sets. ABSL_PRETTY_FUNCTION is a portable -// version of these macros which forwards to the correct macro on each compiler. -#if defined(_MSC_VER) -#define ABSL_PRETTY_FUNCTION __FUNCSIG__ -#elif defined(__GNUC__) -#define ABSL_PRETTY_FUNCTION __PRETTY_FUNCTION__ -#else -#error "Unsupported compiler" -#endif - -#endif // ABSL_BASE_INTERNAL_PRETTY_FUNCTION_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/raw_logging.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/raw_logging.h deleted file mode 100644 index 2bf7aab..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/raw_logging.h +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Thread-safe logging routines that do not allocate any memory or -// acquire any locks, and can therefore be used by low-level memory -// allocation, synchronization, and signal-handling code. - -#ifndef ABSL_BASE_INTERNAL_RAW_LOGGING_H_ -#define ABSL_BASE_INTERNAL_RAW_LOGGING_H_ - -#include - -#include "absl/base/attributes.h" -#include "absl/base/config.h" -#include "absl/base/internal/atomic_hook.h" -#include "absl/base/log_severity.h" -#include "absl/base/macros.h" -#include "absl/base/optimization.h" -#include "absl/base/port.h" - -// This is similar to LOG(severity) << format..., but -// * it is to be used ONLY by low-level modules that can't use normal LOG() -// * it is designed to be a low-level logger that does not allocate any -// memory and does not need any locks, hence: -// * it logs straight and ONLY to STDERR w/o buffering -// * it uses an explicit printf-format and arguments list -// * it will silently chop off really long message strings -// Usage example: -// ABSL_RAW_LOG(ERROR, "Failed foo with %i: %s", status, error); -// This will print an almost standard log line like this to stderr only: -// E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file - -#define ABSL_RAW_LOG(severity, ...) \ - do { \ - constexpr const char* absl_raw_logging_internal_basename = \ - ::absl::raw_logging_internal::Basename(__FILE__, \ - sizeof(__FILE__) - 1); \ - ::absl::raw_logging_internal::RawLog(ABSL_RAW_LOGGING_INTERNAL_##severity, \ - absl_raw_logging_internal_basename, \ - __LINE__, __VA_ARGS__); \ - } while (0) - -// Similar to CHECK(condition) << message, but for low-level modules: -// we use only ABSL_RAW_LOG that does not allocate memory. -// We do not want to provide args list here to encourage this usage: -// if (!cond) ABSL_RAW_LOG(FATAL, "foo ...", hard_to_compute_args); -// so that the args are not computed when not needed. -#define ABSL_RAW_CHECK(condition, message) \ - do { \ - if (ABSL_PREDICT_FALSE(!(condition))) { \ - ABSL_RAW_LOG(FATAL, "Check %s failed: %s", #condition, message); \ - } \ - } while (0) - -// ABSL_INTERNAL_LOG and ABSL_INTERNAL_CHECK work like the RAW variants above, -// except that if the richer log library is linked into the binary, we dispatch -// to that instead. This is potentially useful for internal logging and -// assertions, where we are using RAW_LOG neither for its async-signal-safety -// nor for its non-allocating nature, but rather because raw logging has very -// few other dependencies. -// -// The API is a subset of the above: each macro only takes two arguments. Use -// StrCat if you need to build a richer message. -#define ABSL_INTERNAL_LOG(severity, message) \ - do { \ - constexpr const char* absl_raw_logging_internal_filename = __FILE__; \ - ::absl::raw_logging_internal::internal_log_function( \ - ABSL_RAW_LOGGING_INTERNAL_##severity, \ - absl_raw_logging_internal_filename, __LINE__, message); \ - if (ABSL_RAW_LOGGING_INTERNAL_##severity == ::absl::LogSeverity::kFatal) \ - ABSL_INTERNAL_UNREACHABLE; \ - } while (0) - -#define ABSL_INTERNAL_CHECK(condition, message) \ - do { \ - if (ABSL_PREDICT_FALSE(!(condition))) { \ - std::string death_message = "Check " #condition " failed: "; \ - death_message += std::string(message); \ - ABSL_INTERNAL_LOG(FATAL, death_message); \ - } \ - } while (0) - -#define ABSL_RAW_LOGGING_INTERNAL_INFO ::absl::LogSeverity::kInfo -#define ABSL_RAW_LOGGING_INTERNAL_WARNING ::absl::LogSeverity::kWarning -#define ABSL_RAW_LOGGING_INTERNAL_ERROR ::absl::LogSeverity::kError -#define ABSL_RAW_LOGGING_INTERNAL_FATAL ::absl::LogSeverity::kFatal -#define ABSL_RAW_LOGGING_INTERNAL_LEVEL(severity) \ - ::absl::NormalizeLogSeverity(severity) - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace raw_logging_internal { - -// Helper function to implement ABSL_RAW_LOG -// Logs format... at "severity" level, reporting it -// as called from file:line. -// This does not allocate memory or acquire locks. -void RawLog(absl::LogSeverity severity, const char* file, int line, - const char* format, ...) ABSL_PRINTF_ATTRIBUTE(4, 5); - -// Writes the provided buffer directly to stderr, in a safe, low-level manner. -// -// In POSIX this means calling write(), which is async-signal safe and does -// not malloc. If the platform supports the SYS_write syscall, we invoke that -// directly to side-step any libc interception. -void SafeWriteToStderr(const char *s, size_t len); - -// compile-time function to get the "base" filename, that is, the part of -// a filename after the last "/" or "\" path separator. The search starts at -// the end of the string; the second parameter is the length of the string. -constexpr const char* Basename(const char* fname, int offset) { - return offset == 0 || fname[offset - 1] == '/' || fname[offset - 1] == '\\' - ? fname + offset - : Basename(fname, offset - 1); -} - -// For testing only. -// Returns true if raw logging is fully supported. When it is not -// fully supported, no messages will be emitted, but a log at FATAL -// severity will cause an abort. -// -// TODO(gfalcon): Come up with a better name for this method. -bool RawLoggingFullySupported(); - -// Function type for a raw_logging customization hook for suppressing messages -// by severity, and for writing custom prefixes on non-suppressed messages. -// -// The installed hook is called for every raw log invocation. The message will -// be logged to stderr only if the hook returns true. FATAL errors will cause -// the process to abort, even if writing to stderr is suppressed. The hook is -// also provided with an output buffer, where it can write a custom log message -// prefix. -// -// The raw_logging system does not allocate memory or grab locks. User-provided -// hooks must avoid these operations, and must not throw exceptions. -// -// 'severity' is the severity level of the message being written. -// 'file' and 'line' are the file and line number where the ABSL_RAW_LOG macro -// was located. -// 'buffer' and 'buf_size' are pointers to the buffer and buffer size. If the -// hook writes a prefix, it must increment *buffer and decrement *buf_size -// accordingly. -using LogPrefixHook = bool (*)(absl::LogSeverity severity, const char* file, - int line, char** buffer, int* buf_size); - -// Function type for a raw_logging customization hook called to abort a process -// when a FATAL message is logged. If the provided AbortHook() returns, the -// logging system will call abort(). -// -// 'file' and 'line' are the file and line number where the ABSL_RAW_LOG macro -// was located. -// The NUL-terminated logged message lives in the buffer between 'buf_start' -// and 'buf_end'. 'prefix_end' points to the first non-prefix character of the -// buffer (as written by the LogPrefixHook.) -using AbortHook = void (*)(const char* file, int line, const char* buf_start, - const char* prefix_end, const char* buf_end); - -// Internal logging function for ABSL_INTERNAL_LOG to dispatch to. -// -// TODO(gfalcon): When string_view no longer depends on base, change this -// interface to take its message as a string_view instead. -using InternalLogFunction = void (*)(absl::LogSeverity severity, - const char* file, int line, - const std::string& message); - -ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES ABSL_DLL extern base_internal::AtomicHook< - InternalLogFunction> - internal_log_function; - -// Registers hooks of the above types. Only a single hook of each type may be -// registered. It is an error to call these functions multiple times with -// different input arguments. -// -// These functions are safe to call at any point during initialization; they do -// not block or malloc, and are async-signal safe. -void RegisterLogPrefixHook(LogPrefixHook func); -void RegisterAbortHook(AbortHook func); -void RegisterInternalLogFunction(InternalLogFunction func); - -} // namespace raw_logging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_RAW_LOGGING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/scheduling_mode.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/scheduling_mode.h deleted file mode 100644 index 8be5ab6..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/scheduling_mode.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Core interfaces and definitions used by by low-level interfaces such as -// SpinLock. - -#ifndef ABSL_BASE_INTERNAL_SCHEDULING_MODE_H_ -#define ABSL_BASE_INTERNAL_SCHEDULING_MODE_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// Used to describe how a thread may be scheduled. Typically associated with -// the declaration of a resource supporting synchronized access. -// -// SCHEDULE_COOPERATIVE_AND_KERNEL: -// Specifies that when waiting, a cooperative thread (e.g. a Fiber) may -// reschedule (using base::scheduling semantics); allowing other cooperative -// threads to proceed. -// -// SCHEDULE_KERNEL_ONLY: (Also described as "non-cooperative") -// Specifies that no cooperative scheduling semantics may be used, even if the -// current thread is itself cooperatively scheduled. This means that -// cooperative threads will NOT allow other cooperative threads to execute in -// their place while waiting for a resource of this type. Host operating system -// semantics (e.g. a futex) may still be used. -// -// When optional, clients should strongly prefer SCHEDULE_COOPERATIVE_AND_KERNEL -// by default. SCHEDULE_KERNEL_ONLY should only be used for resources on which -// base::scheduling (e.g. the implementation of a Scheduler) may depend. -// -// NOTE: Cooperative resources may not be nested below non-cooperative ones. -// This means that it is invalid to to acquire a SCHEDULE_COOPERATIVE_AND_KERNEL -// resource if a SCHEDULE_KERNEL_ONLY resource is already held. -enum SchedulingMode { - SCHEDULE_KERNEL_ONLY = 0, // Allow scheduling only the host OS. - SCHEDULE_COOPERATIVE_AND_KERNEL, // Also allow cooperative scheduling. -}; - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_SCHEDULING_MODE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/scoped_set_env.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/scoped_set_env.h deleted file mode 100644 index 19ec7b5..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/scoped_set_env.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ABSL_BASE_INTERNAL_SCOPED_SET_ENV_H_ -#define ABSL_BASE_INTERNAL_SCOPED_SET_ENV_H_ - -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -class ScopedSetEnv { - public: - ScopedSetEnv(const char* var_name, const char* new_value); - ~ScopedSetEnv(); - - private: - std::string var_name_; - std::string old_value_; - - // True if the environment variable was initially not set. - bool was_unset_; -}; - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_SCOPED_SET_ENV_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock.h deleted file mode 100644 index c73b5e0..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock.h +++ /dev/null @@ -1,246 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// Most users requiring mutual exclusion should use Mutex. -// SpinLock is provided for use in two situations: -// - for use in code that Mutex itself depends on -// - for async signal safety (see below) - -// SpinLock is async signal safe. If a spinlock is used within a signal -// handler, all code that acquires the lock must ensure that the signal cannot -// arrive while they are holding the lock. Typically, this is done by blocking -// the signal. - -#ifndef ABSL_BASE_INTERNAL_SPINLOCK_H_ -#define ABSL_BASE_INTERNAL_SPINLOCK_H_ - -#include -#include - -#include - -#include "absl/base/attributes.h" -#include "absl/base/const_init.h" -#include "absl/base/dynamic_annotations.h" -#include "absl/base/internal/low_level_scheduling.h" -#include "absl/base/internal/raw_logging.h" -#include "absl/base/internal/scheduling_mode.h" -#include "absl/base/internal/tsan_mutex_interface.h" -#include "absl/base/macros.h" -#include "absl/base/port.h" -#include "absl/base/thread_annotations.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -class ABSL_LOCKABLE SpinLock { - public: - SpinLock() : lockword_(kSpinLockCooperative) { - ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static); - } - - // Constructors that allow non-cooperative spinlocks to be created for use - // inside thread schedulers. Normal clients should not use these. - explicit SpinLock(base_internal::SchedulingMode mode); - - // Constructor for global SpinLock instances. See absl/base/const_init.h. - constexpr SpinLock(absl::ConstInitType, base_internal::SchedulingMode mode) - : lockword_(IsCooperative(mode) ? kSpinLockCooperative : 0) {} - - // For global SpinLock instances prefer trivial destructor when possible. - // Default but non-trivial destructor in some build configurations causes an - // extra static initializer. -#ifdef ABSL_INTERNAL_HAVE_TSAN_INTERFACE - ~SpinLock() { ABSL_TSAN_MUTEX_DESTROY(this, __tsan_mutex_not_static); } -#else - ~SpinLock() = default; -#endif - - // Acquire this SpinLock. - inline void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { - ABSL_TSAN_MUTEX_PRE_LOCK(this, 0); - if (!TryLockImpl()) { - SlowLock(); - } - ABSL_TSAN_MUTEX_POST_LOCK(this, 0, 0); - } - - // Try to acquire this SpinLock without blocking and return true if the - // acquisition was successful. If the lock was not acquired, false is - // returned. If this SpinLock is free at the time of the call, TryLock - // will return true with high probability. - inline bool TryLock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) { - ABSL_TSAN_MUTEX_PRE_LOCK(this, __tsan_mutex_try_lock); - bool res = TryLockImpl(); - ABSL_TSAN_MUTEX_POST_LOCK( - this, __tsan_mutex_try_lock | (res ? 0 : __tsan_mutex_try_lock_failed), - 0); - return res; - } - - // Release this SpinLock, which must be held by the calling thread. - inline void Unlock() ABSL_UNLOCK_FUNCTION() { - ABSL_TSAN_MUTEX_PRE_UNLOCK(this, 0); - uint32_t lock_value = lockword_.load(std::memory_order_relaxed); - lock_value = lockword_.exchange(lock_value & kSpinLockCooperative, - std::memory_order_release); - - if ((lock_value & kSpinLockDisabledScheduling) != 0) { - base_internal::SchedulingGuard::EnableRescheduling(true); - } - if ((lock_value & kWaitTimeMask) != 0) { - // Collect contentionz profile info, and speed the wakeup of any waiter. - // The wait_cycles value indicates how long this thread spent waiting - // for the lock. - SlowUnlock(lock_value); - } - ABSL_TSAN_MUTEX_POST_UNLOCK(this, 0); - } - - // Determine if the lock is held. When the lock is held by the invoking - // thread, true will always be returned. Intended to be used as - // CHECK(lock.IsHeld()). - inline bool IsHeld() const { - return (lockword_.load(std::memory_order_relaxed) & kSpinLockHeld) != 0; - } - - protected: - // These should not be exported except for testing. - - // Store number of cycles between wait_start_time and wait_end_time in a - // lock value. - static uint32_t EncodeWaitCycles(int64_t wait_start_time, - int64_t wait_end_time); - - // Extract number of wait cycles in a lock value. - static uint64_t DecodeWaitCycles(uint32_t lock_value); - - // Provide access to protected method above. Use for testing only. - friend struct SpinLockTest; - - private: - // lockword_ is used to store the following: - // - // bit[0] encodes whether a lock is being held. - // bit[1] encodes whether a lock uses cooperative scheduling. - // bit[2] encodes whether the current lock holder disabled scheduling when - // acquiring the lock. Only set when kSpinLockHeld is also set. - // bit[3:31] encodes time a lock spent on waiting as a 29-bit unsigned int. - // This is set by the lock holder to indicate how long it waited on - // the lock before eventually acquiring it. The number of cycles is - // encoded as a 29-bit unsigned int, or in the case that the current - // holder did not wait but another waiter is queued, the LSB - // (kSpinLockSleeper) is set. The implementation does not explicitly - // track the number of queued waiters beyond this. It must always be - // assumed that waiters may exist if the current holder was required to - // queue. - // - // Invariant: if the lock is not held, the value is either 0 or - // kSpinLockCooperative. - static constexpr uint32_t kSpinLockHeld = 1; - static constexpr uint32_t kSpinLockCooperative = 2; - static constexpr uint32_t kSpinLockDisabledScheduling = 4; - static constexpr uint32_t kSpinLockSleeper = 8; - // Includes kSpinLockSleeper. - static constexpr uint32_t kWaitTimeMask = - ~(kSpinLockHeld | kSpinLockCooperative | kSpinLockDisabledScheduling); - - // Returns true if the provided scheduling mode is cooperative. - static constexpr bool IsCooperative( - base_internal::SchedulingMode scheduling_mode) { - return scheduling_mode == base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL; - } - - uint32_t TryLockInternal(uint32_t lock_value, uint32_t wait_cycles); - void SlowLock() ABSL_ATTRIBUTE_COLD; - void SlowUnlock(uint32_t lock_value) ABSL_ATTRIBUTE_COLD; - uint32_t SpinLoop(); - - inline bool TryLockImpl() { - uint32_t lock_value = lockword_.load(std::memory_order_relaxed); - return (TryLockInternal(lock_value, 0) & kSpinLockHeld) == 0; - } - - std::atomic lockword_; - - SpinLock(const SpinLock&) = delete; - SpinLock& operator=(const SpinLock&) = delete; -}; - -// Corresponding locker object that arranges to acquire a spinlock for -// the duration of a C++ scope. -class ABSL_SCOPED_LOCKABLE SpinLockHolder { - public: - inline explicit SpinLockHolder(SpinLock* l) ABSL_EXCLUSIVE_LOCK_FUNCTION(l) - : lock_(l) { - l->Lock(); - } - inline ~SpinLockHolder() ABSL_UNLOCK_FUNCTION() { lock_->Unlock(); } - - SpinLockHolder(const SpinLockHolder&) = delete; - SpinLockHolder& operator=(const SpinLockHolder&) = delete; - - private: - SpinLock* lock_; -}; - -// Register a hook for profiling support. -// -// The function pointer registered here will be called whenever a spinlock is -// contended. The callback is given an opaque handle to the contended spinlock -// and the number of wait cycles. This is thread-safe, but only a single -// profiler can be registered. It is an error to call this function multiple -// times with different arguments. -void RegisterSpinLockProfiler(void (*fn)(const void* lock, - int64_t wait_cycles)); - -//------------------------------------------------------------------------------ -// Public interface ends here. -//------------------------------------------------------------------------------ - -// If (result & kSpinLockHeld) == 0, then *this was successfully locked. -// Otherwise, returns last observed value for lockword_. -inline uint32_t SpinLock::TryLockInternal(uint32_t lock_value, - uint32_t wait_cycles) { - if ((lock_value & kSpinLockHeld) != 0) { - return lock_value; - } - - uint32_t sched_disabled_bit = 0; - if ((lock_value & kSpinLockCooperative) == 0) { - // For non-cooperative locks we must make sure we mark ourselves as - // non-reschedulable before we attempt to CompareAndSwap. - if (base_internal::SchedulingGuard::DisableRescheduling()) { - sched_disabled_bit = kSpinLockDisabledScheduling; - } - } - - if (!lockword_.compare_exchange_strong( - lock_value, - kSpinLockHeld | lock_value | wait_cycles | sched_disabled_bit, - std::memory_order_acquire, std::memory_order_relaxed)) { - base_internal::SchedulingGuard::EnableRescheduling(sched_disabled_bit != 0); - } - - return lock_value; -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_SPINLOCK_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_akaros.inc b/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_akaros.inc deleted file mode 100644 index 7b0cada..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_akaros.inc +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This file is an Akaros-specific part of spinlock_wait.cc - -#include - -#include "absl/base/internal/scheduling_mode.h" - -extern "C" { - -ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)( - std::atomic* /* lock_word */, uint32_t /* value */, - int /* loop */, absl::base_internal::SchedulingMode /* mode */) { - // In Akaros, one must take care not to call anything that could cause a - // malloc(), a blocking system call, or a uthread_yield() while holding a - // spinlock. Our callers assume will not call into libraries or other - // arbitrary code. -} - -ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)( - std::atomic* /* lock_word */, bool /* all */) {} - -} // extern "C" diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_linux.inc b/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_linux.inc deleted file mode 100644 index 202f7cd..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_linux.inc +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This file is a Linux-specific part of spinlock_wait.cc - -#include -#include -#include - -#include -#include -#include -#include - -#include "absl/base/attributes.h" -#include "absl/base/internal/errno_saver.h" - -// The SpinLock lockword is `std::atomic`. Here we assert that -// `std::atomic` is bitwise equivalent of the `int` expected -// by SYS_futex. We also assume that reads/writes done to the lockword -// by SYS_futex have rational semantics with regard to the -// std::atomic<> API. C++ provides no guarantees of these assumptions, -// but they are believed to hold in practice. -static_assert(sizeof(std::atomic) == sizeof(int), - "SpinLock lockword has the wrong size for a futex"); - -// Some Android headers are missing these definitions even though they -// support these futex operations. -#ifdef __BIONIC__ -#ifndef SYS_futex -#define SYS_futex __NR_futex -#endif -#ifndef FUTEX_PRIVATE_FLAG -#define FUTEX_PRIVATE_FLAG 128 -#endif -#endif - -#if defined(__NR_futex_time64) && !defined(SYS_futex_time64) -#define SYS_futex_time64 __NR_futex_time64 -#endif - -#if defined(SYS_futex_time64) && !defined(SYS_futex) -#define SYS_futex SYS_futex_time64 -#endif - -extern "C" { - -ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)( - std::atomic *w, uint32_t value, int loop, - absl::base_internal::SchedulingMode) { - absl::base_internal::ErrnoSaver errno_saver; - struct timespec tm; - tm.tv_sec = 0; - tm.tv_nsec = absl::base_internal::SpinLockSuggestedDelayNS(loop); - syscall(SYS_futex, w, FUTEX_WAIT | FUTEX_PRIVATE_FLAG, value, &tm); -} - -ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)( - std::atomic *w, bool all) { - syscall(SYS_futex, w, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, all ? INT_MAX : 1, 0); -} - -} // extern "C" diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_posix.inc b/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_posix.inc deleted file mode 100644 index 4f6f887..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_posix.inc +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This file is a Posix-specific part of spinlock_wait.cc - -#include - -#include -#include - -#include "absl/base/internal/errno_saver.h" -#include "absl/base/internal/scheduling_mode.h" -#include "absl/base/port.h" - -extern "C" { - -ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)( - std::atomic* /* lock_word */, uint32_t /* value */, int loop, - absl::base_internal::SchedulingMode /* mode */) { - absl::base_internal::ErrnoSaver errno_saver; - if (loop == 0) { - } else if (loop == 1) { - sched_yield(); - } else { - struct timespec tm; - tm.tv_sec = 0; - tm.tv_nsec = absl::base_internal::SpinLockSuggestedDelayNS(loop); - nanosleep(&tm, nullptr); - } -} - -ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)( - std::atomic* /* lock_word */, bool /* all */) {} - -} // extern "C" diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_wait.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_wait.h deleted file mode 100644 index 579bd09..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_wait.h +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_SPINLOCK_WAIT_H_ -#define ABSL_BASE_INTERNAL_SPINLOCK_WAIT_H_ - -// Operations to make atomic transitions on a word, and to allow -// waiting for those transitions to become possible. - -#include -#include - -#include "absl/base/internal/scheduling_mode.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// SpinLockWait() waits until it can perform one of several transitions from -// "from" to "to". It returns when it performs a transition where done==true. -struct SpinLockWaitTransition { - uint32_t from; - uint32_t to; - bool done; -}; - -// Wait until *w can transition from trans[i].from to trans[i].to for some i -// satisfying 0<=i *w, int n, - const SpinLockWaitTransition trans[], - SchedulingMode scheduling_mode); - -// If possible, wake some thread that has called SpinLockDelay(w, ...). If `all` -// is true, wake all such threads. On some systems, this may be a no-op; on -// those systems, threads calling SpinLockDelay() will always wake eventually -// even if SpinLockWake() is never called. -void SpinLockWake(std::atomic *w, bool all); - -// Wait for an appropriate spin delay on iteration "loop" of a -// spin loop on location *w, whose previously observed value was "value". -// SpinLockDelay() may do nothing, may yield the CPU, may sleep a clock tick, -// or may wait for a call to SpinLockWake(w). -void SpinLockDelay(std::atomic *w, uint32_t value, int loop, - base_internal::SchedulingMode scheduling_mode); - -// Helper used by AbslInternalSpinLockDelay. -// Returns a suggested delay in nanoseconds for iteration number "loop". -int SpinLockSuggestedDelayNS(int loop); - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -// In some build configurations we pass --detect-odr-violations to the -// gold linker. This causes it to flag weak symbol overrides as ODR -// violations. Because ODR only applies to C++ and not C, -// --detect-odr-violations ignores symbols not mangled with C++ names. -// By changing our extension points to be extern "C", we dodge this -// check. -extern "C" { -void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(std::atomic *w, - bool all); -void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)( - std::atomic *w, uint32_t value, int loop, - absl::base_internal::SchedulingMode scheduling_mode); -} - -inline void absl::base_internal::SpinLockWake(std::atomic *w, - bool all) { - ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(w, all); -} - -inline void absl::base_internal::SpinLockDelay( - std::atomic *w, uint32_t value, int loop, - absl::base_internal::SchedulingMode scheduling_mode) { - ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay) - (w, value, loop, scheduling_mode); -} - -#endif // ABSL_BASE_INTERNAL_SPINLOCK_WAIT_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_win32.inc b/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_win32.inc deleted file mode 100644 index 9d22481..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/spinlock_win32.inc +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This file is a Win32-specific part of spinlock_wait.cc - -#include -#include -#include "absl/base/internal/scheduling_mode.h" - -extern "C" { - -void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)( - std::atomic* /* lock_word */, uint32_t /* value */, int loop, - absl::base_internal::SchedulingMode /* mode */) { - if (loop == 0) { - } else if (loop == 1) { - Sleep(0); - } else { - Sleep(absl::base_internal::SpinLockSuggestedDelayNS(loop) / 1000000); - } -} - -void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)( - std::atomic* /* lock_word */, bool /* all */) {} - -} // extern "C" diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/strerror.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/strerror.h deleted file mode 100644 index 3500973..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/strerror.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2020 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_STRERROR_H_ -#define ABSL_BASE_INTERNAL_STRERROR_H_ - -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// A portable and thread-safe alternative to C89's `strerror`. -// -// The C89 specification of `strerror` is not suitable for use in a -// multi-threaded application as the returned string may be changed by calls to -// `strerror` from another thread. The many non-stdlib alternatives differ -// enough in their names, availability, and semantics to justify this wrapper -// around them. `errno` will not be modified by a call to `absl::StrError`. -std::string StrError(int errnum); - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_STRERROR_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/sysinfo.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/sysinfo.h deleted file mode 100644 index 119cf1f..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/sysinfo.h +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This file includes routines to find out characteristics -// of the machine a program is running on. It is undoubtedly -// system-dependent. - -// Functions listed here that accept a pid_t as an argument act on the -// current process if the pid_t argument is 0 -// All functions here are thread-hostile due to file caching unless -// commented otherwise. - -#ifndef ABSL_BASE_INTERNAL_SYSINFO_H_ -#define ABSL_BASE_INTERNAL_SYSINFO_H_ - -#ifndef _WIN32 -#include -#endif - -#include - -#include "absl/base/config.h" -#include "absl/base/port.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// Nominal core processor cycles per second of each processor. This is _not_ -// necessarily the frequency of the CycleClock counter (see cycleclock.h) -// Thread-safe. -double NominalCPUFrequency(); - -// Number of logical processors (hyperthreads) in system. Thread-safe. -int NumCPUs(); - -// Return the thread id of the current thread, as told by the system. -// No two currently-live threads implemented by the OS shall have the same ID. -// Thread ids of exited threads may be reused. Multiple user-level threads -// may have the same thread ID if multiplexed on the same OS thread. -// -// On Linux, you may send a signal to the resulting ID with kill(). However, -// it is recommended for portability that you use pthread_kill() instead. -#ifdef _WIN32 -// On Windows, process id and thread id are of the same type according to the -// return types of GetProcessId() and GetThreadId() are both DWORD, an unsigned -// 32-bit type. -using pid_t = uint32_t; -#endif -pid_t GetTID(); - -// Like GetTID(), but caches the result in thread-local storage in order -// to avoid unnecessary system calls. Note that there are some cases where -// one must call through to GetTID directly, which is why this exists as a -// separate function. For example, GetCachedTID() is not safe to call in -// an asynchronous signal-handling context nor right after a call to fork(). -pid_t GetCachedTID(); - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_SYSINFO_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/thread_identity.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/thread_identity.h deleted file mode 100644 index 9ee651a..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/thread_identity.h +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Each active thread has an ThreadIdentity that may represent the thread in -// various level interfaces. ThreadIdentity objects are never deallocated. -// When a thread terminates, its ThreadIdentity object may be reused for a -// thread created later. - -#ifndef ABSL_BASE_INTERNAL_THREAD_IDENTITY_H_ -#define ABSL_BASE_INTERNAL_THREAD_IDENTITY_H_ - -#ifndef _WIN32 -#include -// Defines __GOOGLE_GRTE_VERSION__ (via glibc-specific features.h) when -// supported. -#include -#endif - -#include -#include - -#include "absl/base/config.h" -#include "absl/base/internal/per_thread_tls.h" -#include "absl/base/optimization.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -struct SynchLocksHeld; -struct SynchWaitParams; - -namespace base_internal { - -class SpinLock; -struct ThreadIdentity; - -// Used by the implementation of absl::Mutex and absl::CondVar. -struct PerThreadSynch { - // The internal representation of absl::Mutex and absl::CondVar rely - // on the alignment of PerThreadSynch. Both store the address of the - // PerThreadSynch in the high-order bits of their internal state, - // which means the low kLowZeroBits of the address of PerThreadSynch - // must be zero. - static constexpr int kLowZeroBits = 8; - static constexpr int kAlignment = 1 << kLowZeroBits; - - // Returns the associated ThreadIdentity. - // This can be implemented as a cast because we guarantee - // PerThreadSynch is the first element of ThreadIdentity. - ThreadIdentity* thread_identity() { - return reinterpret_cast(this); - } - - PerThreadSynch *next; // Circular waiter queue; initialized to 0. - PerThreadSynch *skip; // If non-zero, all entries in Mutex queue - // up to and including "skip" have same - // condition as this, and will be woken later - bool may_skip; // if false while on mutex queue, a mutex unlocker - // is using this PerThreadSynch as a terminator. Its - // skip field must not be filled in because the loop - // might then skip over the terminator. - bool wake; // This thread is to be woken from a Mutex. - // If "x" is on a waiter list for a mutex, "x->cond_waiter" is true iff the - // waiter is waiting on the mutex as part of a CV Wait or Mutex Await. - // - // The value of "x->cond_waiter" is meaningless if "x" is not on a - // Mutex waiter list. - bool cond_waiter; - bool maybe_unlocking; // Valid at head of Mutex waiter queue; - // true if UnlockSlow could be searching - // for a waiter to wake. Used for an optimization - // in Enqueue(). true is always a valid value. - // Can be reset to false when the unlocker or any - // writer releases the lock, or a reader fully - // releases the lock. It may not be set to false - // by a reader that decrements the count to - // non-zero. protected by mutex spinlock - bool suppress_fatal_errors; // If true, try to proceed even in the face - // of broken invariants. This is used within - // fatal signal handlers to improve the - // chances of debug logging information being - // output successfully. - int priority; // Priority of thread (updated every so often). - - // State values: - // kAvailable: This PerThreadSynch is available. - // kQueued: This PerThreadSynch is unavailable, it's currently queued on a - // Mutex or CondVar waistlist. - // - // Transitions from kQueued to kAvailable require a release - // barrier. This is needed as a waiter may use "state" to - // independently observe that it's no longer queued. - // - // Transitions from kAvailable to kQueued require no barrier, they - // are externally ordered by the Mutex. - enum State { - kAvailable, - kQueued - }; - std::atomic state; - - // The wait parameters of the current wait. waitp is null if the - // thread is not waiting. Transitions from null to non-null must - // occur before the enqueue commit point (state = kQueued in - // Enqueue() and CondVarEnqueue()). Transitions from non-null to - // null must occur after the wait is finished (state = kAvailable in - // Mutex::Block() and CondVar::WaitCommon()). This field may be - // changed only by the thread that describes this PerThreadSynch. A - // special case is Fer(), which calls Enqueue() on another thread, - // but with an identical SynchWaitParams pointer, thus leaving the - // pointer unchanged. - SynchWaitParams* waitp; - - intptr_t readers; // Number of readers in mutex. - - // When priority will next be read (cycles). - int64_t next_priority_read_cycles; - - // Locks held; used during deadlock detection. - // Allocated in Synch_GetAllLocks() and freed in ReclaimThreadIdentity(). - SynchLocksHeld *all_locks; -}; - -// The instances of this class are allocated in NewThreadIdentity() with an -// alignment of PerThreadSynch::kAlignment. -struct ThreadIdentity { - // Must be the first member. The Mutex implementation requires that - // the PerThreadSynch object associated with each thread is - // PerThreadSynch::kAlignment aligned. We provide this alignment on - // ThreadIdentity itself. - PerThreadSynch per_thread_synch; - - // Private: Reserved for absl::synchronization_internal::Waiter. - struct WaiterState { - alignas(void*) char data[128]; - } waiter_state; - - // Used by PerThreadSem::{Get,Set}ThreadBlockedCounter(). - std::atomic* blocked_count_ptr; - - // The following variables are mostly read/written just by the - // thread itself. The only exception is that these are read by - // a ticker thread as a hint. - std::atomic ticker; // Tick counter, incremented once per second. - std::atomic wait_start; // Ticker value when thread started waiting. - std::atomic is_idle; // Has thread become idle yet? - - ThreadIdentity* next; -}; - -// Returns the ThreadIdentity object representing the calling thread; guaranteed -// to be unique for its lifetime. The returned object will remain valid for the -// program's lifetime; although it may be re-assigned to a subsequent thread. -// If one does not exist, return nullptr instead. -// -// Does not malloc(*), and is async-signal safe. -// [*] Technically pthread_setspecific() does malloc on first use; however this -// is handled internally within tcmalloc's initialization already. -// -// New ThreadIdentity objects can be constructed and associated with a thread -// by calling GetOrCreateCurrentThreadIdentity() in per-thread-sem.h. -ThreadIdentity* CurrentThreadIdentityIfPresent(); - -using ThreadIdentityReclaimerFunction = void (*)(void*); - -// Sets the current thread identity to the given value. 'reclaimer' is a -// pointer to the global function for cleaning up instances on thread -// destruction. -void SetCurrentThreadIdentity(ThreadIdentity* identity, - ThreadIdentityReclaimerFunction reclaimer); - -// Removes the currently associated ThreadIdentity from the running thread. -// This must be called from inside the ThreadIdentityReclaimerFunction, and only -// from that function. -void ClearCurrentThreadIdentity(); - -// May be chosen at compile time via: -DABSL_FORCE_THREAD_IDENTITY_MODE= -#ifdef ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC -#error ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC cannot be direcly set -#else -#define ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC 0 -#endif - -#ifdef ABSL_THREAD_IDENTITY_MODE_USE_TLS -#error ABSL_THREAD_IDENTITY_MODE_USE_TLS cannot be direcly set -#else -#define ABSL_THREAD_IDENTITY_MODE_USE_TLS 1 -#endif - -#ifdef ABSL_THREAD_IDENTITY_MODE_USE_CPP11 -#error ABSL_THREAD_IDENTITY_MODE_USE_CPP11 cannot be direcly set -#else -#define ABSL_THREAD_IDENTITY_MODE_USE_CPP11 2 -#endif - -#ifdef ABSL_THREAD_IDENTITY_MODE -#error ABSL_THREAD_IDENTITY_MODE cannot be direcly set -#elif defined(ABSL_FORCE_THREAD_IDENTITY_MODE) -#define ABSL_THREAD_IDENTITY_MODE ABSL_FORCE_THREAD_IDENTITY_MODE -#elif defined(_WIN32) && !defined(__MINGW32__) -#define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_CPP11 -#elif defined(__APPLE__) && defined(ABSL_HAVE_THREAD_LOCAL) -#define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_CPP11 -#elif ABSL_PER_THREAD_TLS && defined(__GOOGLE_GRTE_VERSION__) && \ - (__GOOGLE_GRTE_VERSION__ >= 20140228L) -// Support for async-safe TLS was specifically added in GRTEv4. It's not -// present in the upstream eglibc. -// Note: Current default for production systems. -#define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_TLS -#else -#define ABSL_THREAD_IDENTITY_MODE \ - ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC -#endif - -#if ABSL_THREAD_IDENTITY_MODE == ABSL_THREAD_IDENTITY_MODE_USE_TLS || \ - ABSL_THREAD_IDENTITY_MODE == ABSL_THREAD_IDENTITY_MODE_USE_CPP11 - -#if ABSL_PER_THREAD_TLS -ABSL_CONST_INIT extern ABSL_PER_THREAD_TLS_KEYWORD ThreadIdentity* - thread_identity_ptr; -#elif defined(ABSL_HAVE_THREAD_LOCAL) -ABSL_CONST_INIT extern thread_local ThreadIdentity* thread_identity_ptr; -#else -#error Thread-local storage not detected on this platform -#endif - -// thread_local variables cannot be in headers exposed by DLLs. However, it is -// important for performance reasons in general that -// `CurrentThreadIdentityIfPresent` be inlined. This is not possible across a -// DLL boundary so, with DLLs, we opt to have the function not be inlined. Note -// that `CurrentThreadIdentityIfPresent` is declared above so we can exclude -// this entire inline definition when compiling as a DLL. -#if !defined(ABSL_BUILD_DLL) && !defined(ABSL_CONSUME_DLL) -inline ThreadIdentity* CurrentThreadIdentityIfPresent() { - return thread_identity_ptr; -} -#endif - -#elif ABSL_THREAD_IDENTITY_MODE != \ - ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC -#error Unknown ABSL_THREAD_IDENTITY_MODE -#endif - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_THREAD_IDENTITY_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/throw_delegate.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/throw_delegate.h deleted file mode 100644 index 075f527..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/throw_delegate.h +++ /dev/null @@ -1,75 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ABSL_BASE_INTERNAL_THROW_DELEGATE_H_ -#define ABSL_BASE_INTERNAL_THROW_DELEGATE_H_ - -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// Helper functions that allow throwing exceptions consistently from anywhere. -// The main use case is for header-based libraries (eg templates), as they will -// be built by many different targets with their own compiler options. -// In particular, this will allow a safe way to throw exceptions even if the -// caller is compiled with -fno-exceptions. This is intended for implementing -// things like map<>::at(), which the standard documents as throwing an -// exception on error. -// -// Using other techniques like #if tricks could lead to ODR violations. -// -// You shouldn't use it unless you're writing code that you know will be built -// both with and without exceptions and you need to conform to an interface -// that uses exceptions. - -[[noreturn]] void ThrowStdLogicError(const std::string& what_arg); -[[noreturn]] void ThrowStdLogicError(const char* what_arg); -[[noreturn]] void ThrowStdInvalidArgument(const std::string& what_arg); -[[noreturn]] void ThrowStdInvalidArgument(const char* what_arg); -[[noreturn]] void ThrowStdDomainError(const std::string& what_arg); -[[noreturn]] void ThrowStdDomainError(const char* what_arg); -[[noreturn]] void ThrowStdLengthError(const std::string& what_arg); -[[noreturn]] void ThrowStdLengthError(const char* what_arg); -[[noreturn]] void ThrowStdOutOfRange(const std::string& what_arg); -[[noreturn]] void ThrowStdOutOfRange(const char* what_arg); -[[noreturn]] void ThrowStdRuntimeError(const std::string& what_arg); -[[noreturn]] void ThrowStdRuntimeError(const char* what_arg); -[[noreturn]] void ThrowStdRangeError(const std::string& what_arg); -[[noreturn]] void ThrowStdRangeError(const char* what_arg); -[[noreturn]] void ThrowStdOverflowError(const std::string& what_arg); -[[noreturn]] void ThrowStdOverflowError(const char* what_arg); -[[noreturn]] void ThrowStdUnderflowError(const std::string& what_arg); -[[noreturn]] void ThrowStdUnderflowError(const char* what_arg); - -[[noreturn]] void ThrowStdBadFunctionCall(); -[[noreturn]] void ThrowStdBadAlloc(); - -// ThrowStdBadArrayNewLength() cannot be consistently supported because -// std::bad_array_new_length is missing in libstdc++ until 4.9.0. -// https://gcc.gnu.org/onlinedocs/gcc-4.8.3/libstdc++/api/a01379_source.html -// https://gcc.gnu.org/onlinedocs/gcc-4.9.0/libstdc++/api/a01327_source.html -// libcxx (as of 3.2) and msvc (as of 2015) both have it. -// [[noreturn]] void ThrowStdBadArrayNewLength(); - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_THROW_DELEGATE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/tsan_mutex_interface.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/tsan_mutex_interface.h deleted file mode 100644 index 39207d8..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/tsan_mutex_interface.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This file is intended solely for spinlock.h. -// It provides ThreadSanitizer annotations for custom mutexes. -// See for meaning of these annotations. - -#ifndef ABSL_BASE_INTERNAL_TSAN_MUTEX_INTERFACE_H_ -#define ABSL_BASE_INTERNAL_TSAN_MUTEX_INTERFACE_H_ - -#include "absl/base/config.h" - -// ABSL_INTERNAL_HAVE_TSAN_INTERFACE -// Macro intended only for internal use. -// -// Checks whether LLVM Thread Sanitizer interfaces are available. -// First made available in LLVM 5.0 (Sep 2017). -#ifdef ABSL_INTERNAL_HAVE_TSAN_INTERFACE -#error "ABSL_INTERNAL_HAVE_TSAN_INTERFACE cannot be directly set." -#endif - -#if defined(ABSL_HAVE_THREAD_SANITIZER) && defined(__has_include) -#if __has_include() -#define ABSL_INTERNAL_HAVE_TSAN_INTERFACE 1 -#endif -#endif - -#ifdef ABSL_INTERNAL_HAVE_TSAN_INTERFACE -#include - -#define ABSL_TSAN_MUTEX_CREATE __tsan_mutex_create -#define ABSL_TSAN_MUTEX_DESTROY __tsan_mutex_destroy -#define ABSL_TSAN_MUTEX_PRE_LOCK __tsan_mutex_pre_lock -#define ABSL_TSAN_MUTEX_POST_LOCK __tsan_mutex_post_lock -#define ABSL_TSAN_MUTEX_PRE_UNLOCK __tsan_mutex_pre_unlock -#define ABSL_TSAN_MUTEX_POST_UNLOCK __tsan_mutex_post_unlock -#define ABSL_TSAN_MUTEX_PRE_SIGNAL __tsan_mutex_pre_signal -#define ABSL_TSAN_MUTEX_POST_SIGNAL __tsan_mutex_post_signal -#define ABSL_TSAN_MUTEX_PRE_DIVERT __tsan_mutex_pre_divert -#define ABSL_TSAN_MUTEX_POST_DIVERT __tsan_mutex_post_divert - -#else - -#define ABSL_TSAN_MUTEX_CREATE(...) -#define ABSL_TSAN_MUTEX_DESTROY(...) -#define ABSL_TSAN_MUTEX_PRE_LOCK(...) -#define ABSL_TSAN_MUTEX_POST_LOCK(...) -#define ABSL_TSAN_MUTEX_PRE_UNLOCK(...) -#define ABSL_TSAN_MUTEX_POST_UNLOCK(...) -#define ABSL_TSAN_MUTEX_PRE_SIGNAL(...) -#define ABSL_TSAN_MUTEX_POST_SIGNAL(...) -#define ABSL_TSAN_MUTEX_PRE_DIVERT(...) -#define ABSL_TSAN_MUTEX_POST_DIVERT(...) - -#endif - -#endif // ABSL_BASE_INTERNAL_TSAN_MUTEX_INTERFACE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/unaligned_access.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/unaligned_access.h deleted file mode 100644 index 093dd9b..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/unaligned_access.h +++ /dev/null @@ -1,82 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ABSL_BASE_INTERNAL_UNALIGNED_ACCESS_H_ -#define ABSL_BASE_INTERNAL_UNALIGNED_ACCESS_H_ - -#include - -#include - -#include "absl/base/attributes.h" -#include "absl/base/config.h" - -// unaligned APIs - -// Portable handling of unaligned loads, stores, and copies. - -// The unaligned API is C++ only. The declarations use C++ features -// (namespaces, inline) which are absent or incompatible in C. -#if defined(__cplusplus) -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -inline uint16_t UnalignedLoad16(const void *p) { - uint16_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline uint32_t UnalignedLoad32(const void *p) { - uint32_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline uint64_t UnalignedLoad64(const void *p) { - uint64_t t; - memcpy(&t, p, sizeof t); - return t; -} - -inline void UnalignedStore16(void *p, uint16_t v) { memcpy(p, &v, sizeof v); } - -inline void UnalignedStore32(void *p, uint32_t v) { memcpy(p, &v, sizeof v); } - -inline void UnalignedStore64(void *p, uint64_t v) { memcpy(p, &v, sizeof v); } - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#define ABSL_INTERNAL_UNALIGNED_LOAD16(_p) \ - (absl::base_internal::UnalignedLoad16(_p)) -#define ABSL_INTERNAL_UNALIGNED_LOAD32(_p) \ - (absl::base_internal::UnalignedLoad32(_p)) -#define ABSL_INTERNAL_UNALIGNED_LOAD64(_p) \ - (absl::base_internal::UnalignedLoad64(_p)) - -#define ABSL_INTERNAL_UNALIGNED_STORE16(_p, _val) \ - (absl::base_internal::UnalignedStore16(_p, _val)) -#define ABSL_INTERNAL_UNALIGNED_STORE32(_p, _val) \ - (absl::base_internal::UnalignedStore32(_p, _val)) -#define ABSL_INTERNAL_UNALIGNED_STORE64(_p, _val) \ - (absl::base_internal::UnalignedStore64(_p, _val)) - -#endif // defined(__cplusplus), end of unaligned API - -#endif // ABSL_BASE_INTERNAL_UNALIGNED_ACCESS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/internal/unscaledcycleclock.h b/client/webrtc/webrtc_demo/third/include/absl/base/internal/unscaledcycleclock.h deleted file mode 100644 index 82f2c87..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/internal/unscaledcycleclock.h +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// UnscaledCycleClock -// An UnscaledCycleClock yields the value and frequency of a cycle counter -// that increments at a rate that is approximately constant. -// This class is for internal use only, you should consider using CycleClock -// instead. -// -// Notes: -// The cycle counter frequency is not necessarily the core clock frequency. -// That is, CycleCounter cycles are not necessarily "CPU cycles". -// -// An arbitrary offset may have been added to the counter at power on. -// -// On some platforms, the rate and offset of the counter may differ -// slightly when read from different CPUs of a multiprocessor. Usually, -// we try to ensure that the operating system adjusts values periodically -// so that values agree approximately. If you need stronger guarantees, -// consider using alternate interfaces. -// -// The CPU is not required to maintain the ordering of a cycle counter read -// with respect to surrounding instructions. - -#ifndef ABSL_BASE_INTERNAL_UNSCALEDCYCLECLOCK_H_ -#define ABSL_BASE_INTERNAL_UNSCALEDCYCLECLOCK_H_ - -#include - -#if defined(__APPLE__) -#include -#endif - -#include "absl/base/port.h" - -// The following platforms have an implementation of a hardware counter. -#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \ - defined(__powerpc__) || defined(__ppc__) || \ - defined(_M_IX86) || defined(_M_X64) -#define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1 -#else -#define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 0 -#endif - -// The following platforms often disable access to the hardware -// counter (through a sandbox) even if the underlying hardware has a -// usable counter. The CycleTimer interface also requires a *scaled* -// CycleClock that runs at atleast 1 MHz. We've found some Android -// ARM64 devices where this is not the case, so we disable it by -// default on Android ARM64. -#if defined(__native_client__) || \ - (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || \ - (defined(__ANDROID__) && defined(__aarch64__)) -#define ABSL_USE_UNSCALED_CYCLECLOCK_DEFAULT 0 -#else -#define ABSL_USE_UNSCALED_CYCLECLOCK_DEFAULT 1 -#endif - -// UnscaledCycleClock is an optional internal feature. -// Use "#if ABSL_USE_UNSCALED_CYCLECLOCK" to test for its presence. -// Can be overridden at compile-time via -DABSL_USE_UNSCALED_CYCLECLOCK=0|1 -#if !defined(ABSL_USE_UNSCALED_CYCLECLOCK) -#define ABSL_USE_UNSCALED_CYCLECLOCK \ - (ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION && \ - ABSL_USE_UNSCALED_CYCLECLOCK_DEFAULT) -#endif - -#if ABSL_USE_UNSCALED_CYCLECLOCK - -// This macro can be used to test if UnscaledCycleClock::Frequency() -// is NominalCPUFrequency() on a particular platform. -#if (defined(__i386__) || defined(__x86_64__) || \ - defined(_M_IX86) || defined(_M_X64)) -#define ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace time_internal { -class UnscaledCycleClockWrapperForGetCurrentTime; -} // namespace time_internal - -namespace base_internal { -class CycleClock; -class UnscaledCycleClockWrapperForInitializeFrequency; - -class UnscaledCycleClock { - private: - UnscaledCycleClock() = delete; - - // Return the value of a cycle counter that counts at a rate that is - // approximately constant. - static int64_t Now(); - - // Return the how much UnscaledCycleClock::Now() increases per second. - // This is not necessarily the core CPU clock frequency. - // It may be the nominal value report by the kernel, rather than a measured - // value. - static double Frequency(); - - // Allowed users - friend class base_internal::CycleClock; - friend class time_internal::UnscaledCycleClockWrapperForGetCurrentTime; - friend class base_internal::UnscaledCycleClockWrapperForInitializeFrequency; -}; - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_USE_UNSCALED_CYCLECLOCK - -#endif // ABSL_BASE_INTERNAL_UNSCALEDCYCLECLOCK_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/log_severity.h b/client/webrtc/webrtc_demo/third/include/absl/base/log_severity.h deleted file mode 100644 index 2236422..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/log_severity.h +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_LOG_SEVERITY_H_ -#define ABSL_BASE_LOG_SEVERITY_H_ - -#include -#include - -#include "absl/base/attributes.h" -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// absl::LogSeverity -// -// Four severity levels are defined. Logging APIs should terminate the program -// when a message is logged at severity `kFatal`; the other levels have no -// special semantics. -// -// Values other than the four defined levels (e.g. produced by `static_cast`) -// are valid, but their semantics when passed to a function, macro, or flag -// depend on the function, macro, or flag. The usual behavior is to normalize -// such values to a defined severity level, however in some cases values other -// than the defined levels are useful for comparison. -// -// Example: -// -// // Effectively disables all logging: -// SetMinLogLevel(static_cast(100)); -// -// Abseil flags may be defined with type `LogSeverity`. Dependency layering -// constraints require that the `AbslParseFlag()` overload be declared and -// defined in the flags library itself rather than here. The `AbslUnparseFlag()` -// overload is defined there as well for consistency. -// -// absl::LogSeverity Flag String Representation -// -// An `absl::LogSeverity` has a string representation used for parsing -// command-line flags based on the enumerator name (e.g. `kFatal`) or -// its unprefixed name (without the `k`) in any case-insensitive form. (E.g. -// "FATAL", "fatal" or "Fatal" are all valid.) Unparsing such flags produces an -// unprefixed string representation in all caps (e.g. "FATAL") or an integer. -// -// Additionally, the parser accepts arbitrary integers (as if the type were -// `int`). -// -// Examples: -// -// --my_log_level=kInfo -// --my_log_level=INFO -// --my_log_level=info -// --my_log_level=0 -// -// Unparsing a flag produces the same result as `absl::LogSeverityName()` for -// the standard levels and a base-ten integer otherwise. -enum class LogSeverity : int { - kInfo = 0, - kWarning = 1, - kError = 2, - kFatal = 3, -}; - -// LogSeverities() -// -// Returns an iterable of all standard `absl::LogSeverity` values, ordered from -// least to most severe. -constexpr std::array LogSeverities() { - return {{absl::LogSeverity::kInfo, absl::LogSeverity::kWarning, - absl::LogSeverity::kError, absl::LogSeverity::kFatal}}; -} - -// LogSeverityName() -// -// Returns the all-caps string representation (e.g. "INFO") of the specified -// severity level if it is one of the standard levels and "UNKNOWN" otherwise. -constexpr const char* LogSeverityName(absl::LogSeverity s) { - return s == absl::LogSeverity::kInfo - ? "INFO" - : s == absl::LogSeverity::kWarning - ? "WARNING" - : s == absl::LogSeverity::kError - ? "ERROR" - : s == absl::LogSeverity::kFatal ? "FATAL" : "UNKNOWN"; -} - -// NormalizeLogSeverity() -// -// Values less than `kInfo` normalize to `kInfo`; values greater than `kFatal` -// normalize to `kError` (**NOT** `kFatal`). -constexpr absl::LogSeverity NormalizeLogSeverity(absl::LogSeverity s) { - return s < absl::LogSeverity::kInfo - ? absl::LogSeverity::kInfo - : s > absl::LogSeverity::kFatal ? absl::LogSeverity::kError : s; -} -constexpr absl::LogSeverity NormalizeLogSeverity(int s) { - return absl::NormalizeLogSeverity(static_cast(s)); -} - -// operator<< -// -// The exact representation of a streamed `absl::LogSeverity` is deliberately -// unspecified; do not rely on it. -std::ostream& operator<<(std::ostream& os, absl::LogSeverity s); - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_LOG_SEVERITY_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/macros.h b/client/webrtc/webrtc_demo/third/include/absl/base/macros.h deleted file mode 100644 index 3e085a9..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/macros.h +++ /dev/null @@ -1,158 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: macros.h -// ----------------------------------------------------------------------------- -// -// This header file defines the set of language macros used within Abseil code. -// For the set of macros used to determine supported compilers and platforms, -// see absl/base/config.h instead. -// -// This code is compiled directly on many platforms, including client -// platforms like Windows, Mac, and embedded systems. Before making -// any changes here, make sure that you're not breaking any platforms. - -#ifndef ABSL_BASE_MACROS_H_ -#define ABSL_BASE_MACROS_H_ - -#include -#include - -#include "absl/base/attributes.h" -#include "absl/base/config.h" -#include "absl/base/optimization.h" -#include "absl/base/port.h" - -// ABSL_ARRAYSIZE() -// -// Returns the number of elements in an array as a compile-time constant, which -// can be used in defining new arrays. If you use this macro on a pointer by -// mistake, you will get a compile-time error. -#define ABSL_ARRAYSIZE(array) \ - (sizeof(::absl::macros_internal::ArraySizeHelper(array))) - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace macros_internal { -// Note: this internal template function declaration is used by ABSL_ARRAYSIZE. -// The function doesn't need a definition, as we only use its type. -template -auto ArraySizeHelper(const T (&array)[N]) -> char (&)[N]; -} // namespace macros_internal -ABSL_NAMESPACE_END -} // namespace absl - -// ABSL_BAD_CALL_IF() -// -// Used on a function overload to trap bad calls: any call that matches the -// overload will cause a compile-time error. This macro uses a clang-specific -// "enable_if" attribute, as described at -// https://clang.llvm.org/docs/AttributeReference.html#enable-if -// -// Overloads which use this macro should be bracketed by -// `#ifdef ABSL_BAD_CALL_IF`. -// -// Example: -// -// int isdigit(int c); -// #ifdef ABSL_BAD_CALL_IF -// int isdigit(int c) -// ABSL_BAD_CALL_IF(c <= -1 || c > 255, -// "'c' must have the value of an unsigned char or EOF"); -// #endif // ABSL_BAD_CALL_IF -#if ABSL_HAVE_ATTRIBUTE(enable_if) -#define ABSL_BAD_CALL_IF(expr, msg) \ - __attribute__((enable_if(expr, "Bad call trap"), unavailable(msg))) -#endif - -// ABSL_ASSERT() -// -// In C++11, `assert` can't be used portably within constexpr functions. -// ABSL_ASSERT functions as a runtime assert but works in C++11 constexpr -// functions. Example: -// -// constexpr double Divide(double a, double b) { -// return ABSL_ASSERT(b != 0), a / b; -// } -// -// This macro is inspired by -// https://akrzemi1.wordpress.com/2017/05/18/asserts-in-constexpr-functions/ -#if defined(NDEBUG) -#define ABSL_ASSERT(expr) \ - (false ? static_cast(expr) : static_cast(0)) -#else -#define ABSL_ASSERT(expr) \ - (ABSL_PREDICT_TRUE((expr)) ? static_cast(0) \ - : [] { assert(false && #expr); }()) // NOLINT -#endif - -// `ABSL_INTERNAL_HARDENING_ABORT()` controls how `ABSL_HARDENING_ASSERT()` -// aborts the program in release mode (when NDEBUG is defined). The -// implementation should abort the program as quickly as possible and ideally it -// should not be possible to ignore the abort request. -#if (ABSL_HAVE_BUILTIN(__builtin_trap) && \ - ABSL_HAVE_BUILTIN(__builtin_unreachable)) || \ - (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_INTERNAL_HARDENING_ABORT() \ - do { \ - __builtin_trap(); \ - __builtin_unreachable(); \ - } while (false) -#else -#define ABSL_INTERNAL_HARDENING_ABORT() abort() -#endif - -// ABSL_HARDENING_ASSERT() -// -// `ABSL_HARDENING_ASSERT()` is like `ABSL_ASSERT()`, but used to implement -// runtime assertions that should be enabled in hardened builds even when -// `NDEBUG` is defined. -// -// When `NDEBUG` is not defined, `ABSL_HARDENING_ASSERT()` is identical to -// `ABSL_ASSERT()`. -// -// See `ABSL_OPTION_HARDENED` in `absl/base/options.h` for more information on -// hardened mode. -#if ABSL_OPTION_HARDENED == 1 && defined(NDEBUG) -#define ABSL_HARDENING_ASSERT(expr) \ - (ABSL_PREDICT_TRUE((expr)) ? static_cast(0) \ - : [] { ABSL_INTERNAL_HARDENING_ABORT(); }()) -#else -#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr) -#endif - -#ifdef ABSL_HAVE_EXCEPTIONS -#define ABSL_INTERNAL_TRY try -#define ABSL_INTERNAL_CATCH_ANY catch (...) -#define ABSL_INTERNAL_RETHROW do { throw; } while (false) -#else // ABSL_HAVE_EXCEPTIONS -#define ABSL_INTERNAL_TRY if (true) -#define ABSL_INTERNAL_CATCH_ANY else if (false) -#define ABSL_INTERNAL_RETHROW do {} while (false) -#endif // ABSL_HAVE_EXCEPTIONS - -// `ABSL_INTERNAL_UNREACHABLE` is an unreachable statement. A program which -// reaches one has undefined behavior, and the compiler may optimize -// accordingly. -#if defined(__GNUC__) || ABSL_HAVE_BUILTIN(__builtin_unreachable) -#define ABSL_INTERNAL_UNREACHABLE __builtin_unreachable() -#elif defined(_MSC_VER) -#define ABSL_INTERNAL_UNREACHABLE __assume(0) -#else -#define ABSL_INTERNAL_UNREACHABLE -#endif - -#endif // ABSL_BASE_MACROS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/optimization.h b/client/webrtc/webrtc_demo/third/include/absl/base/optimization.h deleted file mode 100644 index 6332b62..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/optimization.h +++ /dev/null @@ -1,243 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: optimization.h -// ----------------------------------------------------------------------------- -// -// This header file defines portable macros for performance optimization. - -#ifndef ABSL_BASE_OPTIMIZATION_H_ -#define ABSL_BASE_OPTIMIZATION_H_ - -#include - -#include "absl/base/config.h" - -// ABSL_BLOCK_TAIL_CALL_OPTIMIZATION -// -// Instructs the compiler to avoid optimizing tail-call recursion. This macro is -// useful when you wish to preserve the existing function order within a stack -// trace for logging, debugging, or profiling purposes. -// -// Example: -// -// int f() { -// int result = g(); -// ABSL_BLOCK_TAIL_CALL_OPTIMIZATION(); -// return result; -// } -#if defined(__pnacl__) -#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() if (volatile int x = 0) { (void)x; } -#elif defined(__clang__) -// Clang will not tail call given inline volatile assembly. -#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __asm__ __volatile__("") -#elif defined(__GNUC__) -// GCC will not tail call given inline volatile assembly. -#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __asm__ __volatile__("") -#elif defined(_MSC_VER) -#include -// The __nop() intrinsic blocks the optimisation. -#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __nop() -#else -#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() if (volatile int x = 0) { (void)x; } -#endif - -// ABSL_CACHELINE_SIZE -// -// Explicitly defines the size of the L1 cache for purposes of alignment. -// Setting the cacheline size allows you to specify that certain objects be -// aligned on a cacheline boundary with `ABSL_CACHELINE_ALIGNED` declarations. -// (See below.) -// -// NOTE: this macro should be replaced with the following C++17 features, when -// those are generally available: -// -// * `std::hardware_constructive_interference_size` -// * `std::hardware_destructive_interference_size` -// -// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html -// for more information. -#if defined(__GNUC__) -// Cache line alignment -#if defined(__i386__) || defined(__x86_64__) -#define ABSL_CACHELINE_SIZE 64 -#elif defined(__powerpc64__) -#define ABSL_CACHELINE_SIZE 128 -#elif defined(__aarch64__) -// We would need to read special register ctr_el0 to find out L1 dcache size. -// This value is a good estimate based on a real aarch64 machine. -#define ABSL_CACHELINE_SIZE 64 -#elif defined(__arm__) -// Cache line sizes for ARM: These values are not strictly correct since -// cache line sizes depend on implementations, not architectures. There -// are even implementations with cache line sizes configurable at boot -// time. -#if defined(__ARM_ARCH_5T__) -#define ABSL_CACHELINE_SIZE 32 -#elif defined(__ARM_ARCH_7A__) -#define ABSL_CACHELINE_SIZE 64 -#endif -#endif - -#ifndef ABSL_CACHELINE_SIZE -// A reasonable default guess. Note that overestimates tend to waste more -// space, while underestimates tend to waste more time. -#define ABSL_CACHELINE_SIZE 64 -#endif - -// ABSL_CACHELINE_ALIGNED -// -// Indicates that the declared object be cache aligned using -// `ABSL_CACHELINE_SIZE` (see above). Cacheline aligning objects allows you to -// load a set of related objects in the L1 cache for performance improvements. -// Cacheline aligning objects properly allows constructive memory sharing and -// prevents destructive (or "false") memory sharing. -// -// NOTE: this macro should be replaced with usage of `alignas()` using -// `std::hardware_constructive_interference_size` and/or -// `std::hardware_destructive_interference_size` when available within C++17. -// -// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html -// for more information. -// -// On some compilers, `ABSL_CACHELINE_ALIGNED` expands to an `__attribute__` -// or `__declspec` attribute. For compilers where this is not known to work, -// the macro expands to nothing. -// -// No further guarantees are made here. The result of applying the macro -// to variables and types is always implementation-defined. -// -// WARNING: It is easy to use this attribute incorrectly, even to the point -// of causing bugs that are difficult to diagnose, crash, etc. It does not -// of itself guarantee that objects are aligned to a cache line. -// -// NOTE: Some compilers are picky about the locations of annotations such as -// this attribute, so prefer to put it at the beginning of your declaration. -// For example, -// -// ABSL_CACHELINE_ALIGNED static Foo* foo = ... -// -// class ABSL_CACHELINE_ALIGNED Bar { ... -// -// Recommendations: -// -// 1) Consult compiler documentation; this comment is not kept in sync as -// toolchains evolve. -// 2) Verify your use has the intended effect. This often requires inspecting -// the generated machine code. -// 3) Prefer applying this attribute to individual variables. Avoid -// applying it to types. This tends to localize the effect. -#define ABSL_CACHELINE_ALIGNED __attribute__((aligned(ABSL_CACHELINE_SIZE))) -#elif defined(_MSC_VER) -#define ABSL_CACHELINE_SIZE 64 -#define ABSL_CACHELINE_ALIGNED __declspec(align(ABSL_CACHELINE_SIZE)) -#else -#define ABSL_CACHELINE_SIZE 64 -#define ABSL_CACHELINE_ALIGNED -#endif - -// ABSL_PREDICT_TRUE, ABSL_PREDICT_FALSE -// -// Enables the compiler to prioritize compilation using static analysis for -// likely paths within a boolean branch. -// -// Example: -// -// if (ABSL_PREDICT_TRUE(expression)) { -// return result; // Faster if more likely -// } else { -// return 0; -// } -// -// Compilers can use the information that a certain branch is not likely to be -// taken (for instance, a CHECK failure) to optimize for the common case in -// the absence of better information (ie. compiling gcc with `-fprofile-arcs`). -// -// Recommendation: Modern CPUs dynamically predict branch execution paths, -// typically with accuracy greater than 97%. As a result, annotating every -// branch in a codebase is likely counterproductive; however, annotating -// specific branches that are both hot and consistently mispredicted is likely -// to yield performance improvements. -#if ABSL_HAVE_BUILTIN(__builtin_expect) || \ - (defined(__GNUC__) && !defined(__clang__)) -#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false)) -#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true)) -#else -#define ABSL_PREDICT_FALSE(x) (x) -#define ABSL_PREDICT_TRUE(x) (x) -#endif - -// ABSL_INTERNAL_ASSUME(cond) -// Informs the compiler that a condition is always true and that it can assume -// it to be true for optimization purposes. The call has undefined behavior if -// the condition is false. -// In !NDEBUG mode, the condition is checked with an assert(). -// NOTE: The expression must not have side effects, as it will only be evaluated -// in some compilation modes and not others. -// -// Example: -// -// int x = ...; -// ABSL_INTERNAL_ASSUME(x >= 0); -// // The compiler can optimize the division to a simple right shift using the -// // assumption specified above. -// int y = x / 16; -// -#if !defined(NDEBUG) -#define ABSL_INTERNAL_ASSUME(cond) assert(cond) -#elif ABSL_HAVE_BUILTIN(__builtin_assume) -#define ABSL_INTERNAL_ASSUME(cond) __builtin_assume(cond) -#elif defined(__GNUC__) || ABSL_HAVE_BUILTIN(__builtin_unreachable) -#define ABSL_INTERNAL_ASSUME(cond) \ - do { \ - if (!(cond)) __builtin_unreachable(); \ - } while (0) -#elif defined(_MSC_VER) -#define ABSL_INTERNAL_ASSUME(cond) __assume(cond) -#else -#define ABSL_INTERNAL_ASSUME(cond) \ - do { \ - static_cast(false && (cond)); \ - } while (0) -#endif - -// ABSL_INTERNAL_UNIQUE_SMALL_NAME(cond) -// This macro forces small unique name on a static file level symbols like -// static local variables or static functions. This is intended to be used in -// macro definitions to optimize the cost of generated code. Do NOT use it on -// symbols exported from translation unit since it may cause a link time -// conflict. -// -// Example: -// -// #define MY_MACRO(txt) -// namespace { -// char VeryVeryLongVarName[] ABSL_INTERNAL_UNIQUE_SMALL_NAME() = txt; -// const char* VeryVeryLongFuncName() ABSL_INTERNAL_UNIQUE_SMALL_NAME(); -// const char* VeryVeryLongFuncName() { return txt; } -// } -// - -#if defined(__GNUC__) -#define ABSL_INTERNAL_UNIQUE_SMALL_NAME2(x) #x -#define ABSL_INTERNAL_UNIQUE_SMALL_NAME1(x) ABSL_INTERNAL_UNIQUE_SMALL_NAME2(x) -#define ABSL_INTERNAL_UNIQUE_SMALL_NAME() \ - asm(ABSL_INTERNAL_UNIQUE_SMALL_NAME1(.absl.__COUNTER__)) -#else -#define ABSL_INTERNAL_UNIQUE_SMALL_NAME() -#endif - -#endif // ABSL_BASE_OPTIMIZATION_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/options.h b/client/webrtc/webrtc_demo/third/include/absl/base/options.h deleted file mode 100644 index df506f0..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/options.h +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: options.h -// ----------------------------------------------------------------------------- -// -// This file contains Abseil configuration options for setting specific -// implementations instead of letting Abseil determine which implementation to -// use at compile-time. Setting these options may be useful for package or build -// managers who wish to guarantee ABI stability within binary builds (which are -// otherwise difficult to enforce). -// -// *** IMPORTANT NOTICE FOR PACKAGE MANAGERS: It is important that -// maintainers of package managers who wish to package Abseil read and -// understand this file! *** -// -// Abseil contains a number of possible configuration endpoints, based on -// parameters such as the detected platform, language version, or command-line -// flags used to invoke the underlying binary. As is the case with all -// libraries, binaries which contain Abseil code must ensure that separate -// packages use the same compiled copy of Abseil to avoid a diamond dependency -// problem, which can occur if two packages built with different Abseil -// configuration settings are linked together. Diamond dependency problems in -// C++ may manifest as violations to the One Definition Rule (ODR) (resulting in -// linker errors), or undefined behavior (resulting in crashes). -// -// Diamond dependency problems can be avoided if all packages utilize the same -// exact version of Abseil. Building from source code with the same compilation -// parameters is the easiest way to avoid such dependency problems. However, for -// package managers who cannot control such compilation parameters, we are -// providing the file to allow you to inject ABI (Application Binary Interface) -// stability across builds. Settings options in this file will neither change -// API nor ABI, providing a stable copy of Abseil between packages. -// -// Care must be taken to keep options within these configurations isolated -// from any other dynamic settings, such as command-line flags which could alter -// these options. This file is provided specifically to help build and package -// managers provide a stable copy of Abseil within their libraries and binaries; -// other developers should not have need to alter the contents of this file. -// -// ----------------------------------------------------------------------------- -// Usage -// ----------------------------------------------------------------------------- -// -// For any particular package release, set the appropriate definitions within -// this file to whatever value makes the most sense for your package(s). Note -// that, by default, most of these options, at the moment, affect the -// implementation of types; future options may affect other implementation -// details. -// -// NOTE: the defaults within this file all assume that Abseil can select the -// proper Abseil implementation at compile-time, which will not be sufficient -// to guarantee ABI stability to package managers. - -#ifndef ABSL_BASE_OPTIONS_H_ -#define ABSL_BASE_OPTIONS_H_ - -// Include a standard library header to allow configuration based on the -// standard library in use. -#ifdef __cplusplus -#include -#endif - -// ----------------------------------------------------------------------------- -// Type Compatibility Options -// ----------------------------------------------------------------------------- -// -// ABSL_OPTION_USE_STD_ANY -// -// This option controls whether absl::any is implemented as an alias to -// std::any, or as an independent implementation. -// -// A value of 0 means to use Abseil's implementation. This requires only C++11 -// support, and is expected to work on every toolchain we support. -// -// A value of 1 means to use an alias to std::any. This requires that all code -// using Abseil is built in C++17 mode or later. -// -// A value of 2 means to detect the C++ version being used to compile Abseil, -// and use an alias only if a working std::any is available. This option is -// useful when you are building your entire program, including all of its -// dependencies, from source. It should not be used otherwise -- for example, -// if you are distributing Abseil in a binary package manager -- since in -// mode 2, absl::any will name a different type, with a different mangled name -// and binary layout, depending on the compiler flags passed by the end user. -// For more info, see https://abseil.io/about/design/dropin-types. -// -// User code should not inspect this macro. To check in the preprocessor if -// absl::any is a typedef of std::any, use the feature macro ABSL_USES_STD_ANY. - -#define ABSL_OPTION_USE_STD_ANY 2 - - -// ABSL_OPTION_USE_STD_OPTIONAL -// -// This option controls whether absl::optional is implemented as an alias to -// std::optional, or as an independent implementation. -// -// A value of 0 means to use Abseil's implementation. This requires only C++11 -// support, and is expected to work on every toolchain we support. -// -// A value of 1 means to use an alias to std::optional. This requires that all -// code using Abseil is built in C++17 mode or later. -// -// A value of 2 means to detect the C++ version being used to compile Abseil, -// and use an alias only if a working std::optional is available. This option -// is useful when you are building your program from source. It should not be -// used otherwise -- for example, if you are distributing Abseil in a binary -// package manager -- since in mode 2, absl::optional will name a different -// type, with a different mangled name and binary layout, depending on the -// compiler flags passed by the end user. For more info, see -// https://abseil.io/about/design/dropin-types. - -// User code should not inspect this macro. To check in the preprocessor if -// absl::optional is a typedef of std::optional, use the feature macro -// ABSL_USES_STD_OPTIONAL. - -#define ABSL_OPTION_USE_STD_OPTIONAL 2 - - -// ABSL_OPTION_USE_STD_STRING_VIEW -// -// This option controls whether absl::string_view is implemented as an alias to -// std::string_view, or as an independent implementation. -// -// A value of 0 means to use Abseil's implementation. This requires only C++11 -// support, and is expected to work on every toolchain we support. -// -// A value of 1 means to use an alias to std::string_view. This requires that -// all code using Abseil is built in C++17 mode or later. -// -// A value of 2 means to detect the C++ version being used to compile Abseil, -// and use an alias only if a working std::string_view is available. This -// option is useful when you are building your program from source. It should -// not be used otherwise -- for example, if you are distributing Abseil in a -// binary package manager -- since in mode 2, absl::string_view will name a -// different type, with a different mangled name and binary layout, depending on -// the compiler flags passed by the end user. For more info, see -// https://abseil.io/about/design/dropin-types. -// -// User code should not inspect this macro. To check in the preprocessor if -// absl::string_view is a typedef of std::string_view, use the feature macro -// ABSL_USES_STD_STRING_VIEW. - -#define ABSL_OPTION_USE_STD_STRING_VIEW 2 - -// ABSL_OPTION_USE_STD_VARIANT -// -// This option controls whether absl::variant is implemented as an alias to -// std::variant, or as an independent implementation. -// -// A value of 0 means to use Abseil's implementation. This requires only C++11 -// support, and is expected to work on every toolchain we support. -// -// A value of 1 means to use an alias to std::variant. This requires that all -// code using Abseil is built in C++17 mode or later. -// -// A value of 2 means to detect the C++ version being used to compile Abseil, -// and use an alias only if a working std::variant is available. This option -// is useful when you are building your program from source. It should not be -// used otherwise -- for example, if you are distributing Abseil in a binary -// package manager -- since in mode 2, absl::variant will name a different -// type, with a different mangled name and binary layout, depending on the -// compiler flags passed by the end user. For more info, see -// https://abseil.io/about/design/dropin-types. -// -// User code should not inspect this macro. To check in the preprocessor if -// absl::variant is a typedef of std::variant, use the feature macro -// ABSL_USES_STD_VARIANT. - -#define ABSL_OPTION_USE_STD_VARIANT 2 - - -// ABSL_OPTION_USE_INLINE_NAMESPACE -// ABSL_OPTION_INLINE_NAMESPACE_NAME -// -// These options controls whether all entities in the absl namespace are -// contained within an inner inline namespace. This does not affect the -// user-visible API of Abseil, but it changes the mangled names of all symbols. -// -// This can be useful as a version tag if you are distributing Abseil in -// precompiled form. This will prevent a binary library build of Abseil with -// one inline namespace being used with headers configured with a different -// inline namespace name. Binary packagers are reminded that Abseil does not -// guarantee any ABI stability in Abseil, so any update of Abseil or -// configuration change in such a binary package should be combined with a -// new, unique value for the inline namespace name. -// -// A value of 0 means not to use inline namespaces. -// -// A value of 1 means to use an inline namespace with the given name inside -// namespace absl. If this is set, ABSL_OPTION_INLINE_NAMESPACE_NAME must also -// be changed to a new, unique identifier name. In particular "head" is not -// allowed. - -#define ABSL_OPTION_USE_INLINE_NAMESPACE 0 -#define ABSL_OPTION_INLINE_NAMESPACE_NAME head - -// ABSL_OPTION_HARDENED -// -// This option enables a "hardened" build in release mode (in this context, -// release mode is defined as a build where the `NDEBUG` macro is defined). -// -// A value of 0 means that "hardened" mode is not enabled. -// -// A value of 1 means that "hardened" mode is enabled. -// -// Hardened builds have additional security checks enabled when `NDEBUG` is -// defined. Defining `NDEBUG` is normally used to turn `assert()` macro into a -// no-op, as well as disabling other bespoke program consistency checks. By -// defining ABSL_OPTION_HARDENED to 1, a select set of checks remain enabled in -// release mode. These checks guard against programming errors that may lead to -// security vulnerabilities. In release mode, when one of these programming -// errors is encountered, the program will immediately abort, possibly without -// any attempt at logging. -// -// The checks enabled by this option are not free; they do incur runtime cost. -// -// The checks enabled by this option are always active when `NDEBUG` is not -// defined, even in the case when ABSL_OPTION_HARDENED is defined to 0. The -// checks enabled by this option may abort the program in a different way and -// log additional information when `NDEBUG` is not defined. - -#define ABSL_OPTION_HARDENED 1 - -#endif // ABSL_BASE_OPTIONS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/policy_checks.h b/client/webrtc/webrtc_demo/third/include/absl/base/policy_checks.h deleted file mode 100644 index 06b3243..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/policy_checks.h +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: policy_checks.h -// ----------------------------------------------------------------------------- -// -// This header enforces a minimum set of policies at build time, such as the -// supported compiler and library versions. Unsupported configurations are -// reported with `#error`. This enforcement is best effort, so successfully -// compiling this header does not guarantee a supported configuration. - -#ifndef ABSL_BASE_POLICY_CHECKS_H_ -#define ABSL_BASE_POLICY_CHECKS_H_ - -// Included for the __GLIBC_PREREQ macro used below. -#include - -// Included for the _STLPORT_VERSION macro used below. -#if defined(__cplusplus) -#include -#endif - -// ----------------------------------------------------------------------------- -// Operating System Check -// ----------------------------------------------------------------------------- - -#if defined(__CYGWIN__) -#error "Cygwin is not supported." -#endif - -// ----------------------------------------------------------------------------- -// Toolchain Check -// ----------------------------------------------------------------------------- - -// We support MSVC++ 14.0 update 2 and later. -// This minimum will go up. -#if defined(_MSC_FULL_VER) && _MSC_FULL_VER < 190023918 && !defined(__clang__) -#error "This package requires Visual Studio 2015 Update 2 or higher." -#endif - -// We support gcc 4.7 and later. -// This minimum will go up. -#if defined(__GNUC__) && !defined(__clang__) -#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) -#error "This package requires gcc 4.7 or higher." -#endif -#endif - -// We support Apple Xcode clang 4.2.1 (version 421.11.65) and later. -// This corresponds to Apple Xcode version 4.5. -// This minimum will go up. -#if defined(__apple_build_version__) && __apple_build_version__ < 4211165 -#error "This package requires __apple_build_version__ of 4211165 or higher." -#endif - -// ----------------------------------------------------------------------------- -// C++ Version Check -// ----------------------------------------------------------------------------- - -// Enforce C++11 as the minimum. Note that Visual Studio has not -// advanced __cplusplus despite being good enough for our purposes, so -// so we exempt it from the check. -#if defined(__cplusplus) && !defined(_MSC_VER) -#if __cplusplus < 201103L -#error "C++ versions less than C++11 are not supported." -#endif -#endif - -// ----------------------------------------------------------------------------- -// Standard Library Check -// ----------------------------------------------------------------------------- - -#if defined(_STLPORT_VERSION) -#error "STLPort is not supported." -#endif - -// ----------------------------------------------------------------------------- -// `char` Size Check -// ----------------------------------------------------------------------------- - -// Abseil currently assumes CHAR_BIT == 8. If you would like to use Abseil on a -// platform where this is not the case, please provide us with the details about -// your platform so we can consider relaxing this requirement. -#if CHAR_BIT != 8 -#error "Abseil assumes CHAR_BIT == 8." -#endif - -// ----------------------------------------------------------------------------- -// `int` Size Check -// ----------------------------------------------------------------------------- - -// Abseil currently assumes that an int is 4 bytes. If you would like to use -// Abseil on a platform where this is not the case, please provide us with the -// details about your platform so we can consider relaxing this requirement. -#if INT_MAX < 2147483647 -#error "Abseil assumes that int is at least 4 bytes. " -#endif - -#endif // ABSL_BASE_POLICY_CHECKS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/port.h b/client/webrtc/webrtc_demo/third/include/absl/base/port.h deleted file mode 100644 index 5bc4d6c..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/port.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This files is a forwarding header for other headers containing various -// portability macros and functions. - -#ifndef ABSL_BASE_PORT_H_ -#define ABSL_BASE_PORT_H_ - -#include "absl/base/attributes.h" -#include "absl/base/config.h" -#include "absl/base/optimization.h" - -#endif // ABSL_BASE_PORT_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/base/thread_annotations.h b/client/webrtc/webrtc_demo/third/include/absl/base/thread_annotations.h deleted file mode 100644 index 531e4f7..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/base/thread_annotations.h +++ /dev/null @@ -1,333 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: thread_annotations.h -// ----------------------------------------------------------------------------- -// -// This header file contains macro definitions for thread safety annotations -// that allow developers to document the locking policies of multi-threaded -// code. The annotations can also help program analysis tools to identify -// potential thread safety issues. -// -// These annotations are implemented using compiler attributes. Using the macros -// defined here instead of raw attributes allow for portability and future -// compatibility. -// -// When referring to mutexes in the arguments of the attributes, you should -// use variable names or more complex expressions (e.g. my_object->mutex_) -// that evaluate to a concrete mutex object whenever possible. If the mutex -// you want to refer to is not in scope, you may use a member pointer -// (e.g. &MyClass::mutex_) to refer to a mutex in some (unknown) object. - -#ifndef ABSL_BASE_THREAD_ANNOTATIONS_H_ -#define ABSL_BASE_THREAD_ANNOTATIONS_H_ - -#include "absl/base/attributes.h" -#include "absl/base/config.h" - -// ABSL_GUARDED_BY() -// -// Documents if a shared field or global variable needs to be protected by a -// mutex. ABSL_GUARDED_BY() allows the user to specify a particular mutex that -// should be held when accessing the annotated variable. -// -// Although this annotation (and ABSL_PT_GUARDED_BY, below) cannot be applied to -// local variables, a local variable and its associated mutex can often be -// combined into a small class or struct, thereby allowing the annotation. -// -// Example: -// -// class Foo { -// Mutex mu_; -// int p1_ ABSL_GUARDED_BY(mu_); -// ... -// }; -#if ABSL_HAVE_ATTRIBUTE(guarded_by) -#define ABSL_GUARDED_BY(x) __attribute__((guarded_by(x))) -#else -#define ABSL_GUARDED_BY(x) -#endif - -// ABSL_PT_GUARDED_BY() -// -// Documents if the memory location pointed to by a pointer should be guarded -// by a mutex when dereferencing the pointer. -// -// Example: -// class Foo { -// Mutex mu_; -// int *p1_ ABSL_PT_GUARDED_BY(mu_); -// ... -// }; -// -// Note that a pointer variable to a shared memory location could itself be a -// shared variable. -// -// Example: -// -// // `q_`, guarded by `mu1_`, points to a shared memory location that is -// // guarded by `mu2_`: -// int *q_ ABSL_GUARDED_BY(mu1_) ABSL_PT_GUARDED_BY(mu2_); -#if ABSL_HAVE_ATTRIBUTE(pt_guarded_by) -#define ABSL_PT_GUARDED_BY(x) __attribute__((pt_guarded_by(x))) -#else -#define ABSL_PT_GUARDED_BY(x) -#endif - -// ABSL_ACQUIRED_AFTER() / ABSL_ACQUIRED_BEFORE() -// -// Documents the acquisition order between locks that can be held -// simultaneously by a thread. For any two locks that need to be annotated -// to establish an acquisition order, only one of them needs the annotation. -// (i.e. You don't have to annotate both locks with both ABSL_ACQUIRED_AFTER -// and ABSL_ACQUIRED_BEFORE.) -// -// As with ABSL_GUARDED_BY, this is only applicable to mutexes that are shared -// fields or global variables. -// -// Example: -// -// Mutex m1_; -// Mutex m2_ ABSL_ACQUIRED_AFTER(m1_); -#if ABSL_HAVE_ATTRIBUTE(acquired_after) -#define ABSL_ACQUIRED_AFTER(...) __attribute__((acquired_after(__VA_ARGS__))) -#else -#define ABSL_ACQUIRED_AFTER(...) -#endif - -#if ABSL_HAVE_ATTRIBUTE(acquired_before) -#define ABSL_ACQUIRED_BEFORE(...) __attribute__((acquired_before(__VA_ARGS__))) -#else -#define ABSL_ACQUIRED_BEFORE(...) -#endif - -// ABSL_EXCLUSIVE_LOCKS_REQUIRED() / ABSL_SHARED_LOCKS_REQUIRED() -// -// Documents a function that expects a mutex to be held prior to entry. -// The mutex is expected to be held both on entry to, and exit from, the -// function. -// -// An exclusive lock allows read-write access to the guarded data member(s), and -// only one thread can acquire a lock exclusively at any one time. A shared lock -// allows read-only access, and any number of threads can acquire a shared lock -// concurrently. -// -// Generally, non-const methods should be annotated with -// ABSL_EXCLUSIVE_LOCKS_REQUIRED, while const methods should be annotated with -// ABSL_SHARED_LOCKS_REQUIRED. -// -// Example: -// -// Mutex mu1, mu2; -// int a ABSL_GUARDED_BY(mu1); -// int b ABSL_GUARDED_BY(mu2); -// -// void foo() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu1, mu2) { ... } -// void bar() const ABSL_SHARED_LOCKS_REQUIRED(mu1, mu2) { ... } -#if ABSL_HAVE_ATTRIBUTE(exclusive_locks_required) -#define ABSL_EXCLUSIVE_LOCKS_REQUIRED(...) \ - __attribute__((exclusive_locks_required(__VA_ARGS__))) -#else -#define ABSL_EXCLUSIVE_LOCKS_REQUIRED(...) -#endif - -#if ABSL_HAVE_ATTRIBUTE(shared_locks_required) -#define ABSL_SHARED_LOCKS_REQUIRED(...) \ - __attribute__((shared_locks_required(__VA_ARGS__))) -#else -#define ABSL_SHARED_LOCKS_REQUIRED(...) -#endif - -// ABSL_LOCKS_EXCLUDED() -// -// Documents the locks acquired in the body of the function. These locks -// cannot be held when calling this function (as Abseil's `Mutex` locks are -// non-reentrant). -#if ABSL_HAVE_ATTRIBUTE(locks_excluded) -#define ABSL_LOCKS_EXCLUDED(...) __attribute__((locks_excluded(__VA_ARGS__))) -#else -#define ABSL_LOCKS_EXCLUDED(...) -#endif - -// ABSL_LOCK_RETURNED() -// -// Documents a function that returns a mutex without acquiring it. For example, -// a public getter method that returns a pointer to a private mutex should -// be annotated with ABSL_LOCK_RETURNED. -#if ABSL_HAVE_ATTRIBUTE(lock_returned) -#define ABSL_LOCK_RETURNED(x) __attribute__((lock_returned(x))) -#else -#define ABSL_LOCK_RETURNED(x) -#endif - -// ABSL_LOCKABLE -// -// Documents if a class/type is a lockable type (such as the `Mutex` class). -#if ABSL_HAVE_ATTRIBUTE(lockable) -#define ABSL_LOCKABLE __attribute__((lockable)) -#else -#define ABSL_LOCKABLE -#endif - -// ABSL_SCOPED_LOCKABLE -// -// Documents if a class does RAII locking (such as the `MutexLock` class). -// The constructor should use `LOCK_FUNCTION()` to specify the mutex that is -// acquired, and the destructor should use `UNLOCK_FUNCTION()` with no -// arguments; the analysis will assume that the destructor unlocks whatever the -// constructor locked. -#if ABSL_HAVE_ATTRIBUTE(scoped_lockable) -#define ABSL_SCOPED_LOCKABLE __attribute__((scoped_lockable)) -#else -#define ABSL_SCOPED_LOCKABLE -#endif - -// ABSL_EXCLUSIVE_LOCK_FUNCTION() -// -// Documents functions that acquire a lock in the body of a function, and do -// not release it. -#if ABSL_HAVE_ATTRIBUTE(exclusive_lock_function) -#define ABSL_EXCLUSIVE_LOCK_FUNCTION(...) \ - __attribute__((exclusive_lock_function(__VA_ARGS__))) -#else -#define ABSL_EXCLUSIVE_LOCK_FUNCTION(...) -#endif - -// ABSL_SHARED_LOCK_FUNCTION() -// -// Documents functions that acquire a shared (reader) lock in the body of a -// function, and do not release it. -#if ABSL_HAVE_ATTRIBUTE(shared_lock_function) -#define ABSL_SHARED_LOCK_FUNCTION(...) \ - __attribute__((shared_lock_function(__VA_ARGS__))) -#else -#define ABSL_SHARED_LOCK_FUNCTION(...) -#endif - -// ABSL_UNLOCK_FUNCTION() -// -// Documents functions that expect a lock to be held on entry to the function, -// and release it in the body of the function. -#if ABSL_HAVE_ATTRIBUTE(unlock_function) -#define ABSL_UNLOCK_FUNCTION(...) __attribute__((unlock_function(__VA_ARGS__))) -#else -#define ABSL_UNLOCK_FUNCTION(...) -#endif - -// ABSL_EXCLUSIVE_TRYLOCK_FUNCTION() / ABSL_SHARED_TRYLOCK_FUNCTION() -// -// Documents functions that try to acquire a lock, and return success or failure -// (or a non-boolean value that can be interpreted as a boolean). -// The first argument should be `true` for functions that return `true` on -// success, or `false` for functions that return `false` on success. The second -// argument specifies the mutex that is locked on success. If unspecified, this -// mutex is assumed to be `this`. -#if ABSL_HAVE_ATTRIBUTE(exclusive_trylock_function) -#define ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(...) \ - __attribute__((exclusive_trylock_function(__VA_ARGS__))) -#else -#define ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(...) -#endif - -#if ABSL_HAVE_ATTRIBUTE(shared_trylock_function) -#define ABSL_SHARED_TRYLOCK_FUNCTION(...) \ - __attribute__((shared_trylock_function(__VA_ARGS__))) -#else -#define ABSL_SHARED_TRYLOCK_FUNCTION(...) -#endif - -// ABSL_ASSERT_EXCLUSIVE_LOCK() / ABSL_ASSERT_SHARED_LOCK() -// -// Documents functions that dynamically check to see if a lock is held, and fail -// if it is not held. -#if ABSL_HAVE_ATTRIBUTE(assert_exclusive_lock) -#define ABSL_ASSERT_EXCLUSIVE_LOCK(...) \ - __attribute__((assert_exclusive_lock(__VA_ARGS__))) -#else -#define ABSL_ASSERT_EXCLUSIVE_LOCK(...) -#endif - -#if ABSL_HAVE_ATTRIBUTE(assert_shared_lock) -#define ABSL_ASSERT_SHARED_LOCK(...) \ - __attribute__((assert_shared_lock(__VA_ARGS__))) -#else -#define ABSL_ASSERT_SHARED_LOCK(...) -#endif - -// ABSL_NO_THREAD_SAFETY_ANALYSIS -// -// Turns off thread safety checking within the body of a particular function. -// This annotation is used to mark functions that are known to be correct, but -// the locking behavior is more complicated than the analyzer can handle. -#if ABSL_HAVE_ATTRIBUTE(no_thread_safety_analysis) -#define ABSL_NO_THREAD_SAFETY_ANALYSIS \ - __attribute__((no_thread_safety_analysis)) -#else -#define ABSL_NO_THREAD_SAFETY_ANALYSIS -#endif - -//------------------------------------------------------------------------------ -// Tool-Supplied Annotations -//------------------------------------------------------------------------------ - -// ABSL_TS_UNCHECKED should be placed around lock expressions that are not valid -// C++ syntax, but which are present for documentation purposes. These -// annotations will be ignored by the analysis. -#define ABSL_TS_UNCHECKED(x) "" - -// ABSL_TS_FIXME is used to mark lock expressions that are not valid C++ syntax. -// It is used by automated tools to mark and disable invalid expressions. -// The annotation should either be fixed, or changed to ABSL_TS_UNCHECKED. -#define ABSL_TS_FIXME(x) "" - -// Like ABSL_NO_THREAD_SAFETY_ANALYSIS, this turns off checking within the body -// of a particular function. However, this attribute is used to mark functions -// that are incorrect and need to be fixed. It is used by automated tools to -// avoid breaking the build when the analysis is updated. -// Code owners are expected to eventually fix the routine. -#define ABSL_NO_THREAD_SAFETY_ANALYSIS_FIXME ABSL_NO_THREAD_SAFETY_ANALYSIS - -// Similar to ABSL_NO_THREAD_SAFETY_ANALYSIS_FIXME, this macro marks a -// ABSL_GUARDED_BY annotation that needs to be fixed, because it is producing -// thread safety warning. It disables the ABSL_GUARDED_BY. -#define ABSL_GUARDED_BY_FIXME(x) - -// Disables warnings for a single read operation. This can be used to avoid -// warnings when it is known that the read is not actually involved in a race, -// but the compiler cannot confirm that. -#define ABSL_TS_UNCHECKED_READ(x) absl::base_internal::ts_unchecked_read(x) - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -// Takes a reference to a guarded data member, and returns an unguarded -// reference. -// Do not use this function directly, use ABSL_TS_UNCHECKED_READ instead. -template -inline const T& ts_unchecked_read(const T& v) ABSL_NO_THREAD_SAFETY_ANALYSIS { - return v; -} - -template -inline T& ts_unchecked_read(T& v) ABSL_NO_THREAD_SAFETY_ANALYSIS { - return v; -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_THREAD_ANNOTATIONS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/cleanup/cleanup.h b/client/webrtc/webrtc_demo/third/include/absl/cleanup/cleanup.h deleted file mode 100644 index 61b53d5..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/cleanup/cleanup.h +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2021 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: cleanup.h -// ----------------------------------------------------------------------------- -// -// `absl::Cleanup` implements the scope guard idiom, invoking the contained -// callback's `operator()() &&` on scope exit. -// -// Example: -// -// ``` -// absl::Status CopyGoodData(const char* source_path, const char* sink_path) { -// FILE* source_file = fopen(source_path, "r"); -// if (source_file == nullptr) { -// return absl::NotFoundError("No source file"); // No cleanups execute -// } -// -// // C++17 style cleanup using class template argument deduction -// absl::Cleanup source_closer = [source_file] { fclose(source_file); }; -// -// FILE* sink_file = fopen(sink_path, "w"); -// if (sink_file == nullptr) { -// return absl::NotFoundError("No sink file"); // First cleanup executes -// } -// -// // C++11 style cleanup using the factory function -// auto sink_closer = absl::MakeCleanup([sink_file] { fclose(sink_file); }); -// -// Data data; -// while (ReadData(source_file, &data)) { -// if (!data.IsGood()) { -// absl::Status result = absl::FailedPreconditionError("Read bad data"); -// return result; // Both cleanups execute -// } -// SaveData(sink_file, &data); -// } -// -// return absl::OkStatus(); // Both cleanups execute -// } -// ``` -// -// Methods: -// -// `std::move(cleanup).Cancel()` will prevent the callback from executing. -// -// `std::move(cleanup).Invoke()` will execute the callback early, before -// destruction, and prevent the callback from executing in the destructor. -// -// Usage: -// -// `absl::Cleanup` is not an interface type. It is only intended to be used -// within the body of a function. It is not a value type and instead models a -// control flow construct. Check out `defer` in Golang for something similar. - -#ifndef ABSL_CLEANUP_CLEANUP_H_ -#define ABSL_CLEANUP_CLEANUP_H_ - -#include - -#include "absl/base/config.h" -#include "absl/base/macros.h" -#include "absl/cleanup/internal/cleanup.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -template -class ABSL_MUST_USE_RESULT Cleanup final { - static_assert(cleanup_internal::WasDeduced(), - "Explicit template parameters are not supported."); - - static_assert(cleanup_internal::ReturnsVoid(), - "Callbacks that return values are not supported."); - - public: - Cleanup(Callback callback) // NOLINT - : storage_(std::move(callback), /* is_callback_engaged = */ true) {} - - Cleanup(Cleanup&& other) = default; - - void Cancel() && { - ABSL_HARDENING_ASSERT(storage_.IsCallbackEngaged()); - storage_.DisengageCallback(); - } - - void Invoke() && { - ABSL_HARDENING_ASSERT(storage_.IsCallbackEngaged()); - storage_.DisengageCallback(); - storage_.InvokeCallback(); - } - - ~Cleanup() { - if (storage_.IsCallbackEngaged()) { - storage_.InvokeCallback(); - } - } - - private: - cleanup_internal::Storage storage_; -}; - -// `absl::Cleanup c = /* callback */;` -// -// C++17 type deduction API for creating an instance of `absl::Cleanup` -#if defined(ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION) -template -Cleanup(Callback callback) -> Cleanup; -#endif // defined(ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION) - -// `auto c = absl::MakeCleanup(/* callback */);` -// -// C++11 type deduction API for creating an instance of `absl::Cleanup` -template -absl::Cleanup MakeCleanup(Callback callback) { - static_assert(cleanup_internal::WasDeduced(), - "Explicit template parameters are not supported."); - - static_assert(cleanup_internal::ReturnsVoid(), - "Callbacks that return values are not supported."); - - return {std::move(callback)}; -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CLEANUP_CLEANUP_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/cleanup/internal/cleanup.h b/client/webrtc/webrtc_demo/third/include/absl/cleanup/internal/cleanup.h deleted file mode 100644 index b4c4073..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/cleanup/internal/cleanup.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2021 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CLEANUP_INTERNAL_CLEANUP_H_ -#define ABSL_CLEANUP_INTERNAL_CLEANUP_H_ - -#include -#include - -#include "absl/base/internal/invoke.h" -#include "absl/base/thread_annotations.h" -#include "absl/utility/utility.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -namespace cleanup_internal { - -struct Tag {}; - -template -constexpr bool WasDeduced() { - return (std::is_same::value) && - (sizeof...(Args) == 0); -} - -template -constexpr bool ReturnsVoid() { - return (std::is_same, void>::value); -} - -template -class Storage { - public: - Storage() = delete; - - Storage(Callback callback, bool is_callback_engaged) - : callback_(std::move(callback)), - is_callback_engaged_(is_callback_engaged) {} - - Storage(Storage&& other) - : callback_(std::move(other.callback_)), - is_callback_engaged_( - absl::exchange(other.is_callback_engaged_, false)) {} - - Storage(const Storage& other) = delete; - - Storage& operator=(Storage&& other) = delete; - - Storage& operator=(const Storage& other) = delete; - - bool IsCallbackEngaged() const { return is_callback_engaged_; } - - void DisengageCallback() { is_callback_engaged_ = false; } - - void InvokeCallback() ABSL_NO_THREAD_SAFETY_ANALYSIS { - std::move(callback_)(); - } - - private: - Callback callback_; - bool is_callback_engaged_; -}; - -} // namespace cleanup_internal - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CLEANUP_INTERNAL_CLEANUP_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/btree_map.h b/client/webrtc/webrtc_demo/third/include/absl/container/btree_map.h deleted file mode 100644 index ea49d44..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/btree_map.h +++ /dev/null @@ -1,768 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: btree_map.h -// ----------------------------------------------------------------------------- -// -// This header file defines B-tree maps: sorted associative containers mapping -// keys to values. -// -// * `absl::btree_map<>` -// * `absl::btree_multimap<>` -// -// These B-tree types are similar to the corresponding types in the STL -// (`std::map` and `std::multimap`) and generally conform to the STL interfaces -// of those types. However, because they are implemented using B-trees, they -// are more efficient in most situations. -// -// Unlike `std::map` and `std::multimap`, which are commonly implemented using -// red-black tree nodes, B-tree maps use more generic B-tree nodes able to hold -// multiple values per node. Holding multiple values per node often makes -// B-tree maps perform better than their `std::map` counterparts, because -// multiple entries can be checked within the same cache hit. -// -// However, these types should not be considered drop-in replacements for -// `std::map` and `std::multimap` as there are some API differences, which are -// noted in this header file. -// -// Importantly, insertions and deletions may invalidate outstanding iterators, -// pointers, and references to elements. Such invalidations are typically only -// an issue if insertion and deletion operations are interleaved with the use of -// more than one iterator, pointer, or reference simultaneously. For this -// reason, `insert()` and `erase()` return a valid iterator at the current -// position. - -#ifndef ABSL_CONTAINER_BTREE_MAP_H_ -#define ABSL_CONTAINER_BTREE_MAP_H_ - -#include "absl/container/internal/btree.h" // IWYU pragma: export -#include "absl/container/internal/btree_container.h" // IWYU pragma: export - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// absl::btree_map<> -// -// An `absl::btree_map` is an ordered associative container of -// unique keys and associated values designed to be a more efficient replacement -// for `std::map` (in most cases). -// -// Keys are sorted using an (optional) comparison function, which defaults to -// `std::less`. -// -// An `absl::btree_map` uses a default allocator of -// `std::allocator>` to allocate (and deallocate) -// nodes, and construct and destruct values within those nodes. You may -// instead specify a custom allocator `A` (which in turn requires specifying a -// custom comparator `C`) as in `absl::btree_map`. -// -template , - typename Alloc = std::allocator>> -class btree_map - : public container_internal::btree_map_container< - container_internal::btree>> { - using Base = typename btree_map::btree_map_container; - - public: - // Constructors and Assignment Operators - // - // A `btree_map` supports the same overload set as `std::map` - // for construction and assignment: - // - // * Default constructor - // - // absl::btree_map map1; - // - // * Initializer List constructor - // - // absl::btree_map map2 = - // {{1, "huey"}, {2, "dewey"}, {3, "louie"},}; - // - // * Copy constructor - // - // absl::btree_map map3(map2); - // - // * Copy assignment operator - // - // absl::btree_map map4; - // map4 = map3; - // - // * Move constructor - // - // // Move is guaranteed efficient - // absl::btree_map map5(std::move(map4)); - // - // * Move assignment operator - // - // // May be efficient if allocators are compatible - // absl::btree_map map6; - // map6 = std::move(map5); - // - // * Range constructor - // - // std::vector> v = {{1, "a"}, {2, "b"}}; - // absl::btree_map map7(v.begin(), v.end()); - btree_map() {} - using Base::Base; - - // btree_map::begin() - // - // Returns an iterator to the beginning of the `btree_map`. - using Base::begin; - - // btree_map::cbegin() - // - // Returns a const iterator to the beginning of the `btree_map`. - using Base::cbegin; - - // btree_map::end() - // - // Returns an iterator to the end of the `btree_map`. - using Base::end; - - // btree_map::cend() - // - // Returns a const iterator to the end of the `btree_map`. - using Base::cend; - - // btree_map::empty() - // - // Returns whether or not the `btree_map` is empty. - using Base::empty; - - // btree_map::max_size() - // - // Returns the largest theoretical possible number of elements within a - // `btree_map` under current memory constraints. This value can be thought - // of as the largest value of `std::distance(begin(), end())` for a - // `btree_map`. - using Base::max_size; - - // btree_map::size() - // - // Returns the number of elements currently within the `btree_map`. - using Base::size; - - // btree_map::clear() - // - // Removes all elements from the `btree_map`. Invalidates any references, - // pointers, or iterators referring to contained elements. - using Base::clear; - - // btree_map::erase() - // - // Erases elements within the `btree_map`. If an erase occurs, any references, - // pointers, or iterators are invalidated. - // Overloads are listed below. - // - // iterator erase(iterator position): - // iterator erase(const_iterator position): - // - // Erases the element at `position` of the `btree_map`, returning - // the iterator pointing to the element after the one that was erased - // (or end() if none exists). - // - // iterator erase(const_iterator first, const_iterator last): - // - // Erases the elements in the open interval [`first`, `last`), returning - // the iterator pointing to the element after the interval that was erased - // (or end() if none exists). - // - // template size_type erase(const K& key): - // - // Erases the element with the matching key, if it exists, returning the - // number of elements erased (0 or 1). - using Base::erase; - - // btree_map::insert() - // - // Inserts an element of the specified value into the `btree_map`, - // returning an iterator pointing to the newly inserted element, provided that - // an element with the given key does not already exist. If an insertion - // occurs, any references, pointers, or iterators are invalidated. - // Overloads are listed below. - // - // std::pair insert(const value_type& value): - // - // Inserts a value into the `btree_map`. Returns a pair consisting of an - // iterator to the inserted element (or to the element that prevented the - // insertion) and a bool denoting whether the insertion took place. - // - // std::pair insert(value_type&& value): - // - // Inserts a moveable value into the `btree_map`. Returns a pair - // consisting of an iterator to the inserted element (or to the element that - // prevented the insertion) and a bool denoting whether the insertion took - // place. - // - // iterator insert(const_iterator hint, const value_type& value): - // iterator insert(const_iterator hint, value_type&& value): - // - // Inserts a value, using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. Returns an iterator to the - // inserted element, or to the existing element that prevented the - // insertion. - // - // void insert(InputIterator first, InputIterator last): - // - // Inserts a range of values [`first`, `last`). - // - // void insert(std::initializer_list ilist): - // - // Inserts the elements within the initializer list `ilist`. - using Base::insert; - - // btree_map::insert_or_assign() - // - // Inserts an element of the specified value into the `btree_map` provided - // that a value with the given key does not already exist, or replaces the - // corresponding mapped type with the forwarded `obj` argument if a key for - // that value already exists, returning an iterator pointing to the newly - // inserted element. Overloads are listed below. - // - // pair insert_or_assign(const key_type& k, M&& obj): - // pair insert_or_assign(key_type&& k, M&& obj): - // - // Inserts/Assigns (or moves) the element of the specified key into the - // `btree_map`. If the returned bool is true, insertion took place, and if - // it's false, assignment took place. - // - // iterator insert_or_assign(const_iterator hint, - // const key_type& k, M&& obj): - // iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj): - // - // Inserts/Assigns (or moves) the element of the specified key into the - // `btree_map` using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. - using Base::insert_or_assign; - - // btree_map::emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_map`, provided that no element with the given key - // already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. Prefer `try_emplace()` unless your key is not - // copyable or moveable. - // - // If an insertion occurs, any references, pointers, or iterators are - // invalidated. - using Base::emplace; - - // btree_map::emplace_hint() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_map`, using the position of `hint` as a non-binding - // suggestion for where to begin the insertion search, and only inserts - // provided that no element with the given key already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. Prefer `try_emplace()` unless your key is not - // copyable or moveable. - // - // If an insertion occurs, any references, pointers, or iterators are - // invalidated. - using Base::emplace_hint; - - // btree_map::try_emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_map`, provided that no element with the given key - // already exists. Unlike `emplace()`, if an element with the given key - // already exists, we guarantee that no element is constructed. - // - // If an insertion occurs, any references, pointers, or iterators are - // invalidated. - // - // Overloads are listed below. - // - // std::pair try_emplace(const key_type& k, Args&&... args): - // std::pair try_emplace(key_type&& k, Args&&... args): - // - // Inserts (via copy or move) the element of the specified key into the - // `btree_map`. - // - // iterator try_emplace(const_iterator hint, - // const key_type& k, Args&&... args): - // iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args): - // - // Inserts (via copy or move) the element of the specified key into the - // `btree_map` using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. - using Base::try_emplace; - - // btree_map::extract() - // - // Extracts the indicated element, erasing it in the process, and returns it - // as a C++17-compatible node handle. Overloads are listed below. - // - // node_type extract(const_iterator position): - // - // Extracts the element at the indicated position and returns a node handle - // owning that extracted data. - // - // template node_type extract(const K& k): - // - // Extracts the element with the key matching the passed key value and - // returns a node handle owning that extracted data. If the `btree_map` - // does not contain an element with a matching key, this function returns an - // empty node handle. - // - // NOTE: when compiled in an earlier version of C++ than C++17, - // `node_type::key()` returns a const reference to the key instead of a - // mutable reference. We cannot safely return a mutable reference without - // std::launder (which is not available before C++17). - // - // NOTE: In this context, `node_type` refers to the C++17 concept of a - // move-only type that owns and provides access to the elements in associative - // containers (https://en.cppreference.com/w/cpp/container/node_handle). - // It does NOT refer to the data layout of the underlying btree. - using Base::extract; - - // btree_map::merge() - // - // Extracts elements from a given `source` btree_map into this - // `btree_map`. If the destination `btree_map` already contains an - // element with an equivalent key, that element is not extracted. - using Base::merge; - - // btree_map::swap(btree_map& other) - // - // Exchanges the contents of this `btree_map` with those of the `other` - // btree_map, avoiding invocation of any move, copy, or swap operations on - // individual elements. - // - // All iterators and references on the `btree_map` remain valid, excepting - // for the past-the-end iterator, which is invalidated. - using Base::swap; - - // btree_map::at() - // - // Returns a reference to the mapped value of the element with key equivalent - // to the passed key. - using Base::at; - - // btree_map::contains() - // - // template bool contains(const K& key) const: - // - // Determines whether an element comparing equal to the given `key` exists - // within the `btree_map`, returning `true` if so or `false` otherwise. - // - // Supports heterogeneous lookup, provided that the map is provided a - // compatible heterogeneous comparator. - using Base::contains; - - // btree_map::count() - // - // template size_type count(const K& key) const: - // - // Returns the number of elements comparing equal to the given `key` within - // the `btree_map`. Note that this function will return either `1` or `0` - // since duplicate elements are not allowed within a `btree_map`. - // - // Supports heterogeneous lookup, provided that the map is provided a - // compatible heterogeneous comparator. - using Base::count; - - // btree_map::equal_range() - // - // Returns a half-open range [first, last), defined by a `std::pair` of two - // iterators, containing all elements with the passed key in the `btree_map`. - using Base::equal_range; - - // btree_map::find() - // - // template iterator find(const K& key): - // template const_iterator find(const K& key) const: - // - // Finds an element with the passed `key` within the `btree_map`. - // - // Supports heterogeneous lookup, provided that the map is provided a - // compatible heterogeneous comparator. - using Base::find; - - // btree_map::operator[]() - // - // Returns a reference to the value mapped to the passed key within the - // `btree_map`, performing an `insert()` if the key does not already - // exist. - // - // If an insertion occurs, any references, pointers, or iterators are - // invalidated. Otherwise iterators are not affected and references are not - // invalidated. Overloads are listed below. - // - // T& operator[](key_type&& key): - // T& operator[](const key_type& key): - // - // Inserts a value_type object constructed in-place if the element with the - // given key does not exist. - using Base::operator[]; - - // btree_map::get_allocator() - // - // Returns the allocator function associated with this `btree_map`. - using Base::get_allocator; - - // btree_map::key_comp(); - // - // Returns the key comparator associated with this `btree_map`. - using Base::key_comp; - - // btree_map::value_comp(); - // - // Returns the value comparator associated with this `btree_map`. - using Base::value_comp; -}; - -// absl::swap(absl::btree_map<>, absl::btree_map<>) -// -// Swaps the contents of two `absl::btree_map` containers. -template -void swap(btree_map &x, btree_map &y) { - return x.swap(y); -} - -// absl::erase_if(absl::btree_map<>, Pred) -// -// Erases all elements that satisfy the predicate pred from the container. -template -void erase_if(btree_map &map, Pred pred) { - for (auto it = map.begin(); it != map.end();) { - if (pred(*it)) { - it = map.erase(it); - } else { - ++it; - } - } -} - -// absl::btree_multimap -// -// An `absl::btree_multimap` is an ordered associative container of -// keys and associated values designed to be a more efficient replacement for -// `std::multimap` (in most cases). Unlike `absl::btree_map`, a B-tree multimap -// allows multiple elements with equivalent keys. -// -// Keys are sorted using an (optional) comparison function, which defaults to -// `std::less`. -// -// An `absl::btree_multimap` uses a default allocator of -// `std::allocator>` to allocate (and deallocate) -// nodes, and construct and destruct values within those nodes. You may -// instead specify a custom allocator `A` (which in turn requires specifying a -// custom comparator `C`) as in `absl::btree_multimap`. -// -template , - typename Alloc = std::allocator>> -class btree_multimap - : public container_internal::btree_multimap_container< - container_internal::btree>> { - using Base = typename btree_multimap::btree_multimap_container; - - public: - // Constructors and Assignment Operators - // - // A `btree_multimap` supports the same overload set as `std::multimap` - // for construction and assignment: - // - // * Default constructor - // - // absl::btree_multimap map1; - // - // * Initializer List constructor - // - // absl::btree_multimap map2 = - // {{1, "huey"}, {2, "dewey"}, {3, "louie"},}; - // - // * Copy constructor - // - // absl::btree_multimap map3(map2); - // - // * Copy assignment operator - // - // absl::btree_multimap map4; - // map4 = map3; - // - // * Move constructor - // - // // Move is guaranteed efficient - // absl::btree_multimap map5(std::move(map4)); - // - // * Move assignment operator - // - // // May be efficient if allocators are compatible - // absl::btree_multimap map6; - // map6 = std::move(map5); - // - // * Range constructor - // - // std::vector> v = {{1, "a"}, {2, "b"}}; - // absl::btree_multimap map7(v.begin(), v.end()); - btree_multimap() {} - using Base::Base; - - // btree_multimap::begin() - // - // Returns an iterator to the beginning of the `btree_multimap`. - using Base::begin; - - // btree_multimap::cbegin() - // - // Returns a const iterator to the beginning of the `btree_multimap`. - using Base::cbegin; - - // btree_multimap::end() - // - // Returns an iterator to the end of the `btree_multimap`. - using Base::end; - - // btree_multimap::cend() - // - // Returns a const iterator to the end of the `btree_multimap`. - using Base::cend; - - // btree_multimap::empty() - // - // Returns whether or not the `btree_multimap` is empty. - using Base::empty; - - // btree_multimap::max_size() - // - // Returns the largest theoretical possible number of elements within a - // `btree_multimap` under current memory constraints. This value can be - // thought of as the largest value of `std::distance(begin(), end())` for a - // `btree_multimap`. - using Base::max_size; - - // btree_multimap::size() - // - // Returns the number of elements currently within the `btree_multimap`. - using Base::size; - - // btree_multimap::clear() - // - // Removes all elements from the `btree_multimap`. Invalidates any references, - // pointers, or iterators referring to contained elements. - using Base::clear; - - // btree_multimap::erase() - // - // Erases elements within the `btree_multimap`. If an erase occurs, any - // references, pointers, or iterators are invalidated. - // Overloads are listed below. - // - // iterator erase(iterator position): - // iterator erase(const_iterator position): - // - // Erases the element at `position` of the `btree_multimap`, returning - // the iterator pointing to the element after the one that was erased - // (or end() if none exists). - // - // iterator erase(const_iterator first, const_iterator last): - // - // Erases the elements in the open interval [`first`, `last`), returning - // the iterator pointing to the element after the interval that was erased - // (or end() if none exists). - // - // template size_type erase(const K& key): - // - // Erases the elements matching the key, if any exist, returning the - // number of elements erased. - using Base::erase; - - // btree_multimap::insert() - // - // Inserts an element of the specified value into the `btree_multimap`, - // returning an iterator pointing to the newly inserted element. - // Any references, pointers, or iterators are invalidated. Overloads are - // listed below. - // - // iterator insert(const value_type& value): - // - // Inserts a value into the `btree_multimap`, returning an iterator to the - // inserted element. - // - // iterator insert(value_type&& value): - // - // Inserts a moveable value into the `btree_multimap`, returning an iterator - // to the inserted element. - // - // iterator insert(const_iterator hint, const value_type& value): - // iterator insert(const_iterator hint, value_type&& value): - // - // Inserts a value, using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. Returns an iterator to the - // inserted element. - // - // void insert(InputIterator first, InputIterator last): - // - // Inserts a range of values [`first`, `last`). - // - // void insert(std::initializer_list ilist): - // - // Inserts the elements within the initializer list `ilist`. - using Base::insert; - - // btree_multimap::emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_multimap`. Any references, pointers, or iterators are - // invalidated. - using Base::emplace; - - // btree_multimap::emplace_hint() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_multimap`, using the position of `hint` as a non-binding - // suggestion for where to begin the insertion search. - // - // Any references, pointers, or iterators are invalidated. - using Base::emplace_hint; - - // btree_multimap::extract() - // - // Extracts the indicated element, erasing it in the process, and returns it - // as a C++17-compatible node handle. Overloads are listed below. - // - // node_type extract(const_iterator position): - // - // Extracts the element at the indicated position and returns a node handle - // owning that extracted data. - // - // template node_type extract(const K& k): - // - // Extracts the element with the key matching the passed key value and - // returns a node handle owning that extracted data. If the `btree_multimap` - // does not contain an element with a matching key, this function returns an - // empty node handle. - // - // NOTE: when compiled in an earlier version of C++ than C++17, - // `node_type::key()` returns a const reference to the key instead of a - // mutable reference. We cannot safely return a mutable reference without - // std::launder (which is not available before C++17). - // - // NOTE: In this context, `node_type` refers to the C++17 concept of a - // move-only type that owns and provides access to the elements in associative - // containers (https://en.cppreference.com/w/cpp/container/node_handle). - // It does NOT refer to the data layout of the underlying btree. - using Base::extract; - - // btree_multimap::merge() - // - // Extracts elements from a given `source` btree_multimap into this - // `btree_multimap`. If the destination `btree_multimap` already contains an - // element with an equivalent key, that element is not extracted. - using Base::merge; - - // btree_multimap::swap(btree_multimap& other) - // - // Exchanges the contents of this `btree_multimap` with those of the `other` - // btree_multimap, avoiding invocation of any move, copy, or swap operations - // on individual elements. - // - // All iterators and references on the `btree_multimap` remain valid, - // excepting for the past-the-end iterator, which is invalidated. - using Base::swap; - - // btree_multimap::contains() - // - // template bool contains(const K& key) const: - // - // Determines whether an element comparing equal to the given `key` exists - // within the `btree_multimap`, returning `true` if so or `false` otherwise. - // - // Supports heterogeneous lookup, provided that the map is provided a - // compatible heterogeneous comparator. - using Base::contains; - - // btree_multimap::count() - // - // template size_type count(const K& key) const: - // - // Returns the number of elements comparing equal to the given `key` within - // the `btree_multimap`. - // - // Supports heterogeneous lookup, provided that the map is provided a - // compatible heterogeneous comparator. - using Base::count; - - // btree_multimap::equal_range() - // - // Returns a half-open range [first, last), defined by a `std::pair` of two - // iterators, containing all elements with the passed key in the - // `btree_multimap`. - using Base::equal_range; - - // btree_multimap::find() - // - // template iterator find(const K& key): - // template const_iterator find(const K& key) const: - // - // Finds an element with the passed `key` within the `btree_multimap`. - // - // Supports heterogeneous lookup, provided that the map is provided a - // compatible heterogeneous comparator. - using Base::find; - - // btree_multimap::get_allocator() - // - // Returns the allocator function associated with this `btree_multimap`. - using Base::get_allocator; - - // btree_multimap::key_comp(); - // - // Returns the key comparator associated with this `btree_multimap`. - using Base::key_comp; - - // btree_multimap::value_comp(); - // - // Returns the value comparator associated with this `btree_multimap`. - using Base::value_comp; -}; - -// absl::swap(absl::btree_multimap<>, absl::btree_multimap<>) -// -// Swaps the contents of two `absl::btree_multimap` containers. -template -void swap(btree_multimap &x, btree_multimap &y) { - return x.swap(y); -} - -// absl::erase_if(absl::btree_multimap<>, Pred) -// -// Erases all elements that satisfy the predicate pred from the container. -template -void erase_if(btree_multimap &map, Pred pred) { - for (auto it = map.begin(); it != map.end();) { - if (pred(*it)) { - it = map.erase(it); - } else { - ++it; - } - } -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_BTREE_MAP_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/btree_set.h b/client/webrtc/webrtc_demo/third/include/absl/container/btree_set.h deleted file mode 100644 index 21ef0a0..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/btree_set.h +++ /dev/null @@ -1,683 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: btree_set.h -// ----------------------------------------------------------------------------- -// -// This header file defines B-tree sets: sorted associative containers of -// values. -// -// * `absl::btree_set<>` -// * `absl::btree_multiset<>` -// -// These B-tree types are similar to the corresponding types in the STL -// (`std::set` and `std::multiset`) and generally conform to the STL interfaces -// of those types. However, because they are implemented using B-trees, they -// are more efficient in most situations. -// -// Unlike `std::set` and `std::multiset`, which are commonly implemented using -// red-black tree nodes, B-tree sets use more generic B-tree nodes able to hold -// multiple values per node. Holding multiple values per node often makes -// B-tree sets perform better than their `std::set` counterparts, because -// multiple entries can be checked within the same cache hit. -// -// However, these types should not be considered drop-in replacements for -// `std::set` and `std::multiset` as there are some API differences, which are -// noted in this header file. -// -// Importantly, insertions and deletions may invalidate outstanding iterators, -// pointers, and references to elements. Such invalidations are typically only -// an issue if insertion and deletion operations are interleaved with the use of -// more than one iterator, pointer, or reference simultaneously. For this -// reason, `insert()` and `erase()` return a valid iterator at the current -// position. - -#ifndef ABSL_CONTAINER_BTREE_SET_H_ -#define ABSL_CONTAINER_BTREE_SET_H_ - -#include "absl/container/internal/btree.h" // IWYU pragma: export -#include "absl/container/internal/btree_container.h" // IWYU pragma: export - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// absl::btree_set<> -// -// An `absl::btree_set` is an ordered associative container of unique key -// values designed to be a more efficient replacement for `std::set` (in most -// cases). -// -// Keys are sorted using an (optional) comparison function, which defaults to -// `std::less`. -// -// An `absl::btree_set` uses a default allocator of `std::allocator` to -// allocate (and deallocate) nodes, and construct and destruct values within -// those nodes. You may instead specify a custom allocator `A` (which in turn -// requires specifying a custom comparator `C`) as in -// `absl::btree_set`. -// -template , - typename Alloc = std::allocator> -class btree_set - : public container_internal::btree_set_container< - container_internal::btree>> { - using Base = typename btree_set::btree_set_container; - - public: - // Constructors and Assignment Operators - // - // A `btree_set` supports the same overload set as `std::set` - // for construction and assignment: - // - // * Default constructor - // - // absl::btree_set set1; - // - // * Initializer List constructor - // - // absl::btree_set set2 = - // {{"huey"}, {"dewey"}, {"louie"},}; - // - // * Copy constructor - // - // absl::btree_set set3(set2); - // - // * Copy assignment operator - // - // absl::btree_set set4; - // set4 = set3; - // - // * Move constructor - // - // // Move is guaranteed efficient - // absl::btree_set set5(std::move(set4)); - // - // * Move assignment operator - // - // // May be efficient if allocators are compatible - // absl::btree_set set6; - // set6 = std::move(set5); - // - // * Range constructor - // - // std::vector v = {"a", "b"}; - // absl::btree_set set7(v.begin(), v.end()); - btree_set() {} - using Base::Base; - - // btree_set::begin() - // - // Returns an iterator to the beginning of the `btree_set`. - using Base::begin; - - // btree_set::cbegin() - // - // Returns a const iterator to the beginning of the `btree_set`. - using Base::cbegin; - - // btree_set::end() - // - // Returns an iterator to the end of the `btree_set`. - using Base::end; - - // btree_set::cend() - // - // Returns a const iterator to the end of the `btree_set`. - using Base::cend; - - // btree_set::empty() - // - // Returns whether or not the `btree_set` is empty. - using Base::empty; - - // btree_set::max_size() - // - // Returns the largest theoretical possible number of elements within a - // `btree_set` under current memory constraints. This value can be thought - // of as the largest value of `std::distance(begin(), end())` for a - // `btree_set`. - using Base::max_size; - - // btree_set::size() - // - // Returns the number of elements currently within the `btree_set`. - using Base::size; - - // btree_set::clear() - // - // Removes all elements from the `btree_set`. Invalidates any references, - // pointers, or iterators referring to contained elements. - using Base::clear; - - // btree_set::erase() - // - // Erases elements within the `btree_set`. Overloads are listed below. - // - // iterator erase(iterator position): - // iterator erase(const_iterator position): - // - // Erases the element at `position` of the `btree_set`, returning - // the iterator pointing to the element after the one that was erased - // (or end() if none exists). - // - // iterator erase(const_iterator first, const_iterator last): - // - // Erases the elements in the open interval [`first`, `last`), returning - // the iterator pointing to the element after the interval that was erased - // (or end() if none exists). - // - // template size_type erase(const K& key): - // - // Erases the element with the matching key, if it exists, returning the - // number of elements erased (0 or 1). - using Base::erase; - - // btree_set::insert() - // - // Inserts an element of the specified value into the `btree_set`, - // returning an iterator pointing to the newly inserted element, provided that - // an element with the given key does not already exist. If an insertion - // occurs, any references, pointers, or iterators are invalidated. - // Overloads are listed below. - // - // std::pair insert(const value_type& value): - // - // Inserts a value into the `btree_set`. Returns a pair consisting of an - // iterator to the inserted element (or to the element that prevented the - // insertion) and a bool denoting whether the insertion took place. - // - // std::pair insert(value_type&& value): - // - // Inserts a moveable value into the `btree_set`. Returns a pair - // consisting of an iterator to the inserted element (or to the element that - // prevented the insertion) and a bool denoting whether the insertion took - // place. - // - // iterator insert(const_iterator hint, const value_type& value): - // iterator insert(const_iterator hint, value_type&& value): - // - // Inserts a value, using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. Returns an iterator to the - // inserted element, or to the existing element that prevented the - // insertion. - // - // void insert(InputIterator first, InputIterator last): - // - // Inserts a range of values [`first`, `last`). - // - // void insert(std::initializer_list ilist): - // - // Inserts the elements within the initializer list `ilist`. - using Base::insert; - - // btree_set::emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_set`, provided that no element with the given key - // already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. - // - // If an insertion occurs, any references, pointers, or iterators are - // invalidated. - using Base::emplace; - - // btree_set::emplace_hint() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_set`, using the position of `hint` as a non-binding - // suggestion for where to begin the insertion search, and only inserts - // provided that no element with the given key already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. - // - // If an insertion occurs, any references, pointers, or iterators are - // invalidated. - using Base::emplace_hint; - - // btree_set::extract() - // - // Extracts the indicated element, erasing it in the process, and returns it - // as a C++17-compatible node handle. Overloads are listed below. - // - // node_type extract(const_iterator position): - // - // Extracts the element at the indicated position and returns a node handle - // owning that extracted data. - // - // template node_type extract(const K& k): - // - // Extracts the element with the key matching the passed key value and - // returns a node handle owning that extracted data. If the `btree_set` - // does not contain an element with a matching key, this function returns an - // empty node handle. - // - // NOTE: In this context, `node_type` refers to the C++17 concept of a - // move-only type that owns and provides access to the elements in associative - // containers (https://en.cppreference.com/w/cpp/container/node_handle). - // It does NOT refer to the data layout of the underlying btree. - using Base::extract; - - // btree_set::merge() - // - // Extracts elements from a given `source` btree_set into this - // `btree_set`. If the destination `btree_set` already contains an - // element with an equivalent key, that element is not extracted. - using Base::merge; - - // btree_set::swap(btree_set& other) - // - // Exchanges the contents of this `btree_set` with those of the `other` - // btree_set, avoiding invocation of any move, copy, or swap operations on - // individual elements. - // - // All iterators and references on the `btree_set` remain valid, excepting - // for the past-the-end iterator, which is invalidated. - using Base::swap; - - // btree_set::contains() - // - // template bool contains(const K& key) const: - // - // Determines whether an element comparing equal to the given `key` exists - // within the `btree_set`, returning `true` if so or `false` otherwise. - // - // Supports heterogeneous lookup, provided that the set is provided a - // compatible heterogeneous comparator. - using Base::contains; - - // btree_set::count() - // - // template size_type count(const K& key) const: - // - // Returns the number of elements comparing equal to the given `key` within - // the `btree_set`. Note that this function will return either `1` or `0` - // since duplicate elements are not allowed within a `btree_set`. - // - // Supports heterogeneous lookup, provided that the set is provided a - // compatible heterogeneous comparator. - using Base::count; - - // btree_set::equal_range() - // - // Returns a closed range [first, last], defined by a `std::pair` of two - // iterators, containing all elements with the passed key in the - // `btree_set`. - using Base::equal_range; - - // btree_set::find() - // - // template iterator find(const K& key): - // template const_iterator find(const K& key) const: - // - // Finds an element with the passed `key` within the `btree_set`. - // - // Supports heterogeneous lookup, provided that the set is provided a - // compatible heterogeneous comparator. - using Base::find; - - // btree_set::get_allocator() - // - // Returns the allocator function associated with this `btree_set`. - using Base::get_allocator; - - // btree_set::key_comp(); - // - // Returns the key comparator associated with this `btree_set`. - using Base::key_comp; - - // btree_set::value_comp(); - // - // Returns the value comparator associated with this `btree_set`. The keys to - // sort the elements are the values themselves, therefore `value_comp` and its - // sibling member function `key_comp` are equivalent. - using Base::value_comp; -}; - -// absl::swap(absl::btree_set<>, absl::btree_set<>) -// -// Swaps the contents of two `absl::btree_set` containers. -template -void swap(btree_set &x, btree_set &y) { - return x.swap(y); -} - -// absl::erase_if(absl::btree_set<>, Pred) -// -// Erases all elements that satisfy the predicate pred from the container. -template -void erase_if(btree_set &set, Pred pred) { - for (auto it = set.begin(); it != set.end();) { - if (pred(*it)) { - it = set.erase(it); - } else { - ++it; - } - } -} - -// absl::btree_multiset<> -// -// An `absl::btree_multiset` is an ordered associative container of -// keys and associated values designed to be a more efficient replacement -// for `std::multiset` (in most cases). Unlike `absl::btree_set`, a B-tree -// multiset allows equivalent elements. -// -// Keys are sorted using an (optional) comparison function, which defaults to -// `std::less`. -// -// An `absl::btree_multiset` uses a default allocator of `std::allocator` -// to allocate (and deallocate) nodes, and construct and destruct values within -// those nodes. You may instead specify a custom allocator `A` (which in turn -// requires specifying a custom comparator `C`) as in -// `absl::btree_multiset`. -// -template , - typename Alloc = std::allocator> -class btree_multiset - : public container_internal::btree_multiset_container< - container_internal::btree>> { - using Base = typename btree_multiset::btree_multiset_container; - - public: - // Constructors and Assignment Operators - // - // A `btree_multiset` supports the same overload set as `std::set` - // for construction and assignment: - // - // * Default constructor - // - // absl::btree_multiset set1; - // - // * Initializer List constructor - // - // absl::btree_multiset set2 = - // {{"huey"}, {"dewey"}, {"louie"},}; - // - // * Copy constructor - // - // absl::btree_multiset set3(set2); - // - // * Copy assignment operator - // - // absl::btree_multiset set4; - // set4 = set3; - // - // * Move constructor - // - // // Move is guaranteed efficient - // absl::btree_multiset set5(std::move(set4)); - // - // * Move assignment operator - // - // // May be efficient if allocators are compatible - // absl::btree_multiset set6; - // set6 = std::move(set5); - // - // * Range constructor - // - // std::vector v = {"a", "b"}; - // absl::btree_multiset set7(v.begin(), v.end()); - btree_multiset() {} - using Base::Base; - - // btree_multiset::begin() - // - // Returns an iterator to the beginning of the `btree_multiset`. - using Base::begin; - - // btree_multiset::cbegin() - // - // Returns a const iterator to the beginning of the `btree_multiset`. - using Base::cbegin; - - // btree_multiset::end() - // - // Returns an iterator to the end of the `btree_multiset`. - using Base::end; - - // btree_multiset::cend() - // - // Returns a const iterator to the end of the `btree_multiset`. - using Base::cend; - - // btree_multiset::empty() - // - // Returns whether or not the `btree_multiset` is empty. - using Base::empty; - - // btree_multiset::max_size() - // - // Returns the largest theoretical possible number of elements within a - // `btree_multiset` under current memory constraints. This value can be - // thought of as the largest value of `std::distance(begin(), end())` for a - // `btree_multiset`. - using Base::max_size; - - // btree_multiset::size() - // - // Returns the number of elements currently within the `btree_multiset`. - using Base::size; - - // btree_multiset::clear() - // - // Removes all elements from the `btree_multiset`. Invalidates any references, - // pointers, or iterators referring to contained elements. - using Base::clear; - - // btree_multiset::erase() - // - // Erases elements within the `btree_multiset`. Overloads are listed below. - // - // iterator erase(iterator position): - // iterator erase(const_iterator position): - // - // Erases the element at `position` of the `btree_multiset`, returning - // the iterator pointing to the element after the one that was erased - // (or end() if none exists). - // - // iterator erase(const_iterator first, const_iterator last): - // - // Erases the elements in the open interval [`first`, `last`), returning - // the iterator pointing to the element after the interval that was erased - // (or end() if none exists). - // - // template size_type erase(const K& key): - // - // Erases the elements matching the key, if any exist, returning the - // number of elements erased. - using Base::erase; - - // btree_multiset::insert() - // - // Inserts an element of the specified value into the `btree_multiset`, - // returning an iterator pointing to the newly inserted element. - // Any references, pointers, or iterators are invalidated. Overloads are - // listed below. - // - // iterator insert(const value_type& value): - // - // Inserts a value into the `btree_multiset`, returning an iterator to the - // inserted element. - // - // iterator insert(value_type&& value): - // - // Inserts a moveable value into the `btree_multiset`, returning an iterator - // to the inserted element. - // - // iterator insert(const_iterator hint, const value_type& value): - // iterator insert(const_iterator hint, value_type&& value): - // - // Inserts a value, using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. Returns an iterator to the - // inserted element. - // - // void insert(InputIterator first, InputIterator last): - // - // Inserts a range of values [`first`, `last`). - // - // void insert(std::initializer_list ilist): - // - // Inserts the elements within the initializer list `ilist`. - using Base::insert; - - // btree_multiset::emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_multiset`. Any references, pointers, or iterators are - // invalidated. - using Base::emplace; - - // btree_multiset::emplace_hint() - // - // Inserts an element of the specified value by constructing it in-place - // within the `btree_multiset`, using the position of `hint` as a non-binding - // suggestion for where to begin the insertion search. - // - // Any references, pointers, or iterators are invalidated. - using Base::emplace_hint; - - // btree_multiset::extract() - // - // Extracts the indicated element, erasing it in the process, and returns it - // as a C++17-compatible node handle. Overloads are listed below. - // - // node_type extract(const_iterator position): - // - // Extracts the element at the indicated position and returns a node handle - // owning that extracted data. - // - // template node_type extract(const K& k): - // - // Extracts the element with the key matching the passed key value and - // returns a node handle owning that extracted data. If the `btree_multiset` - // does not contain an element with a matching key, this function returns an - // empty node handle. - // - // NOTE: In this context, `node_type` refers to the C++17 concept of a - // move-only type that owns and provides access to the elements in associative - // containers (https://en.cppreference.com/w/cpp/container/node_handle). - // It does NOT refer to the data layout of the underlying btree. - using Base::extract; - - // btree_multiset::merge() - // - // Extracts elements from a given `source` btree_multiset into this - // `btree_multiset`. If the destination `btree_multiset` already contains an - // element with an equivalent key, that element is not extracted. - using Base::merge; - - // btree_multiset::swap(btree_multiset& other) - // - // Exchanges the contents of this `btree_multiset` with those of the `other` - // btree_multiset, avoiding invocation of any move, copy, or swap operations - // on individual elements. - // - // All iterators and references on the `btree_multiset` remain valid, - // excepting for the past-the-end iterator, which is invalidated. - using Base::swap; - - // btree_multiset::contains() - // - // template bool contains(const K& key) const: - // - // Determines whether an element comparing equal to the given `key` exists - // within the `btree_multiset`, returning `true` if so or `false` otherwise. - // - // Supports heterogeneous lookup, provided that the set is provided a - // compatible heterogeneous comparator. - using Base::contains; - - // btree_multiset::count() - // - // template size_type count(const K& key) const: - // - // Returns the number of elements comparing equal to the given `key` within - // the `btree_multiset`. - // - // Supports heterogeneous lookup, provided that the set is provided a - // compatible heterogeneous comparator. - using Base::count; - - // btree_multiset::equal_range() - // - // Returns a closed range [first, last], defined by a `std::pair` of two - // iterators, containing all elements with the passed key in the - // `btree_multiset`. - using Base::equal_range; - - // btree_multiset::find() - // - // template iterator find(const K& key): - // template const_iterator find(const K& key) const: - // - // Finds an element with the passed `key` within the `btree_multiset`. - // - // Supports heterogeneous lookup, provided that the set is provided a - // compatible heterogeneous comparator. - using Base::find; - - // btree_multiset::get_allocator() - // - // Returns the allocator function associated with this `btree_multiset`. - using Base::get_allocator; - - // btree_multiset::key_comp(); - // - // Returns the key comparator associated with this `btree_multiset`. - using Base::key_comp; - - // btree_multiset::value_comp(); - // - // Returns the value comparator associated with this `btree_multiset`. The - // keys to sort the elements are the values themselves, therefore `value_comp` - // and its sibling member function `key_comp` are equivalent. - using Base::value_comp; -}; - -// absl::swap(absl::btree_multiset<>, absl::btree_multiset<>) -// -// Swaps the contents of two `absl::btree_multiset` containers. -template -void swap(btree_multiset &x, btree_multiset &y) { - return x.swap(y); -} - -// absl::erase_if(absl::btree_multiset<>, Pred) -// -// Erases all elements that satisfy the predicate pred from the container. -template -void erase_if(btree_multiset &set, Pred pred) { - for (auto it = set.begin(); it != set.end();) { - if (pred(*it)) { - it = set.erase(it); - } else { - ++it; - } - } -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_BTREE_SET_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/btree_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/btree_test.h deleted file mode 100644 index 6249080..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/btree_test.h +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_BTREE_TEST_H_ -#define ABSL_CONTAINER_BTREE_TEST_H_ - -#include -#include -#include -#include -#include -#include - -#include "absl/container/btree_map.h" -#include "absl/container/btree_set.h" -#include "absl/container/flat_hash_set.h" -#include "absl/strings/cord.h" -#include "absl/time/time.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// Like remove_const but propagates the removal through std::pair. -template -struct remove_pair_const { - using type = typename std::remove_const::type; -}; -template -struct remove_pair_const > { - using type = std::pair::type, - typename remove_pair_const::type>; -}; - -// Utility class to provide an accessor for a key given a value. The default -// behavior is to treat the value as a pair and return the first element. -template -struct KeyOfValue { - struct type { - const K& operator()(const V& p) const { return p.first; } - }; -}; - -// Partial specialization of KeyOfValue class for when the key and value are -// the same type such as in set<> and btree_set<>. -template -struct KeyOfValue { - struct type { - const K& operator()(const K& k) const { return k; } - }; -}; - -inline char* GenerateDigits(char buf[16], unsigned val, unsigned maxval) { - assert(val <= maxval); - constexpr unsigned kBase = 64; // avoid integer division. - unsigned p = 15; - buf[p--] = 0; - while (maxval > 0) { - buf[p--] = ' ' + (val % kBase); - val /= kBase; - maxval /= kBase; - } - return buf + p + 1; -} - -template -struct Generator { - int maxval; - explicit Generator(int m) : maxval(m) {} - K operator()(int i) const { - assert(i <= maxval); - return K(i); - } -}; - -template <> -struct Generator { - int maxval; - explicit Generator(int m) : maxval(m) {} - absl::Time operator()(int i) const { return absl::FromUnixMillis(i); } -}; - -template <> -struct Generator { - int maxval; - explicit Generator(int m) : maxval(m) {} - std::string operator()(int i) const { - char buf[16]; - return GenerateDigits(buf, i, maxval); - } -}; - -template <> -struct Generator { - int maxval; - explicit Generator(int m) : maxval(m) {} - Cord operator()(int i) const { - char buf[16]; - return Cord(GenerateDigits(buf, i, maxval)); - } -}; - -template -struct Generator > { - Generator::type> tgen; - Generator::type> ugen; - - explicit Generator(int m) : tgen(m), ugen(m) {} - std::pair operator()(int i) const { - return std::make_pair(tgen(i), ugen(i)); - } -}; - -// Generate n values for our tests and benchmarks. Value range is [0, maxval]. -inline std::vector GenerateNumbersWithSeed(int n, int maxval, int seed) { - // NOTE: Some tests rely on generated numbers not changing between test runs. - // We use std::minstd_rand0 because it is well-defined, but don't use - // std::uniform_int_distribution because platforms use different algorithms. - std::minstd_rand0 rng(seed); - - std::vector values; - absl::flat_hash_set unique_values; - if (values.size() < n) { - for (int i = values.size(); i < n; i++) { - int value; - do { - value = static_cast(rng()) % (maxval + 1); - } while (!unique_values.insert(value).second); - - values.push_back(value); - } - } - return values; -} - -// Generates n values in the range [0, maxval]. -template -std::vector GenerateValuesWithSeed(int n, int maxval, int seed) { - const std::vector nums = GenerateNumbersWithSeed(n, maxval, seed); - Generator gen(maxval); - std::vector vec; - - vec.reserve(n); - for (int i = 0; i < n; i++) { - vec.push_back(gen(nums[i])); - } - - return vec; -} - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_BTREE_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/fixed_array.h b/client/webrtc/webrtc_demo/third/include/absl/container/fixed_array.h deleted file mode 100644 index fcb3e54..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/fixed_array.h +++ /dev/null @@ -1,532 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: fixed_array.h -// ----------------------------------------------------------------------------- -// -// A `FixedArray` represents a non-resizable array of `T` where the length of -// the array can be determined at run-time. It is a good replacement for -// non-standard and deprecated uses of `alloca()` and variable length arrays -// within the GCC extension. (See -// https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html). -// -// `FixedArray` allocates small arrays inline, keeping performance fast by -// avoiding heap operations. It also helps reduce the chances of -// accidentally overflowing your stack if large input is passed to -// your function. - -#ifndef ABSL_CONTAINER_FIXED_ARRAY_H_ -#define ABSL_CONTAINER_FIXED_ARRAY_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "absl/algorithm/algorithm.h" -#include "absl/base/config.h" -#include "absl/base/dynamic_annotations.h" -#include "absl/base/internal/throw_delegate.h" -#include "absl/base/macros.h" -#include "absl/base/optimization.h" -#include "absl/base/port.h" -#include "absl/container/internal/compressed_tuple.h" -#include "absl/memory/memory.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -constexpr static auto kFixedArrayUseDefault = static_cast(-1); - -// ----------------------------------------------------------------------------- -// FixedArray -// ----------------------------------------------------------------------------- -// -// A `FixedArray` provides a run-time fixed-size array, allocating a small array -// inline for efficiency. -// -// Most users should not specify an `inline_elements` argument and let -// `FixedArray` automatically determine the number of elements -// to store inline based on `sizeof(T)`. If `inline_elements` is specified, the -// `FixedArray` implementation will use inline storage for arrays with a -// length <= `inline_elements`. -// -// Note that a `FixedArray` constructed with a `size_type` argument will -// default-initialize its values by leaving trivially constructible types -// uninitialized (e.g. int, int[4], double), and others default-constructed. -// This matches the behavior of c-style arrays and `std::array`, but not -// `std::vector`. -// -// Note that `FixedArray` does not provide a public allocator; if it requires a -// heap allocation, it will do so with global `::operator new[]()` and -// `::operator delete[]()`, even if T provides class-scope overrides for these -// operators. -template > -class FixedArray { - static_assert(!std::is_array::value || std::extent::value > 0, - "Arrays with unknown bounds cannot be used with FixedArray."); - - static constexpr size_t kInlineBytesDefault = 256; - - using AllocatorTraits = std::allocator_traits; - // std::iterator_traits isn't guaranteed to be SFINAE-friendly until C++17, - // but this seems to be mostly pedantic. - template - using EnableIfForwardIterator = absl::enable_if_t::iterator_category, - std::forward_iterator_tag>::value>; - static constexpr bool NoexceptCopyable() { - return std::is_nothrow_copy_constructible::value && - absl::allocator_is_nothrow::value; - } - static constexpr bool NoexceptMovable() { - return std::is_nothrow_move_constructible::value && - absl::allocator_is_nothrow::value; - } - static constexpr bool DefaultConstructorIsNonTrivial() { - return !absl::is_trivially_default_constructible::value; - } - - public: - using allocator_type = typename AllocatorTraits::allocator_type; - using value_type = typename AllocatorTraits::value_type; - using pointer = typename AllocatorTraits::pointer; - using const_pointer = typename AllocatorTraits::const_pointer; - using reference = value_type&; - using const_reference = const value_type&; - using size_type = typename AllocatorTraits::size_type; - using difference_type = typename AllocatorTraits::difference_type; - using iterator = pointer; - using const_iterator = const_pointer; - using reverse_iterator = std::reverse_iterator; - using const_reverse_iterator = std::reverse_iterator; - - static constexpr size_type inline_elements = - (N == kFixedArrayUseDefault ? kInlineBytesDefault / sizeof(value_type) - : static_cast(N)); - - FixedArray( - const FixedArray& other, - const allocator_type& a = allocator_type()) noexcept(NoexceptCopyable()) - : FixedArray(other.begin(), other.end(), a) {} - - FixedArray( - FixedArray&& other, - const allocator_type& a = allocator_type()) noexcept(NoexceptMovable()) - : FixedArray(std::make_move_iterator(other.begin()), - std::make_move_iterator(other.end()), a) {} - - // Creates an array object that can store `n` elements. - // Note that trivially constructible elements will be uninitialized. - explicit FixedArray(size_type n, const allocator_type& a = allocator_type()) - : storage_(n, a) { - if (DefaultConstructorIsNonTrivial()) { - memory_internal::ConstructRange(storage_.alloc(), storage_.begin(), - storage_.end()); - } - } - - // Creates an array initialized with `n` copies of `val`. - FixedArray(size_type n, const value_type& val, - const allocator_type& a = allocator_type()) - : storage_(n, a) { - memory_internal::ConstructRange(storage_.alloc(), storage_.begin(), - storage_.end(), val); - } - - // Creates an array initialized with the size and contents of `init_list`. - FixedArray(std::initializer_list init_list, - const allocator_type& a = allocator_type()) - : FixedArray(init_list.begin(), init_list.end(), a) {} - - // Creates an array initialized with the elements from the input - // range. The array's size will always be `std::distance(first, last)`. - // REQUIRES: Iterator must be a forward_iterator or better. - template * = nullptr> - FixedArray(Iterator first, Iterator last, - const allocator_type& a = allocator_type()) - : storage_(std::distance(first, last), a) { - memory_internal::CopyRange(storage_.alloc(), storage_.begin(), first, last); - } - - ~FixedArray() noexcept { - for (auto* cur = storage_.begin(); cur != storage_.end(); ++cur) { - AllocatorTraits::destroy(storage_.alloc(), cur); - } - } - - // Assignments are deleted because they break the invariant that the size of a - // `FixedArray` never changes. - void operator=(FixedArray&&) = delete; - void operator=(const FixedArray&) = delete; - - // FixedArray::size() - // - // Returns the length of the fixed array. - size_type size() const { return storage_.size(); } - - // FixedArray::max_size() - // - // Returns the largest possible value of `std::distance(begin(), end())` for a - // `FixedArray`. This is equivalent to the most possible addressable bytes - // over the number of bytes taken by T. - constexpr size_type max_size() const { - return (std::numeric_limits::max)() / sizeof(value_type); - } - - // FixedArray::empty() - // - // Returns whether or not the fixed array is empty. - bool empty() const { return size() == 0; } - - // FixedArray::memsize() - // - // Returns the memory size of the fixed array in bytes. - size_t memsize() const { return size() * sizeof(value_type); } - - // FixedArray::data() - // - // Returns a const T* pointer to elements of the `FixedArray`. This pointer - // can be used to access (but not modify) the contained elements. - const_pointer data() const { return AsValueType(storage_.begin()); } - - // Overload of FixedArray::data() to return a T* pointer to elements of the - // fixed array. This pointer can be used to access and modify the contained - // elements. - pointer data() { return AsValueType(storage_.begin()); } - - // FixedArray::operator[] - // - // Returns a reference the ith element of the fixed array. - // REQUIRES: 0 <= i < size() - reference operator[](size_type i) { - ABSL_HARDENING_ASSERT(i < size()); - return data()[i]; - } - - // Overload of FixedArray::operator()[] to return a const reference to the - // ith element of the fixed array. - // REQUIRES: 0 <= i < size() - const_reference operator[](size_type i) const { - ABSL_HARDENING_ASSERT(i < size()); - return data()[i]; - } - - // FixedArray::at - // - // Bounds-checked access. Returns a reference to the ith element of the fixed - // array, or throws std::out_of_range - reference at(size_type i) { - if (ABSL_PREDICT_FALSE(i >= size())) { - base_internal::ThrowStdOutOfRange("FixedArray::at failed bounds check"); - } - return data()[i]; - } - - // Overload of FixedArray::at() to return a const reference to the ith element - // of the fixed array. - const_reference at(size_type i) const { - if (ABSL_PREDICT_FALSE(i >= size())) { - base_internal::ThrowStdOutOfRange("FixedArray::at failed bounds check"); - } - return data()[i]; - } - - // FixedArray::front() - // - // Returns a reference to the first element of the fixed array. - reference front() { - ABSL_HARDENING_ASSERT(!empty()); - return data()[0]; - } - - // Overload of FixedArray::front() to return a reference to the first element - // of a fixed array of const values. - const_reference front() const { - ABSL_HARDENING_ASSERT(!empty()); - return data()[0]; - } - - // FixedArray::back() - // - // Returns a reference to the last element of the fixed array. - reference back() { - ABSL_HARDENING_ASSERT(!empty()); - return data()[size() - 1]; - } - - // Overload of FixedArray::back() to return a reference to the last element - // of a fixed array of const values. - const_reference back() const { - ABSL_HARDENING_ASSERT(!empty()); - return data()[size() - 1]; - } - - // FixedArray::begin() - // - // Returns an iterator to the beginning of the fixed array. - iterator begin() { return data(); } - - // Overload of FixedArray::begin() to return a const iterator to the - // beginning of the fixed array. - const_iterator begin() const { return data(); } - - // FixedArray::cbegin() - // - // Returns a const iterator to the beginning of the fixed array. - const_iterator cbegin() const { return begin(); } - - // FixedArray::end() - // - // Returns an iterator to the end of the fixed array. - iterator end() { return data() + size(); } - - // Overload of FixedArray::end() to return a const iterator to the end of the - // fixed array. - const_iterator end() const { return data() + size(); } - - // FixedArray::cend() - // - // Returns a const iterator to the end of the fixed array. - const_iterator cend() const { return end(); } - - // FixedArray::rbegin() - // - // Returns a reverse iterator from the end of the fixed array. - reverse_iterator rbegin() { return reverse_iterator(end()); } - - // Overload of FixedArray::rbegin() to return a const reverse iterator from - // the end of the fixed array. - const_reverse_iterator rbegin() const { - return const_reverse_iterator(end()); - } - - // FixedArray::crbegin() - // - // Returns a const reverse iterator from the end of the fixed array. - const_reverse_iterator crbegin() const { return rbegin(); } - - // FixedArray::rend() - // - // Returns a reverse iterator from the beginning of the fixed array. - reverse_iterator rend() { return reverse_iterator(begin()); } - - // Overload of FixedArray::rend() for returning a const reverse iterator - // from the beginning of the fixed array. - const_reverse_iterator rend() const { - return const_reverse_iterator(begin()); - } - - // FixedArray::crend() - // - // Returns a reverse iterator from the beginning of the fixed array. - const_reverse_iterator crend() const { return rend(); } - - // FixedArray::fill() - // - // Assigns the given `value` to all elements in the fixed array. - void fill(const value_type& val) { std::fill(begin(), end(), val); } - - // Relational operators. Equality operators are elementwise using - // `operator==`, while order operators order FixedArrays lexicographically. - friend bool operator==(const FixedArray& lhs, const FixedArray& rhs) { - return absl::equal(lhs.begin(), lhs.end(), rhs.begin(), rhs.end()); - } - - friend bool operator!=(const FixedArray& lhs, const FixedArray& rhs) { - return !(lhs == rhs); - } - - friend bool operator<(const FixedArray& lhs, const FixedArray& rhs) { - return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), - rhs.end()); - } - - friend bool operator>(const FixedArray& lhs, const FixedArray& rhs) { - return rhs < lhs; - } - - friend bool operator<=(const FixedArray& lhs, const FixedArray& rhs) { - return !(rhs < lhs); - } - - friend bool operator>=(const FixedArray& lhs, const FixedArray& rhs) { - return !(lhs < rhs); - } - - template - friend H AbslHashValue(H h, const FixedArray& v) { - return H::combine(H::combine_contiguous(std::move(h), v.data(), v.size()), - v.size()); - } - - private: - // StorageElement - // - // For FixedArrays with a C-style-array value_type, StorageElement is a POD - // wrapper struct called StorageElementWrapper that holds the value_type - // instance inside. This is needed for construction and destruction of the - // entire array regardless of how many dimensions it has. For all other cases, - // StorageElement is just an alias of value_type. - // - // Maintainer's Note: The simpler solution would be to simply wrap value_type - // in a struct whether it's an array or not. That causes some paranoid - // diagnostics to misfire, believing that 'data()' returns a pointer to a - // single element, rather than the packed array that it really is. - // e.g.: - // - // FixedArray buf(1); - // sprintf(buf.data(), "foo"); - // - // error: call to int __builtin___sprintf_chk(etc...) - // will always overflow destination buffer [-Werror] - // - template , - size_t InnerN = std::extent::value> - struct StorageElementWrapper { - InnerT array[InnerN]; - }; - - using StorageElement = - absl::conditional_t::value, - StorageElementWrapper, value_type>; - - static pointer AsValueType(pointer ptr) { return ptr; } - static pointer AsValueType(StorageElementWrapper* ptr) { - return std::addressof(ptr->array); - } - - static_assert(sizeof(StorageElement) == sizeof(value_type), ""); - static_assert(alignof(StorageElement) == alignof(value_type), ""); - - class NonEmptyInlinedStorage { - public: - StorageElement* data() { return reinterpret_cast(buff_); } - void AnnotateConstruct(size_type n); - void AnnotateDestruct(size_type n); - -#ifdef ABSL_HAVE_ADDRESS_SANITIZER - void* RedzoneBegin() { return &redzone_begin_; } - void* RedzoneEnd() { return &redzone_end_ + 1; } -#endif // ABSL_HAVE_ADDRESS_SANITIZER - - private: - ABSL_ADDRESS_SANITIZER_REDZONE(redzone_begin_); - alignas(StorageElement) char buff_[sizeof(StorageElement[inline_elements])]; - ABSL_ADDRESS_SANITIZER_REDZONE(redzone_end_); - }; - - class EmptyInlinedStorage { - public: - StorageElement* data() { return nullptr; } - void AnnotateConstruct(size_type) {} - void AnnotateDestruct(size_type) {} - }; - - using InlinedStorage = - absl::conditional_t; - - // Storage - // - // An instance of Storage manages the inline and out-of-line memory for - // instances of FixedArray. This guarantees that even when construction of - // individual elements fails in the FixedArray constructor body, the - // destructor for Storage will still be called and out-of-line memory will be - // properly deallocated. - // - class Storage : public InlinedStorage { - public: - Storage(size_type n, const allocator_type& a) - : size_alloc_(n, a), data_(InitializeData()) {} - - ~Storage() noexcept { - if (UsingInlinedStorage(size())) { - InlinedStorage::AnnotateDestruct(size()); - } else { - AllocatorTraits::deallocate(alloc(), AsValueType(begin()), size()); - } - } - - size_type size() const { return size_alloc_.template get<0>(); } - StorageElement* begin() const { return data_; } - StorageElement* end() const { return begin() + size(); } - allocator_type& alloc() { return size_alloc_.template get<1>(); } - - private: - static bool UsingInlinedStorage(size_type n) { - return n <= inline_elements; - } - - StorageElement* InitializeData() { - if (UsingInlinedStorage(size())) { - InlinedStorage::AnnotateConstruct(size()); - return InlinedStorage::data(); - } else { - return reinterpret_cast( - AllocatorTraits::allocate(alloc(), size())); - } - } - - // `CompressedTuple` takes advantage of EBCO for stateless `allocator_type`s - container_internal::CompressedTuple size_alloc_; - StorageElement* data_; - }; - - Storage storage_; -}; - -template -constexpr size_t FixedArray::kInlineBytesDefault; - -template -constexpr typename FixedArray::size_type - FixedArray::inline_elements; - -template -void FixedArray::NonEmptyInlinedStorage::AnnotateConstruct( - typename FixedArray::size_type n) { -#ifdef ABSL_HAVE_ADDRESS_SANITIZER - if (!n) return; - ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(data(), RedzoneEnd(), RedzoneEnd(), - data() + n); - ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(RedzoneBegin(), data(), data(), - RedzoneBegin()); -#endif // ABSL_HAVE_ADDRESS_SANITIZER - static_cast(n); // Mark used when not in asan mode -} - -template -void FixedArray::NonEmptyInlinedStorage::AnnotateDestruct( - typename FixedArray::size_type n) { -#ifdef ABSL_HAVE_ADDRESS_SANITIZER - if (!n) return; - ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(data(), RedzoneEnd(), data() + n, - RedzoneEnd()); - ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(RedzoneBegin(), data(), RedzoneBegin(), - data()); -#endif // ABSL_HAVE_ADDRESS_SANITIZER - static_cast(n); // Mark used when not in asan mode -} -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_FIXED_ARRAY_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/flat_hash_map.h b/client/webrtc/webrtc_demo/third/include/absl/container/flat_hash_map.h deleted file mode 100644 index 74def0d..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/flat_hash_map.h +++ /dev/null @@ -1,606 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: flat_hash_map.h -// ----------------------------------------------------------------------------- -// -// An `absl::flat_hash_map` is an unordered associative container of -// unique keys and associated values designed to be a more efficient replacement -// for `std::unordered_map`. Like `unordered_map`, search, insertion, and -// deletion of map elements can be done as an `O(1)` operation. However, -// `flat_hash_map` (and other unordered associative containers known as the -// collection of Abseil "Swiss tables") contain other optimizations that result -// in both memory and computation advantages. -// -// In most cases, your default choice for a hash map should be a map of type -// `flat_hash_map`. - -#ifndef ABSL_CONTAINER_FLAT_HASH_MAP_H_ -#define ABSL_CONTAINER_FLAT_HASH_MAP_H_ - -#include -#include -#include -#include - -#include "absl/algorithm/container.h" -#include "absl/container/internal/container_memory.h" -#include "absl/container/internal/hash_function_defaults.h" // IWYU pragma: export -#include "absl/container/internal/raw_hash_map.h" // IWYU pragma: export -#include "absl/memory/memory.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { -template -struct FlatHashMapPolicy; -} // namespace container_internal - -// ----------------------------------------------------------------------------- -// absl::flat_hash_map -// ----------------------------------------------------------------------------- -// -// An `absl::flat_hash_map` is an unordered associative container which -// has been optimized for both speed and memory footprint in most common use -// cases. Its interface is similar to that of `std::unordered_map` with -// the following notable differences: -// -// * Requires keys that are CopyConstructible -// * Requires values that are MoveConstructible -// * Supports heterogeneous lookup, through `find()`, `operator[]()` and -// `insert()`, provided that the map is provided a compatible heterogeneous -// hashing function and equality operator. -// * Invalidates any references and pointers to elements within the table after -// `rehash()`. -// * Contains a `capacity()` member function indicating the number of element -// slots (open, deleted, and empty) within the hash map. -// * Returns `void` from the `erase(iterator)` overload. -// -// By default, `flat_hash_map` uses the `absl::Hash` hashing framework. -// All fundamental and Abseil types that support the `absl::Hash` framework have -// a compatible equality operator for comparing insertions into `flat_hash_map`. -// If your type is not yet supported by the `absl::Hash` framework, see -// absl/hash/hash.h for information on extending Abseil hashing to user-defined -// types. -// -// NOTE: A `flat_hash_map` stores its value types directly inside its -// implementation array to avoid memory indirection. Because a `flat_hash_map` -// is designed to move data when rehashed, map values will not retain pointer -// stability. If you require pointer stability, or if your values are large, -// consider using `absl::flat_hash_map>` instead. -// If your types are not moveable or you require pointer stability for keys, -// consider `absl::node_hash_map`. -// -// Example: -// -// // Create a flat hash map of three strings (that map to strings) -// absl::flat_hash_map ducks = -// {{"a", "huey"}, {"b", "dewey"}, {"c", "louie"}}; -// -// // Insert a new element into the flat hash map -// ducks.insert({"d", "donald"}); -// -// // Force a rehash of the flat hash map -// ducks.rehash(0); -// -// // Find the element with the key "b" -// std::string search_key = "b"; -// auto result = ducks.find(search_key); -// if (result != ducks.end()) { -// std::cout << "Result: " << result->second << std::endl; -// } -template , - class Eq = absl::container_internal::hash_default_eq, - class Allocator = std::allocator>> -class flat_hash_map : public absl::container_internal::raw_hash_map< - absl::container_internal::FlatHashMapPolicy, - Hash, Eq, Allocator> { - using Base = typename flat_hash_map::raw_hash_map; - - public: - // Constructors and Assignment Operators - // - // A flat_hash_map supports the same overload set as `std::unordered_map` - // for construction and assignment: - // - // * Default constructor - // - // // No allocation for the table's elements is made. - // absl::flat_hash_map map1; - // - // * Initializer List constructor - // - // absl::flat_hash_map map2 = - // {{1, "huey"}, {2, "dewey"}, {3, "louie"},}; - // - // * Copy constructor - // - // absl::flat_hash_map map3(map2); - // - // * Copy assignment operator - // - // // Hash functor and Comparator are copied as well - // absl::flat_hash_map map4; - // map4 = map3; - // - // * Move constructor - // - // // Move is guaranteed efficient - // absl::flat_hash_map map5(std::move(map4)); - // - // * Move assignment operator - // - // // May be efficient if allocators are compatible - // absl::flat_hash_map map6; - // map6 = std::move(map5); - // - // * Range constructor - // - // std::vector> v = {{1, "a"}, {2, "b"}}; - // absl::flat_hash_map map7(v.begin(), v.end()); - flat_hash_map() {} - using Base::Base; - - // flat_hash_map::begin() - // - // Returns an iterator to the beginning of the `flat_hash_map`. - using Base::begin; - - // flat_hash_map::cbegin() - // - // Returns a const iterator to the beginning of the `flat_hash_map`. - using Base::cbegin; - - // flat_hash_map::cend() - // - // Returns a const iterator to the end of the `flat_hash_map`. - using Base::cend; - - // flat_hash_map::end() - // - // Returns an iterator to the end of the `flat_hash_map`. - using Base::end; - - // flat_hash_map::capacity() - // - // Returns the number of element slots (assigned, deleted, and empty) - // available within the `flat_hash_map`. - // - // NOTE: this member function is particular to `absl::flat_hash_map` and is - // not provided in the `std::unordered_map` API. - using Base::capacity; - - // flat_hash_map::empty() - // - // Returns whether or not the `flat_hash_map` is empty. - using Base::empty; - - // flat_hash_map::max_size() - // - // Returns the largest theoretical possible number of elements within a - // `flat_hash_map` under current memory constraints. This value can be thought - // of the largest value of `std::distance(begin(), end())` for a - // `flat_hash_map`. - using Base::max_size; - - // flat_hash_map::size() - // - // Returns the number of elements currently within the `flat_hash_map`. - using Base::size; - - // flat_hash_map::clear() - // - // Removes all elements from the `flat_hash_map`. Invalidates any references, - // pointers, or iterators referring to contained elements. - // - // NOTE: this operation may shrink the underlying buffer. To avoid shrinking - // the underlying buffer call `erase(begin(), end())`. - using Base::clear; - - // flat_hash_map::erase() - // - // Erases elements within the `flat_hash_map`. Erasing does not trigger a - // rehash. Overloads are listed below. - // - // void erase(const_iterator pos): - // - // Erases the element at `position` of the `flat_hash_map`, returning - // `void`. - // - // NOTE: returning `void` in this case is different than that of STL - // containers in general and `std::unordered_map` in particular (which - // return an iterator to the element following the erased element). If that - // iterator is needed, simply post increment the iterator: - // - // map.erase(it++); - // - // iterator erase(const_iterator first, const_iterator last): - // - // Erases the elements in the open interval [`first`, `last`), returning an - // iterator pointing to `last`. - // - // size_type erase(const key_type& key): - // - // Erases the element with the matching key, if it exists, returning the - // number of elements erased (0 or 1). - using Base::erase; - - // flat_hash_map::insert() - // - // Inserts an element of the specified value into the `flat_hash_map`, - // returning an iterator pointing to the newly inserted element, provided that - // an element with the given key does not already exist. If rehashing occurs - // due to the insertion, all iterators are invalidated. Overloads are listed - // below. - // - // std::pair insert(const init_type& value): - // - // Inserts a value into the `flat_hash_map`. Returns a pair consisting of an - // iterator to the inserted element (or to the element that prevented the - // insertion) and a bool denoting whether the insertion took place. - // - // std::pair insert(T&& value): - // std::pair insert(init_type&& value): - // - // Inserts a moveable value into the `flat_hash_map`. Returns a pair - // consisting of an iterator to the inserted element (or to the element that - // prevented the insertion) and a bool denoting whether the insertion took - // place. - // - // iterator insert(const_iterator hint, const init_type& value): - // iterator insert(const_iterator hint, T&& value): - // iterator insert(const_iterator hint, init_type&& value); - // - // Inserts a value, using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. Returns an iterator to the - // inserted element, or to the existing element that prevented the - // insertion. - // - // void insert(InputIterator first, InputIterator last): - // - // Inserts a range of values [`first`, `last`). - // - // NOTE: Although the STL does not specify which element may be inserted if - // multiple keys compare equivalently, for `flat_hash_map` we guarantee the - // first match is inserted. - // - // void insert(std::initializer_list ilist): - // - // Inserts the elements within the initializer list `ilist`. - // - // NOTE: Although the STL does not specify which element may be inserted if - // multiple keys compare equivalently within the initializer list, for - // `flat_hash_map` we guarantee the first match is inserted. - using Base::insert; - - // flat_hash_map::insert_or_assign() - // - // Inserts an element of the specified value into the `flat_hash_map` provided - // that a value with the given key does not already exist, or replaces it with - // the element value if a key for that value already exists, returning an - // iterator pointing to the newly inserted element. If rehashing occurs due - // to the insertion, all existing iterators are invalidated. Overloads are - // listed below. - // - // pair insert_or_assign(const init_type& k, T&& obj): - // pair insert_or_assign(init_type&& k, T&& obj): - // - // Inserts/Assigns (or moves) the element of the specified key into the - // `flat_hash_map`. - // - // iterator insert_or_assign(const_iterator hint, - // const init_type& k, T&& obj): - // iterator insert_or_assign(const_iterator hint, init_type&& k, T&& obj): - // - // Inserts/Assigns (or moves) the element of the specified key into the - // `flat_hash_map` using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. - using Base::insert_or_assign; - - // flat_hash_map::emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `flat_hash_map`, provided that no element with the given key - // already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. Prefer `try_emplace()` unless your key is not - // copyable or moveable. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - using Base::emplace; - - // flat_hash_map::emplace_hint() - // - // Inserts an element of the specified value by constructing it in-place - // within the `flat_hash_map`, using the position of `hint` as a non-binding - // suggestion for where to begin the insertion search, and only inserts - // provided that no element with the given key already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. Prefer `try_emplace()` unless your key is not - // copyable or moveable. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - using Base::emplace_hint; - - // flat_hash_map::try_emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `flat_hash_map`, provided that no element with the given key - // already exists. Unlike `emplace()`, if an element with the given key - // already exists, we guarantee that no element is constructed. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - // Overloads are listed below. - // - // pair try_emplace(const key_type& k, Args&&... args): - // pair try_emplace(key_type&& k, Args&&... args): - // - // Inserts (via copy or move) the element of the specified key into the - // `flat_hash_map`. - // - // iterator try_emplace(const_iterator hint, - // const init_type& k, Args&&... args): - // iterator try_emplace(const_iterator hint, init_type&& k, Args&&... args): - // - // Inserts (via copy or move) the element of the specified key into the - // `flat_hash_map` using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. - // - // All `try_emplace()` overloads make the same guarantees regarding rvalue - // arguments as `std::unordered_map::try_emplace()`, namely that these - // functions will not move from rvalue arguments if insertions do not happen. - using Base::try_emplace; - - // flat_hash_map::extract() - // - // Extracts the indicated element, erasing it in the process, and returns it - // as a C++17-compatible node handle. Overloads are listed below. - // - // node_type extract(const_iterator position): - // - // Extracts the key,value pair of the element at the indicated position and - // returns a node handle owning that extracted data. - // - // node_type extract(const key_type& x): - // - // Extracts the key,value pair of the element with a key matching the passed - // key value and returns a node handle owning that extracted data. If the - // `flat_hash_map` does not contain an element with a matching key, this - // function returns an empty node handle. - // - // NOTE: when compiled in an earlier version of C++ than C++17, - // `node_type::key()` returns a const reference to the key instead of a - // mutable reference. We cannot safely return a mutable reference without - // std::launder (which is not available before C++17). - using Base::extract; - - // flat_hash_map::merge() - // - // Extracts elements from a given `source` flat hash map into this - // `flat_hash_map`. If the destination `flat_hash_map` already contains an - // element with an equivalent key, that element is not extracted. - using Base::merge; - - // flat_hash_map::swap(flat_hash_map& other) - // - // Exchanges the contents of this `flat_hash_map` with those of the `other` - // flat hash map, avoiding invocation of any move, copy, or swap operations on - // individual elements. - // - // All iterators and references on the `flat_hash_map` remain valid, excepting - // for the past-the-end iterator, which is invalidated. - // - // `swap()` requires that the flat hash map's hashing and key equivalence - // functions be Swappable, and are exchanged using unqualified calls to - // non-member `swap()`. If the map's allocator has - // `std::allocator_traits::propagate_on_container_swap::value` - // set to `true`, the allocators are also exchanged using an unqualified call - // to non-member `swap()`; otherwise, the allocators are not swapped. - using Base::swap; - - // flat_hash_map::rehash(count) - // - // Rehashes the `flat_hash_map`, setting the number of slots to be at least - // the passed value. If the new number of slots increases the load factor more - // than the current maximum load factor - // (`count` < `size()` / `max_load_factor()`), then the new number of slots - // will be at least `size()` / `max_load_factor()`. - // - // To force a rehash, pass rehash(0). - // - // NOTE: unlike behavior in `std::unordered_map`, references are also - // invalidated upon a `rehash()`. - using Base::rehash; - - // flat_hash_map::reserve(count) - // - // Sets the number of slots in the `flat_hash_map` to the number needed to - // accommodate at least `count` total elements without exceeding the current - // maximum load factor, and may rehash the container if needed. - using Base::reserve; - - // flat_hash_map::at() - // - // Returns a reference to the mapped value of the element with key equivalent - // to the passed key. - using Base::at; - - // flat_hash_map::contains() - // - // Determines whether an element with a key comparing equal to the given `key` - // exists within the `flat_hash_map`, returning `true` if so or `false` - // otherwise. - using Base::contains; - - // flat_hash_map::count(const Key& key) const - // - // Returns the number of elements with a key comparing equal to the given - // `key` within the `flat_hash_map`. note that this function will return - // either `1` or `0` since duplicate keys are not allowed within a - // `flat_hash_map`. - using Base::count; - - // flat_hash_map::equal_range() - // - // Returns a closed range [first, last], defined by a `std::pair` of two - // iterators, containing all elements with the passed key in the - // `flat_hash_map`. - using Base::equal_range; - - // flat_hash_map::find() - // - // Finds an element with the passed `key` within the `flat_hash_map`. - using Base::find; - - // flat_hash_map::operator[]() - // - // Returns a reference to the value mapped to the passed key within the - // `flat_hash_map`, performing an `insert()` if the key does not already - // exist. - // - // If an insertion occurs and results in a rehashing of the container, all - // iterators are invalidated. Otherwise iterators are not affected and - // references are not invalidated. Overloads are listed below. - // - // T& operator[](const Key& key): - // - // Inserts an init_type object constructed in-place if the element with the - // given key does not exist. - // - // T& operator[](Key&& key): - // - // Inserts an init_type object constructed in-place provided that an element - // with the given key does not exist. - using Base::operator[]; - - // flat_hash_map::bucket_count() - // - // Returns the number of "buckets" within the `flat_hash_map`. Note that - // because a flat hash map contains all elements within its internal storage, - // this value simply equals the current capacity of the `flat_hash_map`. - using Base::bucket_count; - - // flat_hash_map::load_factor() - // - // Returns the current load factor of the `flat_hash_map` (the average number - // of slots occupied with a value within the hash map). - using Base::load_factor; - - // flat_hash_map::max_load_factor() - // - // Manages the maximum load factor of the `flat_hash_map`. Overloads are - // listed below. - // - // float flat_hash_map::max_load_factor() - // - // Returns the current maximum load factor of the `flat_hash_map`. - // - // void flat_hash_map::max_load_factor(float ml) - // - // Sets the maximum load factor of the `flat_hash_map` to the passed value. - // - // NOTE: This overload is provided only for API compatibility with the STL; - // `flat_hash_map` will ignore any set load factor and manage its rehashing - // internally as an implementation detail. - using Base::max_load_factor; - - // flat_hash_map::get_allocator() - // - // Returns the allocator function associated with this `flat_hash_map`. - using Base::get_allocator; - - // flat_hash_map::hash_function() - // - // Returns the hashing function used to hash the keys within this - // `flat_hash_map`. - using Base::hash_function; - - // flat_hash_map::key_eq() - // - // Returns the function used for comparing keys equality. - using Base::key_eq; -}; - -// erase_if(flat_hash_map<>, Pred) -// -// Erases all elements that satisfy the predicate `pred` from the container `c`. -template -void erase_if(flat_hash_map& c, Predicate pred) { - container_internal::EraseIf(pred, &c); -} - -namespace container_internal { - -template -struct FlatHashMapPolicy { - using slot_policy = container_internal::map_slot_policy; - using slot_type = typename slot_policy::slot_type; - using key_type = K; - using mapped_type = V; - using init_type = std::pair; - - template - static void construct(Allocator* alloc, slot_type* slot, Args&&... args) { - slot_policy::construct(alloc, slot, std::forward(args)...); - } - - template - static void destroy(Allocator* alloc, slot_type* slot) { - slot_policy::destroy(alloc, slot); - } - - template - static void transfer(Allocator* alloc, slot_type* new_slot, - slot_type* old_slot) { - slot_policy::transfer(alloc, new_slot, old_slot); - } - - template - static decltype(absl::container_internal::DecomposePair( - std::declval(), std::declval()...)) - apply(F&& f, Args&&... args) { - return absl::container_internal::DecomposePair(std::forward(f), - std::forward(args)...); - } - - static size_t space_used(const slot_type*) { return 0; } - - static std::pair& element(slot_type* slot) { return slot->value; } - - static V& value(std::pair* kv) { return kv->second; } - static const V& value(const std::pair* kv) { return kv->second; } -}; - -} // namespace container_internal - -namespace container_algorithm_internal { - -// Specialization of trait in absl/algorithm/container.h -template -struct IsUnorderedContainer< - absl::flat_hash_map> : std::true_type {}; - -} // namespace container_algorithm_internal - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_FLAT_HASH_MAP_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/flat_hash_set.h b/client/webrtc/webrtc_demo/third/include/absl/container/flat_hash_set.h deleted file mode 100644 index 6b89da6..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/flat_hash_set.h +++ /dev/null @@ -1,504 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: flat_hash_set.h -// ----------------------------------------------------------------------------- -// -// An `absl::flat_hash_set` is an unordered associative container designed to -// be a more efficient replacement for `std::unordered_set`. Like -// `unordered_set`, search, insertion, and deletion of set elements can be done -// as an `O(1)` operation. However, `flat_hash_set` (and other unordered -// associative containers known as the collection of Abseil "Swiss tables") -// contain other optimizations that result in both memory and computation -// advantages. -// -// In most cases, your default choice for a hash set should be a set of type -// `flat_hash_set`. -#ifndef ABSL_CONTAINER_FLAT_HASH_SET_H_ -#define ABSL_CONTAINER_FLAT_HASH_SET_H_ - -#include -#include - -#include "absl/algorithm/container.h" -#include "absl/base/macros.h" -#include "absl/container/internal/container_memory.h" -#include "absl/container/internal/hash_function_defaults.h" // IWYU pragma: export -#include "absl/container/internal/raw_hash_set.h" // IWYU pragma: export -#include "absl/memory/memory.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { -template -struct FlatHashSetPolicy; -} // namespace container_internal - -// ----------------------------------------------------------------------------- -// absl::flat_hash_set -// ----------------------------------------------------------------------------- -// -// An `absl::flat_hash_set` is an unordered associative container which has -// been optimized for both speed and memory footprint in most common use cases. -// Its interface is similar to that of `std::unordered_set` with the -// following notable differences: -// -// * Requires keys that are CopyConstructible -// * Supports heterogeneous lookup, through `find()` and `insert()`, provided -// that the set is provided a compatible heterogeneous hashing function and -// equality operator. -// * Invalidates any references and pointers to elements within the table after -// `rehash()`. -// * Contains a `capacity()` member function indicating the number of element -// slots (open, deleted, and empty) within the hash set. -// * Returns `void` from the `erase(iterator)` overload. -// -// By default, `flat_hash_set` uses the `absl::Hash` hashing framework. All -// fundamental and Abseil types that support the `absl::Hash` framework have a -// compatible equality operator for comparing insertions into `flat_hash_map`. -// If your type is not yet supported by the `absl::Hash` framework, see -// absl/hash/hash.h for information on extending Abseil hashing to user-defined -// types. -// -// NOTE: A `flat_hash_set` stores its keys directly inside its implementation -// array to avoid memory indirection. Because a `flat_hash_set` is designed to -// move data when rehashed, set keys will not retain pointer stability. If you -// require pointer stability, consider using -// `absl::flat_hash_set>`. If your type is not moveable and -// you require pointer stability, consider `absl::node_hash_set` instead. -// -// Example: -// -// // Create a flat hash set of three strings -// absl::flat_hash_set ducks = -// {"huey", "dewey", "louie"}; -// -// // Insert a new element into the flat hash set -// ducks.insert("donald"); -// -// // Force a rehash of the flat hash set -// ducks.rehash(0); -// -// // See if "dewey" is present -// if (ducks.contains("dewey")) { -// std::cout << "We found dewey!" << std::endl; -// } -template , - class Eq = absl::container_internal::hash_default_eq, - class Allocator = std::allocator> -class flat_hash_set - : public absl::container_internal::raw_hash_set< - absl::container_internal::FlatHashSetPolicy, Hash, Eq, Allocator> { - using Base = typename flat_hash_set::raw_hash_set; - - public: - // Constructors and Assignment Operators - // - // A flat_hash_set supports the same overload set as `std::unordered_map` - // for construction and assignment: - // - // * Default constructor - // - // // No allocation for the table's elements is made. - // absl::flat_hash_set set1; - // - // * Initializer List constructor - // - // absl::flat_hash_set set2 = - // {{"huey"}, {"dewey"}, {"louie"},}; - // - // * Copy constructor - // - // absl::flat_hash_set set3(set2); - // - // * Copy assignment operator - // - // // Hash functor and Comparator are copied as well - // absl::flat_hash_set set4; - // set4 = set3; - // - // * Move constructor - // - // // Move is guaranteed efficient - // absl::flat_hash_set set5(std::move(set4)); - // - // * Move assignment operator - // - // // May be efficient if allocators are compatible - // absl::flat_hash_set set6; - // set6 = std::move(set5); - // - // * Range constructor - // - // std::vector v = {"a", "b"}; - // absl::flat_hash_set set7(v.begin(), v.end()); - flat_hash_set() {} - using Base::Base; - - // flat_hash_set::begin() - // - // Returns an iterator to the beginning of the `flat_hash_set`. - using Base::begin; - - // flat_hash_set::cbegin() - // - // Returns a const iterator to the beginning of the `flat_hash_set`. - using Base::cbegin; - - // flat_hash_set::cend() - // - // Returns a const iterator to the end of the `flat_hash_set`. - using Base::cend; - - // flat_hash_set::end() - // - // Returns an iterator to the end of the `flat_hash_set`. - using Base::end; - - // flat_hash_set::capacity() - // - // Returns the number of element slots (assigned, deleted, and empty) - // available within the `flat_hash_set`. - // - // NOTE: this member function is particular to `absl::flat_hash_set` and is - // not provided in the `std::unordered_map` API. - using Base::capacity; - - // flat_hash_set::empty() - // - // Returns whether or not the `flat_hash_set` is empty. - using Base::empty; - - // flat_hash_set::max_size() - // - // Returns the largest theoretical possible number of elements within a - // `flat_hash_set` under current memory constraints. This value can be thought - // of the largest value of `std::distance(begin(), end())` for a - // `flat_hash_set`. - using Base::max_size; - - // flat_hash_set::size() - // - // Returns the number of elements currently within the `flat_hash_set`. - using Base::size; - - // flat_hash_set::clear() - // - // Removes all elements from the `flat_hash_set`. Invalidates any references, - // pointers, or iterators referring to contained elements. - // - // NOTE: this operation may shrink the underlying buffer. To avoid shrinking - // the underlying buffer call `erase(begin(), end())`. - using Base::clear; - - // flat_hash_set::erase() - // - // Erases elements within the `flat_hash_set`. Erasing does not trigger a - // rehash. Overloads are listed below. - // - // void erase(const_iterator pos): - // - // Erases the element at `position` of the `flat_hash_set`, returning - // `void`. - // - // NOTE: returning `void` in this case is different than that of STL - // containers in general and `std::unordered_set` in particular (which - // return an iterator to the element following the erased element). If that - // iterator is needed, simply post increment the iterator: - // - // set.erase(it++); - // - // iterator erase(const_iterator first, const_iterator last): - // - // Erases the elements in the open interval [`first`, `last`), returning an - // iterator pointing to `last`. - // - // size_type erase(const key_type& key): - // - // Erases the element with the matching key, if it exists, returning the - // number of elements erased (0 or 1). - using Base::erase; - - // flat_hash_set::insert() - // - // Inserts an element of the specified value into the `flat_hash_set`, - // returning an iterator pointing to the newly inserted element, provided that - // an element with the given key does not already exist. If rehashing occurs - // due to the insertion, all iterators are invalidated. Overloads are listed - // below. - // - // std::pair insert(const T& value): - // - // Inserts a value into the `flat_hash_set`. Returns a pair consisting of an - // iterator to the inserted element (or to the element that prevented the - // insertion) and a bool denoting whether the insertion took place. - // - // std::pair insert(T&& value): - // - // Inserts a moveable value into the `flat_hash_set`. Returns a pair - // consisting of an iterator to the inserted element (or to the element that - // prevented the insertion) and a bool denoting whether the insertion took - // place. - // - // iterator insert(const_iterator hint, const T& value): - // iterator insert(const_iterator hint, T&& value): - // - // Inserts a value, using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. Returns an iterator to the - // inserted element, or to the existing element that prevented the - // insertion. - // - // void insert(InputIterator first, InputIterator last): - // - // Inserts a range of values [`first`, `last`). - // - // NOTE: Although the STL does not specify which element may be inserted if - // multiple keys compare equivalently, for `flat_hash_set` we guarantee the - // first match is inserted. - // - // void insert(std::initializer_list ilist): - // - // Inserts the elements within the initializer list `ilist`. - // - // NOTE: Although the STL does not specify which element may be inserted if - // multiple keys compare equivalently within the initializer list, for - // `flat_hash_set` we guarantee the first match is inserted. - using Base::insert; - - // flat_hash_set::emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `flat_hash_set`, provided that no element with the given key - // already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - using Base::emplace; - - // flat_hash_set::emplace_hint() - // - // Inserts an element of the specified value by constructing it in-place - // within the `flat_hash_set`, using the position of `hint` as a non-binding - // suggestion for where to begin the insertion search, and only inserts - // provided that no element with the given key already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - using Base::emplace_hint; - - // flat_hash_set::extract() - // - // Extracts the indicated element, erasing it in the process, and returns it - // as a C++17-compatible node handle. Overloads are listed below. - // - // node_type extract(const_iterator position): - // - // Extracts the element at the indicated position and returns a node handle - // owning that extracted data. - // - // node_type extract(const key_type& x): - // - // Extracts the element with the key matching the passed key value and - // returns a node handle owning that extracted data. If the `flat_hash_set` - // does not contain an element with a matching key, this function returns an - // empty node handle. - using Base::extract; - - // flat_hash_set::merge() - // - // Extracts elements from a given `source` flat hash set into this - // `flat_hash_set`. If the destination `flat_hash_set` already contains an - // element with an equivalent key, that element is not extracted. - using Base::merge; - - // flat_hash_set::swap(flat_hash_set& other) - // - // Exchanges the contents of this `flat_hash_set` with those of the `other` - // flat hash map, avoiding invocation of any move, copy, or swap operations on - // individual elements. - // - // All iterators and references on the `flat_hash_set` remain valid, excepting - // for the past-the-end iterator, which is invalidated. - // - // `swap()` requires that the flat hash set's hashing and key equivalence - // functions be Swappable, and are exchaged using unqualified calls to - // non-member `swap()`. If the map's allocator has - // `std::allocator_traits::propagate_on_container_swap::value` - // set to `true`, the allocators are also exchanged using an unqualified call - // to non-member `swap()`; otherwise, the allocators are not swapped. - using Base::swap; - - // flat_hash_set::rehash(count) - // - // Rehashes the `flat_hash_set`, setting the number of slots to be at least - // the passed value. If the new number of slots increases the load factor more - // than the current maximum load factor - // (`count` < `size()` / `max_load_factor()`), then the new number of slots - // will be at least `size()` / `max_load_factor()`. - // - // To force a rehash, pass rehash(0). - // - // NOTE: unlike behavior in `std::unordered_set`, references are also - // invalidated upon a `rehash()`. - using Base::rehash; - - // flat_hash_set::reserve(count) - // - // Sets the number of slots in the `flat_hash_set` to the number needed to - // accommodate at least `count` total elements without exceeding the current - // maximum load factor, and may rehash the container if needed. - using Base::reserve; - - // flat_hash_set::contains() - // - // Determines whether an element comparing equal to the given `key` exists - // within the `flat_hash_set`, returning `true` if so or `false` otherwise. - using Base::contains; - - // flat_hash_set::count(const Key& key) const - // - // Returns the number of elements comparing equal to the given `key` within - // the `flat_hash_set`. note that this function will return either `1` or `0` - // since duplicate elements are not allowed within a `flat_hash_set`. - using Base::count; - - // flat_hash_set::equal_range() - // - // Returns a closed range [first, last], defined by a `std::pair` of two - // iterators, containing all elements with the passed key in the - // `flat_hash_set`. - using Base::equal_range; - - // flat_hash_set::find() - // - // Finds an element with the passed `key` within the `flat_hash_set`. - using Base::find; - - // flat_hash_set::bucket_count() - // - // Returns the number of "buckets" within the `flat_hash_set`. Note that - // because a flat hash map contains all elements within its internal storage, - // this value simply equals the current capacity of the `flat_hash_set`. - using Base::bucket_count; - - // flat_hash_set::load_factor() - // - // Returns the current load factor of the `flat_hash_set` (the average number - // of slots occupied with a value within the hash map). - using Base::load_factor; - - // flat_hash_set::max_load_factor() - // - // Manages the maximum load factor of the `flat_hash_set`. Overloads are - // listed below. - // - // float flat_hash_set::max_load_factor() - // - // Returns the current maximum load factor of the `flat_hash_set`. - // - // void flat_hash_set::max_load_factor(float ml) - // - // Sets the maximum load factor of the `flat_hash_set` to the passed value. - // - // NOTE: This overload is provided only for API compatibility with the STL; - // `flat_hash_set` will ignore any set load factor and manage its rehashing - // internally as an implementation detail. - using Base::max_load_factor; - - // flat_hash_set::get_allocator() - // - // Returns the allocator function associated with this `flat_hash_set`. - using Base::get_allocator; - - // flat_hash_set::hash_function() - // - // Returns the hashing function used to hash the keys within this - // `flat_hash_set`. - using Base::hash_function; - - // flat_hash_set::key_eq() - // - // Returns the function used for comparing keys equality. - using Base::key_eq; -}; - -// erase_if(flat_hash_set<>, Pred) -// -// Erases all elements that satisfy the predicate `pred` from the container `c`. -template -void erase_if(flat_hash_set& c, Predicate pred) { - container_internal::EraseIf(pred, &c); -} - -namespace container_internal { - -template -struct FlatHashSetPolicy { - using slot_type = T; - using key_type = T; - using init_type = T; - using constant_iterators = std::true_type; - - template - static void construct(Allocator* alloc, slot_type* slot, Args&&... args) { - absl::allocator_traits::construct(*alloc, slot, - std::forward(args)...); - } - - template - static void destroy(Allocator* alloc, slot_type* slot) { - absl::allocator_traits::destroy(*alloc, slot); - } - - template - static void transfer(Allocator* alloc, slot_type* new_slot, - slot_type* old_slot) { - construct(alloc, new_slot, std::move(*old_slot)); - destroy(alloc, old_slot); - } - - static T& element(slot_type* slot) { return *slot; } - - template - static decltype(absl::container_internal::DecomposeValue( - std::declval(), std::declval()...)) - apply(F&& f, Args&&... args) { - return absl::container_internal::DecomposeValue( - std::forward(f), std::forward(args)...); - } - - static size_t space_used(const T*) { return 0; } -}; -} // namespace container_internal - -namespace container_algorithm_internal { - -// Specialization of trait in absl/algorithm/container.h -template -struct IsUnorderedContainer> - : std::true_type {}; - -} // namespace container_algorithm_internal - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_FLAT_HASH_SET_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/inlined_vector.h b/client/webrtc/webrtc_demo/third/include/absl/container/inlined_vector.h deleted file mode 100644 index 7c18234..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/inlined_vector.h +++ /dev/null @@ -1,847 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: inlined_vector.h -// ----------------------------------------------------------------------------- -// -// This header file contains the declaration and definition of an "inlined -// vector" which behaves in an equivalent fashion to a `std::vector`, except -// that storage for small sequences of the vector are provided inline without -// requiring any heap allocation. -// -// An `absl::InlinedVector` specifies the default capacity `N` as one of -// its template parameters. Instances where `size() <= N` hold contained -// elements in inline space. Typically `N` is very small so that sequences that -// are expected to be short do not require allocations. -// -// An `absl::InlinedVector` does not usually require a specific allocator. If -// the inlined vector grows beyond its initial constraints, it will need to -// allocate (as any normal `std::vector` would). This is usually performed with -// the default allocator (defined as `std::allocator`). Optionally, a custom -// allocator type may be specified as `A` in `absl::InlinedVector`. - -#ifndef ABSL_CONTAINER_INLINED_VECTOR_H_ -#define ABSL_CONTAINER_INLINED_VECTOR_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "absl/algorithm/algorithm.h" -#include "absl/base/internal/throw_delegate.h" -#include "absl/base/macros.h" -#include "absl/base/optimization.h" -#include "absl/base/port.h" -#include "absl/container/internal/inlined_vector.h" -#include "absl/memory/memory.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -// ----------------------------------------------------------------------------- -// InlinedVector -// ----------------------------------------------------------------------------- -// -// An `absl::InlinedVector` is designed to be a drop-in replacement for -// `std::vector` for use cases where the vector's size is sufficiently small -// that it can be inlined. If the inlined vector does grow beyond its estimated -// capacity, it will trigger an initial allocation on the heap, and will behave -// as a `std::vector`. The API of the `absl::InlinedVector` within this file is -// designed to cover the same API footprint as covered by `std::vector`. -template > -class InlinedVector { - static_assert(N > 0, "`absl::InlinedVector` requires an inlined capacity."); - - using Storage = inlined_vector_internal::Storage; - - using AllocatorTraits = typename Storage::AllocatorTraits; - using RValueReference = typename Storage::RValueReference; - using MoveIterator = typename Storage::MoveIterator; - using IsMemcpyOk = typename Storage::IsMemcpyOk; - - template - using IteratorValueAdapter = - typename Storage::template IteratorValueAdapter; - using CopyValueAdapter = typename Storage::CopyValueAdapter; - using DefaultValueAdapter = typename Storage::DefaultValueAdapter; - - template - using EnableIfAtLeastForwardIterator = absl::enable_if_t< - inlined_vector_internal::IsAtLeastForwardIterator::value>; - template - using DisableIfAtLeastForwardIterator = absl::enable_if_t< - !inlined_vector_internal::IsAtLeastForwardIterator::value>; - - public: - using allocator_type = typename Storage::allocator_type; - using value_type = typename Storage::value_type; - using pointer = typename Storage::pointer; - using const_pointer = typename Storage::const_pointer; - using size_type = typename Storage::size_type; - using difference_type = typename Storage::difference_type; - using reference = typename Storage::reference; - using const_reference = typename Storage::const_reference; - using iterator = typename Storage::iterator; - using const_iterator = typename Storage::const_iterator; - using reverse_iterator = typename Storage::reverse_iterator; - using const_reverse_iterator = typename Storage::const_reverse_iterator; - - // --------------------------------------------------------------------------- - // InlinedVector Constructors and Destructor - // --------------------------------------------------------------------------- - - // Creates an empty inlined vector with a value-initialized allocator. - InlinedVector() noexcept(noexcept(allocator_type())) : storage_() {} - - // Creates an empty inlined vector with a copy of `alloc`. - explicit InlinedVector(const allocator_type& alloc) noexcept - : storage_(alloc) {} - - // Creates an inlined vector with `n` copies of `value_type()`. - explicit InlinedVector(size_type n, - const allocator_type& alloc = allocator_type()) - : storage_(alloc) { - storage_.Initialize(DefaultValueAdapter(), n); - } - - // Creates an inlined vector with `n` copies of `v`. - InlinedVector(size_type n, const_reference v, - const allocator_type& alloc = allocator_type()) - : storage_(alloc) { - storage_.Initialize(CopyValueAdapter(v), n); - } - - // Creates an inlined vector with copies of the elements of `list`. - InlinedVector(std::initializer_list list, - const allocator_type& alloc = allocator_type()) - : InlinedVector(list.begin(), list.end(), alloc) {} - - // Creates an inlined vector with elements constructed from the provided - // forward iterator range [`first`, `last`). - // - // NOTE: the `enable_if` prevents ambiguous interpretation between a call to - // this constructor with two integral arguments and a call to the above - // `InlinedVector(size_type, const_reference)` constructor. - template * = nullptr> - InlinedVector(ForwardIterator first, ForwardIterator last, - const allocator_type& alloc = allocator_type()) - : storage_(alloc) { - storage_.Initialize(IteratorValueAdapter(first), - std::distance(first, last)); - } - - // Creates an inlined vector with elements constructed from the provided input - // iterator range [`first`, `last`). - template * = nullptr> - InlinedVector(InputIterator first, InputIterator last, - const allocator_type& alloc = allocator_type()) - : storage_(alloc) { - std::copy(first, last, std::back_inserter(*this)); - } - - // Creates an inlined vector by copying the contents of `other` using - // `other`'s allocator. - InlinedVector(const InlinedVector& other) - : InlinedVector(other, *other.storage_.GetAllocPtr()) {} - - // Creates an inlined vector by copying the contents of `other` using `alloc`. - InlinedVector(const InlinedVector& other, const allocator_type& alloc) - : storage_(alloc) { - if (other.empty()) { - // Empty; nothing to do. - } else if (IsMemcpyOk::value && !other.storage_.GetIsAllocated()) { - // Memcpy-able and do not need allocation. - storage_.MemcpyFrom(other.storage_); - } else { - storage_.InitFrom(other.storage_); - } - } - - // Creates an inlined vector by moving in the contents of `other` without - // allocating. If `other` contains allocated memory, the newly-created inlined - // vector will take ownership of that memory. However, if `other` does not - // contain allocated memory, the newly-created inlined vector will perform - // element-wise move construction of the contents of `other`. - // - // NOTE: since no allocation is performed for the inlined vector in either - // case, the `noexcept(...)` specification depends on whether moving the - // underlying objects can throw. It is assumed assumed that... - // a) move constructors should only throw due to allocation failure. - // b) if `value_type`'s move constructor allocates, it uses the same - // allocation function as the inlined vector's allocator. - // Thus, the move constructor is non-throwing if the allocator is non-throwing - // or `value_type`'s move constructor is specified as `noexcept`. - InlinedVector(InlinedVector&& other) noexcept( - absl::allocator_is_nothrow::value || - std::is_nothrow_move_constructible::value) - : storage_(*other.storage_.GetAllocPtr()) { - if (IsMemcpyOk::value) { - storage_.MemcpyFrom(other.storage_); - - other.storage_.SetInlinedSize(0); - } else if (other.storage_.GetIsAllocated()) { - storage_.SetAllocatedData(other.storage_.GetAllocatedData(), - other.storage_.GetAllocatedCapacity()); - storage_.SetAllocatedSize(other.storage_.GetSize()); - - other.storage_.SetInlinedSize(0); - } else { - IteratorValueAdapter other_values( - MoveIterator(other.storage_.GetInlinedData())); - - inlined_vector_internal::ConstructElements( - storage_.GetAllocPtr(), storage_.GetInlinedData(), &other_values, - other.storage_.GetSize()); - - storage_.SetInlinedSize(other.storage_.GetSize()); - } - } - - // Creates an inlined vector by moving in the contents of `other` with a copy - // of `alloc`. - // - // NOTE: if `other`'s allocator is not equal to `alloc`, even if `other` - // contains allocated memory, this move constructor will still allocate. Since - // allocation is performed, this constructor can only be `noexcept` if the - // specified allocator is also `noexcept`. - InlinedVector(InlinedVector&& other, const allocator_type& alloc) noexcept( - absl::allocator_is_nothrow::value) - : storage_(alloc) { - if (IsMemcpyOk::value) { - storage_.MemcpyFrom(other.storage_); - - other.storage_.SetInlinedSize(0); - } else if ((*storage_.GetAllocPtr() == *other.storage_.GetAllocPtr()) && - other.storage_.GetIsAllocated()) { - storage_.SetAllocatedData(other.storage_.GetAllocatedData(), - other.storage_.GetAllocatedCapacity()); - storage_.SetAllocatedSize(other.storage_.GetSize()); - - other.storage_.SetInlinedSize(0); - } else { - storage_.Initialize( - IteratorValueAdapter(MoveIterator(other.data())), - other.size()); - } - } - - ~InlinedVector() {} - - // --------------------------------------------------------------------------- - // InlinedVector Member Accessors - // --------------------------------------------------------------------------- - - // `InlinedVector::empty()` - // - // Returns whether the inlined vector contains no elements. - bool empty() const noexcept { return !size(); } - - // `InlinedVector::size()` - // - // Returns the number of elements in the inlined vector. - size_type size() const noexcept { return storage_.GetSize(); } - - // `InlinedVector::max_size()` - // - // Returns the maximum number of elements the inlined vector can hold. - size_type max_size() const noexcept { - // One bit of the size storage is used to indicate whether the inlined - // vector contains allocated memory. As a result, the maximum size that the - // inlined vector can express is half of the max for `size_type`. - return (std::numeric_limits::max)() / 2; - } - - // `InlinedVector::capacity()` - // - // Returns the number of elements that could be stored in the inlined vector - // without requiring a reallocation. - // - // NOTE: for most inlined vectors, `capacity()` should be equal to the - // template parameter `N`. For inlined vectors which exceed this capacity, - // they will no longer be inlined and `capacity()` will equal the capactity of - // the allocated memory. - size_type capacity() const noexcept { - return storage_.GetIsAllocated() ? storage_.GetAllocatedCapacity() - : storage_.GetInlinedCapacity(); - } - - // `InlinedVector::data()` - // - // Returns a `pointer` to the elements of the inlined vector. This pointer - // can be used to access and modify the contained elements. - // - // NOTE: only elements within [`data()`, `data() + size()`) are valid. - pointer data() noexcept { - return storage_.GetIsAllocated() ? storage_.GetAllocatedData() - : storage_.GetInlinedData(); - } - - // Overload of `InlinedVector::data()` that returns a `const_pointer` to the - // elements of the inlined vector. This pointer can be used to access but not - // modify the contained elements. - // - // NOTE: only elements within [`data()`, `data() + size()`) are valid. - const_pointer data() const noexcept { - return storage_.GetIsAllocated() ? storage_.GetAllocatedData() - : storage_.GetInlinedData(); - } - - // `InlinedVector::operator[](...)` - // - // Returns a `reference` to the `i`th element of the inlined vector. - reference operator[](size_type i) { - ABSL_HARDENING_ASSERT(i < size()); - return data()[i]; - } - - // Overload of `InlinedVector::operator[](...)` that returns a - // `const_reference` to the `i`th element of the inlined vector. - const_reference operator[](size_type i) const { - ABSL_HARDENING_ASSERT(i < size()); - return data()[i]; - } - - // `InlinedVector::at(...)` - // - // Returns a `reference` to the `i`th element of the inlined vector. - // - // NOTE: if `i` is not within the required range of `InlinedVector::at(...)`, - // in both debug and non-debug builds, `std::out_of_range` will be thrown. - reference at(size_type i) { - if (ABSL_PREDICT_FALSE(i >= size())) { - base_internal::ThrowStdOutOfRange( - "`InlinedVector::at(size_type)` failed bounds check"); - } - return data()[i]; - } - - // Overload of `InlinedVector::at(...)` that returns a `const_reference` to - // the `i`th element of the inlined vector. - // - // NOTE: if `i` is not within the required range of `InlinedVector::at(...)`, - // in both debug and non-debug builds, `std::out_of_range` will be thrown. - const_reference at(size_type i) const { - if (ABSL_PREDICT_FALSE(i >= size())) { - base_internal::ThrowStdOutOfRange( - "`InlinedVector::at(size_type) const` failed bounds check"); - } - return data()[i]; - } - - // `InlinedVector::front()` - // - // Returns a `reference` to the first element of the inlined vector. - reference front() { - ABSL_HARDENING_ASSERT(!empty()); - return data()[0]; - } - - // Overload of `InlinedVector::front()` that returns a `const_reference` to - // the first element of the inlined vector. - const_reference front() const { - ABSL_HARDENING_ASSERT(!empty()); - return data()[0]; - } - - // `InlinedVector::back()` - // - // Returns a `reference` to the last element of the inlined vector. - reference back() { - ABSL_HARDENING_ASSERT(!empty()); - return data()[size() - 1]; - } - - // Overload of `InlinedVector::back()` that returns a `const_reference` to the - // last element of the inlined vector. - const_reference back() const { - ABSL_HARDENING_ASSERT(!empty()); - return data()[size() - 1]; - } - - // `InlinedVector::begin()` - // - // Returns an `iterator` to the beginning of the inlined vector. - iterator begin() noexcept { return data(); } - - // Overload of `InlinedVector::begin()` that returns a `const_iterator` to - // the beginning of the inlined vector. - const_iterator begin() const noexcept { return data(); } - - // `InlinedVector::end()` - // - // Returns an `iterator` to the end of the inlined vector. - iterator end() noexcept { return data() + size(); } - - // Overload of `InlinedVector::end()` that returns a `const_iterator` to the - // end of the inlined vector. - const_iterator end() const noexcept { return data() + size(); } - - // `InlinedVector::cbegin()` - // - // Returns a `const_iterator` to the beginning of the inlined vector. - const_iterator cbegin() const noexcept { return begin(); } - - // `InlinedVector::cend()` - // - // Returns a `const_iterator` to the end of the inlined vector. - const_iterator cend() const noexcept { return end(); } - - // `InlinedVector::rbegin()` - // - // Returns a `reverse_iterator` from the end of the inlined vector. - reverse_iterator rbegin() noexcept { return reverse_iterator(end()); } - - // Overload of `InlinedVector::rbegin()` that returns a - // `const_reverse_iterator` from the end of the inlined vector. - const_reverse_iterator rbegin() const noexcept { - return const_reverse_iterator(end()); - } - - // `InlinedVector::rend()` - // - // Returns a `reverse_iterator` from the beginning of the inlined vector. - reverse_iterator rend() noexcept { return reverse_iterator(begin()); } - - // Overload of `InlinedVector::rend()` that returns a `const_reverse_iterator` - // from the beginning of the inlined vector. - const_reverse_iterator rend() const noexcept { - return const_reverse_iterator(begin()); - } - - // `InlinedVector::crbegin()` - // - // Returns a `const_reverse_iterator` from the end of the inlined vector. - const_reverse_iterator crbegin() const noexcept { return rbegin(); } - - // `InlinedVector::crend()` - // - // Returns a `const_reverse_iterator` from the beginning of the inlined - // vector. - const_reverse_iterator crend() const noexcept { return rend(); } - - // `InlinedVector::get_allocator()` - // - // Returns a copy of the inlined vector's allocator. - allocator_type get_allocator() const { return *storage_.GetAllocPtr(); } - - // --------------------------------------------------------------------------- - // InlinedVector Member Mutators - // --------------------------------------------------------------------------- - - // `InlinedVector::operator=(...)` - // - // Replaces the elements of the inlined vector with copies of the elements of - // `list`. - InlinedVector& operator=(std::initializer_list list) { - assign(list.begin(), list.end()); - - return *this; - } - - // Overload of `InlinedVector::operator=(...)` that replaces the elements of - // the inlined vector with copies of the elements of `other`. - InlinedVector& operator=(const InlinedVector& other) { - if (ABSL_PREDICT_TRUE(this != std::addressof(other))) { - const_pointer other_data = other.data(); - assign(other_data, other_data + other.size()); - } - - return *this; - } - - // Overload of `InlinedVector::operator=(...)` that moves the elements of - // `other` into the inlined vector. - // - // NOTE: as a result of calling this overload, `other` is left in a valid but - // unspecified state. - InlinedVector& operator=(InlinedVector&& other) { - if (ABSL_PREDICT_TRUE(this != std::addressof(other))) { - if (IsMemcpyOk::value || other.storage_.GetIsAllocated()) { - inlined_vector_internal::DestroyElements(storage_.GetAllocPtr(), data(), - size()); - storage_.DeallocateIfAllocated(); - storage_.MemcpyFrom(other.storage_); - - other.storage_.SetInlinedSize(0); - } else { - storage_.Assign(IteratorValueAdapter( - MoveIterator(other.storage_.GetInlinedData())), - other.size()); - } - } - - return *this; - } - - // `InlinedVector::assign(...)` - // - // Replaces the contents of the inlined vector with `n` copies of `v`. - void assign(size_type n, const_reference v) { - storage_.Assign(CopyValueAdapter(v), n); - } - - // Overload of `InlinedVector::assign(...)` that replaces the contents of the - // inlined vector with copies of the elements of `list`. - void assign(std::initializer_list list) { - assign(list.begin(), list.end()); - } - - // Overload of `InlinedVector::assign(...)` to replace the contents of the - // inlined vector with the range [`first`, `last`). - // - // NOTE: this overload is for iterators that are "forward" category or better. - template * = nullptr> - void assign(ForwardIterator first, ForwardIterator last) { - storage_.Assign(IteratorValueAdapter(first), - std::distance(first, last)); - } - - // Overload of `InlinedVector::assign(...)` to replace the contents of the - // inlined vector with the range [`first`, `last`). - // - // NOTE: this overload is for iterators that are "input" category. - template * = nullptr> - void assign(InputIterator first, InputIterator last) { - size_type i = 0; - for (; i < size() && first != last; ++i, static_cast(++first)) { - data()[i] = *first; - } - - erase(data() + i, data() + size()); - std::copy(first, last, std::back_inserter(*this)); - } - - // `InlinedVector::resize(...)` - // - // Resizes the inlined vector to contain `n` elements. - // - // NOTE: If `n` is smaller than `size()`, extra elements are destroyed. If `n` - // is larger than `size()`, new elements are value-initialized. - void resize(size_type n) { - ABSL_HARDENING_ASSERT(n <= max_size()); - storage_.Resize(DefaultValueAdapter(), n); - } - - // Overload of `InlinedVector::resize(...)` that resizes the inlined vector to - // contain `n` elements. - // - // NOTE: if `n` is smaller than `size()`, extra elements are destroyed. If `n` - // is larger than `size()`, new elements are copied-constructed from `v`. - void resize(size_type n, const_reference v) { - ABSL_HARDENING_ASSERT(n <= max_size()); - storage_.Resize(CopyValueAdapter(v), n); - } - - // `InlinedVector::insert(...)` - // - // Inserts a copy of `v` at `pos`, returning an `iterator` to the newly - // inserted element. - iterator insert(const_iterator pos, const_reference v) { - return emplace(pos, v); - } - - // Overload of `InlinedVector::insert(...)` that inserts `v` at `pos` using - // move semantics, returning an `iterator` to the newly inserted element. - iterator insert(const_iterator pos, RValueReference v) { - return emplace(pos, std::move(v)); - } - - // Overload of `InlinedVector::insert(...)` that inserts `n` contiguous copies - // of `v` starting at `pos`, returning an `iterator` pointing to the first of - // the newly inserted elements. - iterator insert(const_iterator pos, size_type n, const_reference v) { - ABSL_HARDENING_ASSERT(pos >= begin()); - ABSL_HARDENING_ASSERT(pos <= end()); - - if (ABSL_PREDICT_TRUE(n != 0)) { - value_type dealias = v; - return storage_.Insert(pos, CopyValueAdapter(dealias), n); - } else { - return const_cast(pos); - } - } - - // Overload of `InlinedVector::insert(...)` that inserts copies of the - // elements of `list` starting at `pos`, returning an `iterator` pointing to - // the first of the newly inserted elements. - iterator insert(const_iterator pos, std::initializer_list list) { - return insert(pos, list.begin(), list.end()); - } - - // Overload of `InlinedVector::insert(...)` that inserts the range [`first`, - // `last`) starting at `pos`, returning an `iterator` pointing to the first - // of the newly inserted elements. - // - // NOTE: this overload is for iterators that are "forward" category or better. - template * = nullptr> - iterator insert(const_iterator pos, ForwardIterator first, - ForwardIterator last) { - ABSL_HARDENING_ASSERT(pos >= begin()); - ABSL_HARDENING_ASSERT(pos <= end()); - - if (ABSL_PREDICT_TRUE(first != last)) { - return storage_.Insert(pos, IteratorValueAdapter(first), - std::distance(first, last)); - } else { - return const_cast(pos); - } - } - - // Overload of `InlinedVector::insert(...)` that inserts the range [`first`, - // `last`) starting at `pos`, returning an `iterator` pointing to the first - // of the newly inserted elements. - // - // NOTE: this overload is for iterators that are "input" category. - template * = nullptr> - iterator insert(const_iterator pos, InputIterator first, InputIterator last) { - ABSL_HARDENING_ASSERT(pos >= begin()); - ABSL_HARDENING_ASSERT(pos <= end()); - - size_type index = std::distance(cbegin(), pos); - for (size_type i = index; first != last; ++i, static_cast(++first)) { - insert(data() + i, *first); - } - - return iterator(data() + index); - } - - // `InlinedVector::emplace(...)` - // - // Constructs and inserts an element using `args...` in the inlined vector at - // `pos`, returning an `iterator` pointing to the newly emplaced element. - template - iterator emplace(const_iterator pos, Args&&... args) { - ABSL_HARDENING_ASSERT(pos >= begin()); - ABSL_HARDENING_ASSERT(pos <= end()); - - value_type dealias(std::forward(args)...); - return storage_.Insert(pos, - IteratorValueAdapter( - MoveIterator(std::addressof(dealias))), - 1); - } - - // `InlinedVector::emplace_back(...)` - // - // Constructs and inserts an element using `args...` in the inlined vector at - // `end()`, returning a `reference` to the newly emplaced element. - template - reference emplace_back(Args&&... args) { - return storage_.EmplaceBack(std::forward(args)...); - } - - // `InlinedVector::push_back(...)` - // - // Inserts a copy of `v` in the inlined vector at `end()`. - void push_back(const_reference v) { static_cast(emplace_back(v)); } - - // Overload of `InlinedVector::push_back(...)` for inserting `v` at `end()` - // using move semantics. - void push_back(RValueReference v) { - static_cast(emplace_back(std::move(v))); - } - - // `InlinedVector::pop_back()` - // - // Destroys the element at `back()`, reducing the size by `1`. - void pop_back() noexcept { - ABSL_HARDENING_ASSERT(!empty()); - - AllocatorTraits::destroy(*storage_.GetAllocPtr(), data() + (size() - 1)); - storage_.SubtractSize(1); - } - - // `InlinedVector::erase(...)` - // - // Erases the element at `pos`, returning an `iterator` pointing to where the - // erased element was located. - // - // NOTE: may return `end()`, which is not dereferencable. - iterator erase(const_iterator pos) { - ABSL_HARDENING_ASSERT(pos >= begin()); - ABSL_HARDENING_ASSERT(pos < end()); - - return storage_.Erase(pos, pos + 1); - } - - // Overload of `InlinedVector::erase(...)` that erases every element in the - // range [`from`, `to`), returning an `iterator` pointing to where the first - // erased element was located. - // - // NOTE: may return `end()`, which is not dereferencable. - iterator erase(const_iterator from, const_iterator to) { - ABSL_HARDENING_ASSERT(from >= begin()); - ABSL_HARDENING_ASSERT(from <= to); - ABSL_HARDENING_ASSERT(to <= end()); - - if (ABSL_PREDICT_TRUE(from != to)) { - return storage_.Erase(from, to); - } else { - return const_cast(from); - } - } - - // `InlinedVector::clear()` - // - // Destroys all elements in the inlined vector, setting the size to `0` and - // deallocating any held memory. - void clear() noexcept { - inlined_vector_internal::DestroyElements(storage_.GetAllocPtr(), data(), - size()); - storage_.DeallocateIfAllocated(); - - storage_.SetInlinedSize(0); - } - - // `InlinedVector::reserve(...)` - // - // Ensures that there is enough room for at least `n` elements. - void reserve(size_type n) { storage_.Reserve(n); } - - // `InlinedVector::shrink_to_fit()` - // - // Reduces memory usage by freeing unused memory. After being called, calls to - // `capacity()` will be equal to `max(N, size())`. - // - // If `size() <= N` and the inlined vector contains allocated memory, the - // elements will all be moved to the inlined space and the allocated memory - // will be deallocated. - // - // If `size() > N` and `size() < capacity()`, the elements will be moved to a - // smaller allocation. - void shrink_to_fit() { - if (storage_.GetIsAllocated()) { - storage_.ShrinkToFit(); - } - } - - // `InlinedVector::swap(...)` - // - // Swaps the contents of the inlined vector with `other`. - void swap(InlinedVector& other) { - if (ABSL_PREDICT_TRUE(this != std::addressof(other))) { - storage_.Swap(std::addressof(other.storage_)); - } - } - - private: - template - friend H AbslHashValue(H h, const absl::InlinedVector& a); - - Storage storage_; -}; - -// ----------------------------------------------------------------------------- -// InlinedVector Non-Member Functions -// ----------------------------------------------------------------------------- - -// `swap(...)` -// -// Swaps the contents of two inlined vectors. -template -void swap(absl::InlinedVector& a, - absl::InlinedVector& b) noexcept(noexcept(a.swap(b))) { - a.swap(b); -} - -// `operator==(...)` -// -// Tests for value-equality of two inlined vectors. -template -bool operator==(const absl::InlinedVector& a, - const absl::InlinedVector& b) { - auto a_data = a.data(); - auto b_data = b.data(); - return absl::equal(a_data, a_data + a.size(), b_data, b_data + b.size()); -} - -// `operator!=(...)` -// -// Tests for value-inequality of two inlined vectors. -template -bool operator!=(const absl::InlinedVector& a, - const absl::InlinedVector& b) { - return !(a == b); -} - -// `operator<(...)` -// -// Tests whether the value of an inlined vector is less than the value of -// another inlined vector using a lexicographical comparison algorithm. -template -bool operator<(const absl::InlinedVector& a, - const absl::InlinedVector& b) { - auto a_data = a.data(); - auto b_data = b.data(); - return std::lexicographical_compare(a_data, a_data + a.size(), b_data, - b_data + b.size()); -} - -// `operator>(...)` -// -// Tests whether the value of an inlined vector is greater than the value of -// another inlined vector using a lexicographical comparison algorithm. -template -bool operator>(const absl::InlinedVector& a, - const absl::InlinedVector& b) { - return b < a; -} - -// `operator<=(...)` -// -// Tests whether the value of an inlined vector is less than or equal to the -// value of another inlined vector using a lexicographical comparison algorithm. -template -bool operator<=(const absl::InlinedVector& a, - const absl::InlinedVector& b) { - return !(b < a); -} - -// `operator>=(...)` -// -// Tests whether the value of an inlined vector is greater than or equal to the -// value of another inlined vector using a lexicographical comparison algorithm. -template -bool operator>=(const absl::InlinedVector& a, - const absl::InlinedVector& b) { - return !(a < b); -} - -// `AbslHashValue(...)` -// -// Provides `absl::Hash` support for `absl::InlinedVector`. It is uncommon to -// call this directly. -template -H AbslHashValue(H h, const absl::InlinedVector& a) { - auto size = a.size(); - return H::combine(H::combine_contiguous(std::move(h), a.data(), size), size); -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INLINED_VECTOR_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/btree.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/btree.h deleted file mode 100644 index 00444a5..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/btree.h +++ /dev/null @@ -1,2620 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// A btree implementation of the STL set and map interfaces. A btree is smaller -// and generally also faster than STL set/map (refer to the benchmarks below). -// The red-black tree implementation of STL set/map has an overhead of 3 -// pointers (left, right and parent) plus the node color information for each -// stored value. So a set consumes 40 bytes for each value stored in -// 64-bit mode. This btree implementation stores multiple values on fixed -// size nodes (usually 256 bytes) and doesn't store child pointers for leaf -// nodes. The result is that a btree_set may use much less memory per -// stored value. For the random insertion benchmark in btree_bench.cc, a -// btree_set with node-size of 256 uses 5.1 bytes per stored value. -// -// The packing of multiple values on to each node of a btree has another effect -// besides better space utilization: better cache locality due to fewer cache -// lines being accessed. Better cache locality translates into faster -// operations. -// -// CAVEATS -// -// Insertions and deletions on a btree can cause splitting, merging or -// rebalancing of btree nodes. And even without these operations, insertions -// and deletions on a btree will move values around within a node. In both -// cases, the result is that insertions and deletions can invalidate iterators -// pointing to values other than the one being inserted/deleted. Therefore, this -// container does not provide pointer stability. This is notably different from -// STL set/map which takes care to not invalidate iterators on insert/erase -// except, of course, for iterators pointing to the value being erased. A -// partial workaround when erasing is available: erase() returns an iterator -// pointing to the item just after the one that was erased (or end() if none -// exists). - -#ifndef ABSL_CONTAINER_INTERNAL_BTREE_H_ -#define ABSL_CONTAINER_INTERNAL_BTREE_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "absl/base/macros.h" -#include "absl/container/internal/common.h" -#include "absl/container/internal/compressed_tuple.h" -#include "absl/container/internal/container_memory.h" -#include "absl/container/internal/layout.h" -#include "absl/memory/memory.h" -#include "absl/meta/type_traits.h" -#include "absl/strings/cord.h" -#include "absl/strings/string_view.h" -#include "absl/types/compare.h" -#include "absl/utility/utility.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// A helper class that indicates if the Compare parameter is a key-compare-to -// comparator. -template -using btree_is_key_compare_to = - std::is_convertible, - absl::weak_ordering>; - -struct StringBtreeDefaultLess { - using is_transparent = void; - - StringBtreeDefaultLess() = default; - - // Compatibility constructor. - StringBtreeDefaultLess(std::less) {} // NOLINT - StringBtreeDefaultLess(std::less) {} // NOLINT - - absl::weak_ordering operator()(absl::string_view lhs, - absl::string_view rhs) const { - return compare_internal::compare_result_as_ordering(lhs.compare(rhs)); - } - StringBtreeDefaultLess(std::less) {} // NOLINT - absl::weak_ordering operator()(const absl::Cord &lhs, - const absl::Cord &rhs) const { - return compare_internal::compare_result_as_ordering(lhs.Compare(rhs)); - } - absl::weak_ordering operator()(const absl::Cord &lhs, - absl::string_view rhs) const { - return compare_internal::compare_result_as_ordering(lhs.Compare(rhs)); - } - absl::weak_ordering operator()(absl::string_view lhs, - const absl::Cord &rhs) const { - return compare_internal::compare_result_as_ordering(-rhs.Compare(lhs)); - } -}; - -struct StringBtreeDefaultGreater { - using is_transparent = void; - - StringBtreeDefaultGreater() = default; - - StringBtreeDefaultGreater(std::greater) {} // NOLINT - StringBtreeDefaultGreater(std::greater) {} // NOLINT - - absl::weak_ordering operator()(absl::string_view lhs, - absl::string_view rhs) const { - return compare_internal::compare_result_as_ordering(rhs.compare(lhs)); - } - StringBtreeDefaultGreater(std::greater) {} // NOLINT - absl::weak_ordering operator()(const absl::Cord &lhs, - const absl::Cord &rhs) const { - return compare_internal::compare_result_as_ordering(rhs.Compare(lhs)); - } - absl::weak_ordering operator()(const absl::Cord &lhs, - absl::string_view rhs) const { - return compare_internal::compare_result_as_ordering(-lhs.Compare(rhs)); - } - absl::weak_ordering operator()(absl::string_view lhs, - const absl::Cord &rhs) const { - return compare_internal::compare_result_as_ordering(rhs.Compare(lhs)); - } -}; - -// A helper class to convert a boolean comparison into a three-way "compare-to" -// comparison that returns an `absl::weak_ordering`. This helper -// class is specialized for less, greater, -// less, greater, less, and -// greater. -// -// key_compare_to_adapter is provided so that btree users -// automatically get the more efficient compare-to code when using common -// Abseil string types with common comparison functors. -// These string-like specializations also turn on heterogeneous lookup by -// default. -template -struct key_compare_to_adapter { - using type = Compare; -}; - -template <> -struct key_compare_to_adapter> { - using type = StringBtreeDefaultLess; -}; - -template <> -struct key_compare_to_adapter> { - using type = StringBtreeDefaultGreater; -}; - -template <> -struct key_compare_to_adapter> { - using type = StringBtreeDefaultLess; -}; - -template <> -struct key_compare_to_adapter> { - using type = StringBtreeDefaultGreater; -}; - -template <> -struct key_compare_to_adapter> { - using type = StringBtreeDefaultLess; -}; - -template <> -struct key_compare_to_adapter> { - using type = StringBtreeDefaultGreater; -}; - -// Detects an 'absl_btree_prefer_linear_node_search' member. This is -// a protocol used as an opt-in or opt-out of linear search. -// -// For example, this would be useful for key types that wrap an integer -// and define their own cheap operator<(). For example: -// -// class K { -// public: -// using absl_btree_prefer_linear_node_search = std::true_type; -// ... -// private: -// friend bool operator<(K a, K b) { return a.k_ < b.k_; } -// int k_; -// }; -// -// btree_map m; // Uses linear search -// -// If T has the preference tag, then it has a preference. -// Btree will use the tag's truth value. -template -struct has_linear_node_search_preference : std::false_type {}; -template -struct prefers_linear_node_search : std::false_type {}; -template -struct has_linear_node_search_preference< - T, absl::void_t> - : std::true_type {}; -template -struct prefers_linear_node_search< - T, absl::void_t> - : T::absl_btree_prefer_linear_node_search {}; - -template -struct common_params { - // If Compare is a common comparator for a string-like type, then we adapt it - // to use heterogeneous lookup and to be a key-compare-to comparator. - using key_compare = typename key_compare_to_adapter::type; - // A type which indicates if we have a key-compare-to functor or a plain old - // key-compare functor. - using is_key_compare_to = btree_is_key_compare_to; - - using allocator_type = Alloc; - using key_type = Key; - using size_type = std::make_signed::type; - using difference_type = ptrdiff_t; - - using slot_policy = SlotPolicy; - using slot_type = typename slot_policy::slot_type; - using value_type = typename slot_policy::value_type; - using init_type = typename slot_policy::mutable_value_type; - using pointer = value_type *; - using const_pointer = const value_type *; - using reference = value_type &; - using const_reference = const value_type &; - - // For the given lookup key type, returns whether we can have multiple - // equivalent keys in the btree. If this is a multi-container, then we can. - // Otherwise, we can have multiple equivalent keys only if all of the - // following conditions are met: - // - The comparator is transparent. - // - The lookup key type is not the same as key_type. - // - The comparator is not a StringBtreeDefault{Less,Greater} comparator - // that we know has the same equivalence classes for all lookup types. - template - constexpr static bool can_have_multiple_equivalent_keys() { - return Multi || - (IsTransparent::value && - !std::is_same::value && - !std::is_same::value && - !std::is_same::value); - } - - enum { - kTargetNodeSize = TargetNodeSize, - - // Upper bound for the available space for values. This is largest for leaf - // nodes, which have overhead of at least a pointer + 4 bytes (for storing - // 3 field_types and an enum). - kNodeValueSpace = - TargetNodeSize - /*minimum overhead=*/(sizeof(void *) + 4), - }; - - // This is an integral type large enough to hold as many - // ValueSize-values as will fit a node of TargetNodeSize bytes. - using node_count_type = - absl::conditional_t<(kNodeValueSpace / sizeof(value_type) > - (std::numeric_limits::max)()), - uint16_t, uint8_t>; // NOLINT - - // The following methods are necessary for passing this struct as PolicyTraits - // for node_handle and/or are used within btree. - static value_type &element(slot_type *slot) { - return slot_policy::element(slot); - } - static const value_type &element(const slot_type *slot) { - return slot_policy::element(slot); - } - template - static void construct(Alloc *alloc, slot_type *slot, Args &&... args) { - slot_policy::construct(alloc, slot, std::forward(args)...); - } - static void construct(Alloc *alloc, slot_type *slot, slot_type *other) { - slot_policy::construct(alloc, slot, other); - } - static void destroy(Alloc *alloc, slot_type *slot) { - slot_policy::destroy(alloc, slot); - } - static void transfer(Alloc *alloc, slot_type *new_slot, slot_type *old_slot) { - construct(alloc, new_slot, old_slot); - destroy(alloc, old_slot); - } - static void swap(Alloc *alloc, slot_type *a, slot_type *b) { - slot_policy::swap(alloc, a, b); - } - static void move(Alloc *alloc, slot_type *src, slot_type *dest) { - slot_policy::move(alloc, src, dest); - } -}; - -// A parameters structure for holding the type parameters for a btree_map. -// Compare and Alloc should be nothrow copy-constructible. -template -struct map_params : common_params> { - using super_type = typename map_params::common_params; - using mapped_type = Data; - // This type allows us to move keys when it is safe to do so. It is safe - // for maps in which value_type and mutable_value_type are layout compatible. - using slot_policy = typename super_type::slot_policy; - using slot_type = typename super_type::slot_type; - using value_type = typename super_type::value_type; - using init_type = typename super_type::init_type; - - using key_compare = typename super_type::key_compare; - // Inherit from key_compare for empty base class optimization. - struct value_compare : private key_compare { - value_compare() = default; - explicit value_compare(const key_compare &cmp) : key_compare(cmp) {} - - template - auto operator()(const T &left, const U &right) const - -> decltype(std::declval()(left.first, right.first)) { - return key_compare::operator()(left.first, right.first); - } - }; - using is_map_container = std::true_type; - - template - static auto key(const V &value) -> decltype(value.first) { - return value.first; - } - static const Key &key(const slot_type *s) { return slot_policy::key(s); } - static const Key &key(slot_type *s) { return slot_policy::key(s); } - // For use in node handle. - static auto mutable_key(slot_type *s) - -> decltype(slot_policy::mutable_key(s)) { - return slot_policy::mutable_key(s); - } - static mapped_type &value(value_type *value) { return value->second; } -}; - -// This type implements the necessary functions from the -// absl::container_internal::slot_type interface. -template -struct set_slot_policy { - using slot_type = Key; - using value_type = Key; - using mutable_value_type = Key; - - static value_type &element(slot_type *slot) { return *slot; } - static const value_type &element(const slot_type *slot) { return *slot; } - - template - static void construct(Alloc *alloc, slot_type *slot, Args &&... args) { - absl::allocator_traits::construct(*alloc, slot, - std::forward(args)...); - } - - template - static void construct(Alloc *alloc, slot_type *slot, slot_type *other) { - absl::allocator_traits::construct(*alloc, slot, std::move(*other)); - } - - template - static void destroy(Alloc *alloc, slot_type *slot) { - absl::allocator_traits::destroy(*alloc, slot); - } - - template - static void swap(Alloc * /*alloc*/, slot_type *a, slot_type *b) { - using std::swap; - swap(*a, *b); - } - - template - static void move(Alloc * /*alloc*/, slot_type *src, slot_type *dest) { - *dest = std::move(*src); - } -}; - -// A parameters structure for holding the type parameters for a btree_set. -// Compare and Alloc should be nothrow copy-constructible. -template -struct set_params : common_params> { - using value_type = Key; - using slot_type = typename set_params::common_params::slot_type; - using value_compare = typename set_params::common_params::key_compare; - using is_map_container = std::false_type; - - template - static const V &key(const V &value) { return value; } - static const Key &key(const slot_type *slot) { return *slot; } - static const Key &key(slot_type *slot) { return *slot; } -}; - -// An adapter class that converts a lower-bound compare into an upper-bound -// compare. Note: there is no need to make a version of this adapter specialized -// for key-compare-to functors because the upper-bound (the first value greater -// than the input) is never an exact match. -template -struct upper_bound_adapter { - explicit upper_bound_adapter(const Compare &c) : comp(c) {} - template - bool operator()(const K1 &a, const K2 &b) const { - // Returns true when a is not greater than b. - return !compare_internal::compare_result_as_less_than(comp(b, a)); - } - - private: - Compare comp; -}; - -enum class MatchKind : uint8_t { kEq, kNe }; - -template -struct SearchResult { - V value; - MatchKind match; - - static constexpr bool HasMatch() { return true; } - bool IsEq() const { return match == MatchKind::kEq; } -}; - -// When we don't use CompareTo, `match` is not present. -// This ensures that callers can't use it accidentally when it provides no -// useful information. -template -struct SearchResult { - SearchResult() {} - explicit SearchResult(V value) : value(value) {} - SearchResult(V value, MatchKind /*match*/) : value(value) {} - - V value; - - static constexpr bool HasMatch() { return false; } - static constexpr bool IsEq() { return false; } -}; - -// A node in the btree holding. The same node type is used for both internal -// and leaf nodes in the btree, though the nodes are allocated in such a way -// that the children array is only valid in internal nodes. -template -class btree_node { - using is_key_compare_to = typename Params::is_key_compare_to; - using field_type = typename Params::node_count_type; - using allocator_type = typename Params::allocator_type; - using slot_type = typename Params::slot_type; - - public: - using params_type = Params; - using key_type = typename Params::key_type; - using value_type = typename Params::value_type; - using pointer = typename Params::pointer; - using const_pointer = typename Params::const_pointer; - using reference = typename Params::reference; - using const_reference = typename Params::const_reference; - using key_compare = typename Params::key_compare; - using size_type = typename Params::size_type; - using difference_type = typename Params::difference_type; - - // Btree decides whether to use linear node search as follows: - // - If the comparator expresses a preference, use that. - // - If the key expresses a preference, use that. - // - If the key is arithmetic and the comparator is std::less or - // std::greater, choose linear. - // - Otherwise, choose binary. - // TODO(ezb): Might make sense to add condition(s) based on node-size. - using use_linear_search = std::integral_constant< - bool, - has_linear_node_search_preference::value - ? prefers_linear_node_search::value - : has_linear_node_search_preference::value - ? prefers_linear_node_search::value - : std::is_arithmetic::value && - (std::is_same, key_compare>::value || - std::is_same, - key_compare>::value)>; - - // This class is organized by gtl::Layout as if it had the following - // structure: - // // A pointer to the node's parent. - // btree_node *parent; - // - // // The position of the node in the node's parent. - // field_type position; - // // The index of the first populated value in `values`. - // // TODO(ezb): right now, `start` is always 0. Update insertion/merge - // // logic to allow for floating storage within nodes. - // field_type start; - // // The index after the last populated value in `values`. Currently, this - // // is the same as the count of values. - // field_type finish; - // // The maximum number of values the node can hold. This is an integer in - // // [1, kNodeSlots] for root leaf nodes, kNodeSlots for non-root leaf - // // nodes, and kInternalNodeMaxCount (as a sentinel value) for internal - // // nodes (even though there are still kNodeSlots values in the node). - // // TODO(ezb): make max_count use only 4 bits and record log2(capacity) - // // to free extra bits for is_root, etc. - // field_type max_count; - // - // // The array of values. The capacity is `max_count` for leaf nodes and - // // kNodeSlots for internal nodes. Only the values in - // // [start, finish) have been initialized and are valid. - // slot_type values[max_count]; - // - // // The array of child pointers. The keys in children[i] are all less - // // than key(i). The keys in children[i + 1] are all greater than key(i). - // // There are 0 children for leaf nodes and kNodeSlots + 1 children for - // // internal nodes. - // btree_node *children[kNodeSlots + 1]; - // - // This class is only constructed by EmptyNodeType. Normally, pointers to the - // layout above are allocated, cast to btree_node*, and de-allocated within - // the btree implementation. - ~btree_node() = default; - btree_node(btree_node const &) = delete; - btree_node &operator=(btree_node const &) = delete; - - // Public for EmptyNodeType. - constexpr static size_type Alignment() { - static_assert(LeafLayout(1).Alignment() == InternalLayout().Alignment(), - "Alignment of all nodes must be equal."); - return InternalLayout().Alignment(); - } - - protected: - btree_node() = default; - - private: - using layout_type = absl::container_internal::Layout; - constexpr static size_type SizeWithNSlots(size_type n) { - return layout_type(/*parent*/ 1, - /*position, start, finish, max_count*/ 4, - /*slots*/ n, - /*children*/ 0) - .AllocSize(); - } - // A lower bound for the overhead of fields other than values in a leaf node. - constexpr static size_type MinimumOverhead() { - return SizeWithNSlots(1) - sizeof(value_type); - } - - // Compute how many values we can fit onto a leaf node taking into account - // padding. - constexpr static size_type NodeTargetSlots(const int begin, const int end) { - return begin == end ? begin - : SizeWithNSlots((begin + end) / 2 + 1) > - params_type::kTargetNodeSize - ? NodeTargetSlots(begin, (begin + end) / 2) - : NodeTargetSlots((begin + end) / 2 + 1, end); - } - - enum { - kTargetNodeSize = params_type::kTargetNodeSize, - kNodeTargetSlots = NodeTargetSlots(0, params_type::kTargetNodeSize), - - // We need a minimum of 3 slots per internal node in order to perform - // splitting (1 value for the two nodes involved in the split and 1 value - // propagated to the parent as the delimiter for the split). For performance - // reasons, we don't allow 3 slots-per-node due to bad worst case occupancy - // of 1/3 (for a node, not a b-tree). - kMinNodeSlots = 4, - - kNodeSlots = - kNodeTargetSlots >= kMinNodeSlots ? kNodeTargetSlots : kMinNodeSlots, - - // The node is internal (i.e. is not a leaf node) if and only if `max_count` - // has this value. - kInternalNodeMaxCount = 0, - }; - - // Leaves can have less than kNodeSlots values. - constexpr static layout_type LeafLayout(const int slots = kNodeSlots) { - return layout_type(/*parent*/ 1, - /*position, start, finish, max_count*/ 4, - /*slots*/ slots, - /*children*/ 0); - } - constexpr static layout_type InternalLayout() { - return layout_type(/*parent*/ 1, - /*position, start, finish, max_count*/ 4, - /*slots*/ kNodeSlots, - /*children*/ kNodeSlots + 1); - } - constexpr static size_type LeafSize(const int slots = kNodeSlots) { - return LeafLayout(slots).AllocSize(); - } - constexpr static size_type InternalSize() { - return InternalLayout().AllocSize(); - } - - // N is the index of the type in the Layout definition. - // ElementType is the Nth type in the Layout definition. - template - inline typename layout_type::template ElementType *GetField() { - // We assert that we don't read from values that aren't there. - assert(N < 3 || !leaf()); - return InternalLayout().template Pointer(reinterpret_cast(this)); - } - template - inline const typename layout_type::template ElementType *GetField() const { - assert(N < 3 || !leaf()); - return InternalLayout().template Pointer( - reinterpret_cast(this)); - } - void set_parent(btree_node *p) { *GetField<0>() = p; } - field_type &mutable_finish() { return GetField<1>()[2]; } - slot_type *slot(int i) { return &GetField<2>()[i]; } - slot_type *start_slot() { return slot(start()); } - slot_type *finish_slot() { return slot(finish()); } - const slot_type *slot(int i) const { return &GetField<2>()[i]; } - void set_position(field_type v) { GetField<1>()[0] = v; } - void set_start(field_type v) { GetField<1>()[1] = v; } - void set_finish(field_type v) { GetField<1>()[2] = v; } - // This method is only called by the node init methods. - void set_max_count(field_type v) { GetField<1>()[3] = v; } - - public: - // Whether this is a leaf node or not. This value doesn't change after the - // node is created. - bool leaf() const { return GetField<1>()[3] != kInternalNodeMaxCount; } - - // Getter for the position of this node in its parent. - field_type position() const { return GetField<1>()[0]; } - - // Getter for the offset of the first value in the `values` array. - field_type start() const { - // TODO(ezb): when floating storage is implemented, return GetField<1>()[1]; - assert(GetField<1>()[1] == 0); - return 0; - } - - // Getter for the offset after the last value in the `values` array. - field_type finish() const { return GetField<1>()[2]; } - - // Getters for the number of values stored in this node. - field_type count() const { - assert(finish() >= start()); - return finish() - start(); - } - field_type max_count() const { - // Internal nodes have max_count==kInternalNodeMaxCount. - // Leaf nodes have max_count in [1, kNodeSlots]. - const field_type max_count = GetField<1>()[3]; - return max_count == field_type{kInternalNodeMaxCount} - ? field_type{kNodeSlots} - : max_count; - } - - // Getter for the parent of this node. - btree_node *parent() const { return *GetField<0>(); } - // Getter for whether the node is the root of the tree. The parent of the - // root of the tree is the leftmost node in the tree which is guaranteed to - // be a leaf. - bool is_root() const { return parent()->leaf(); } - void make_root() { - assert(parent()->is_root()); - set_parent(parent()->parent()); - } - - // Getters for the key/value at position i in the node. - const key_type &key(int i) const { return params_type::key(slot(i)); } - reference value(int i) { return params_type::element(slot(i)); } - const_reference value(int i) const { return params_type::element(slot(i)); } - - // Getters/setter for the child at position i in the node. - btree_node *child(int i) const { return GetField<3>()[i]; } - btree_node *start_child() const { return child(start()); } - btree_node *&mutable_child(int i) { return GetField<3>()[i]; } - void clear_child(int i) { - absl::container_internal::SanitizerPoisonObject(&mutable_child(i)); - } - void set_child(int i, btree_node *c) { - absl::container_internal::SanitizerUnpoisonObject(&mutable_child(i)); - mutable_child(i) = c; - c->set_position(i); - } - void init_child(int i, btree_node *c) { - set_child(i, c); - c->set_parent(this); - } - - // Returns the position of the first value whose key is not less than k. - template - SearchResult lower_bound( - const K &k, const key_compare &comp) const { - return use_linear_search::value ? linear_search(k, comp) - : binary_search(k, comp); - } - // Returns the position of the first value whose key is greater than k. - template - int upper_bound(const K &k, const key_compare &comp) const { - auto upper_compare = upper_bound_adapter(comp); - return use_linear_search::value ? linear_search(k, upper_compare).value - : binary_search(k, upper_compare).value; - } - - template - SearchResult::value> - linear_search(const K &k, const Compare &comp) const { - return linear_search_impl(k, start(), finish(), comp, - btree_is_key_compare_to()); - } - - template - SearchResult::value> - binary_search(const K &k, const Compare &comp) const { - return binary_search_impl(k, start(), finish(), comp, - btree_is_key_compare_to()); - } - - // Returns the position of the first value whose key is not less than k using - // linear search performed using plain compare. - template - SearchResult linear_search_impl( - const K &k, int s, const int e, const Compare &comp, - std::false_type /* IsCompareTo */) const { - while (s < e) { - if (!comp(key(s), k)) { - break; - } - ++s; - } - return SearchResult{s}; - } - - // Returns the position of the first value whose key is not less than k using - // linear search performed using compare-to. - template - SearchResult linear_search_impl( - const K &k, int s, const int e, const Compare &comp, - std::true_type /* IsCompareTo */) const { - while (s < e) { - const absl::weak_ordering c = comp(key(s), k); - if (c == 0) { - return {s, MatchKind::kEq}; - } else if (c > 0) { - break; - } - ++s; - } - return {s, MatchKind::kNe}; - } - - // Returns the position of the first value whose key is not less than k using - // binary search performed using plain compare. - template - SearchResult binary_search_impl( - const K &k, int s, int e, const Compare &comp, - std::false_type /* IsCompareTo */) const { - while (s != e) { - const int mid = (s + e) >> 1; - if (comp(key(mid), k)) { - s = mid + 1; - } else { - e = mid; - } - } - return SearchResult{s}; - } - - // Returns the position of the first value whose key is not less than k using - // binary search performed using compare-to. - template - SearchResult binary_search_impl( - const K &k, int s, int e, const CompareTo &comp, - std::true_type /* IsCompareTo */) const { - if (params_type::template can_have_multiple_equivalent_keys()) { - MatchKind exact_match = MatchKind::kNe; - while (s != e) { - const int mid = (s + e) >> 1; - const absl::weak_ordering c = comp(key(mid), k); - if (c < 0) { - s = mid + 1; - } else { - e = mid; - if (c == 0) { - // Need to return the first value whose key is not less than k, - // which requires continuing the binary search if there could be - // multiple equivalent keys. - exact_match = MatchKind::kEq; - } - } - } - return {s, exact_match}; - } else { // Can't have multiple equivalent keys. - while (s != e) { - const int mid = (s + e) >> 1; - const absl::weak_ordering c = comp(key(mid), k); - if (c < 0) { - s = mid + 1; - } else if (c > 0) { - e = mid; - } else { - return {mid, MatchKind::kEq}; - } - } - return {s, MatchKind::kNe}; - } - } - - // Emplaces a value at position i, shifting all existing values and - // children at positions >= i to the right by 1. - template - void emplace_value(size_type i, allocator_type *alloc, Args &&... args); - - // Removes the values at positions [i, i + to_erase), shifting all existing - // values and children after that range to the left by to_erase. Clears all - // children between [i, i + to_erase). - void remove_values(field_type i, field_type to_erase, allocator_type *alloc); - - // Rebalances a node with its right sibling. - void rebalance_right_to_left(int to_move, btree_node *right, - allocator_type *alloc); - void rebalance_left_to_right(int to_move, btree_node *right, - allocator_type *alloc); - - // Splits a node, moving a portion of the node's values to its right sibling. - void split(int insert_position, btree_node *dest, allocator_type *alloc); - - // Merges a node with its right sibling, moving all of the values and the - // delimiting key in the parent node onto itself, and deleting the src node. - void merge(btree_node *src, allocator_type *alloc); - - // Node allocation/deletion routines. - void init_leaf(btree_node *parent, int max_count) { - set_parent(parent); - set_position(0); - set_start(0); - set_finish(0); - set_max_count(max_count); - absl::container_internal::SanitizerPoisonMemoryRegion( - start_slot(), max_count * sizeof(slot_type)); - } - void init_internal(btree_node *parent) { - init_leaf(parent, kNodeSlots); - // Set `max_count` to a sentinel value to indicate that this node is - // internal. - set_max_count(kInternalNodeMaxCount); - absl::container_internal::SanitizerPoisonMemoryRegion( - &mutable_child(start()), (kNodeSlots + 1) * sizeof(btree_node *)); - } - - static void deallocate(const size_type size, btree_node *node, - allocator_type *alloc) { - absl::container_internal::Deallocate(alloc, node, size); - } - - // Deletes a node and all of its children. - static void clear_and_delete(btree_node *node, allocator_type *alloc); - - private: - template - void value_init(const field_type i, allocator_type *alloc, Args &&... args) { - absl::container_internal::SanitizerUnpoisonObject(slot(i)); - params_type::construct(alloc, slot(i), std::forward(args)...); - } - void value_destroy(const field_type i, allocator_type *alloc) { - params_type::destroy(alloc, slot(i)); - absl::container_internal::SanitizerPoisonObject(slot(i)); - } - void value_destroy_n(const field_type i, const field_type n, - allocator_type *alloc) { - for (slot_type *s = slot(i), *end = slot(i + n); s != end; ++s) { - params_type::destroy(alloc, s); - absl::container_internal::SanitizerPoisonObject(s); - } - } - - static void transfer(slot_type *dest, slot_type *src, allocator_type *alloc) { - absl::container_internal::SanitizerUnpoisonObject(dest); - params_type::transfer(alloc, dest, src); - absl::container_internal::SanitizerPoisonObject(src); - } - - // Transfers value from slot `src_i` in `src_node` to slot `dest_i` in `this`. - void transfer(const size_type dest_i, const size_type src_i, - btree_node *src_node, allocator_type *alloc) { - transfer(slot(dest_i), src_node->slot(src_i), alloc); - } - - // Transfers `n` values starting at value `src_i` in `src_node` into the - // values starting at value `dest_i` in `this`. - void transfer_n(const size_type n, const size_type dest_i, - const size_type src_i, btree_node *src_node, - allocator_type *alloc) { - for (slot_type *src = src_node->slot(src_i), *end = src + n, - *dest = slot(dest_i); - src != end; ++src, ++dest) { - transfer(dest, src, alloc); - } - } - - // Same as above, except that we start at the end and work our way to the - // beginning. - void transfer_n_backward(const size_type n, const size_type dest_i, - const size_type src_i, btree_node *src_node, - allocator_type *alloc) { - for (slot_type *src = src_node->slot(src_i + n - 1), *end = src - n, - *dest = slot(dest_i + n - 1); - src != end; --src, --dest) { - transfer(dest, src, alloc); - } - } - - template - friend class btree; - template - friend struct btree_iterator; - friend class BtreeNodePeer; -}; - -template -struct btree_iterator { - private: - using key_type = typename Node::key_type; - using size_type = typename Node::size_type; - using params_type = typename Node::params_type; - using is_map_container = typename params_type::is_map_container; - - using node_type = Node; - using normal_node = typename std::remove_const::type; - using const_node = const Node; - using normal_pointer = typename params_type::pointer; - using normal_reference = typename params_type::reference; - using const_pointer = typename params_type::const_pointer; - using const_reference = typename params_type::const_reference; - using slot_type = typename params_type::slot_type; - - using iterator = - btree_iterator; - using const_iterator = - btree_iterator; - - public: - // These aliases are public for std::iterator_traits. - using difference_type = typename Node::difference_type; - using value_type = typename params_type::value_type; - using pointer = Pointer; - using reference = Reference; - using iterator_category = std::bidirectional_iterator_tag; - - btree_iterator() : node(nullptr), position(-1) {} - explicit btree_iterator(Node *n) : node(n), position(n->start()) {} - btree_iterator(Node *n, int p) : node(n), position(p) {} - - // NOTE: this SFINAE allows for implicit conversions from iterator to - // const_iterator, but it specifically avoids hiding the copy constructor so - // that the trivial one will be used when possible. - template , iterator>::value && - std::is_same::value, - int> = 0> - btree_iterator(const btree_iterator other) // NOLINT - : node(other.node), position(other.position) {} - - private: - // This SFINAE allows explicit conversions from const_iterator to - // iterator, but also avoids hiding the copy constructor. - // NOTE: the const_cast is safe because this constructor is only called by - // non-const methods and the container owns the nodes. - template , const_iterator>::value && - std::is_same::value, - int> = 0> - explicit btree_iterator(const btree_iterator other) - : node(const_cast(other.node)), position(other.position) {} - - // Increment/decrement the iterator. - void increment() { - if (node->leaf() && ++position < node->finish()) { - return; - } - increment_slow(); - } - void increment_slow(); - - void decrement() { - if (node->leaf() && --position >= node->start()) { - return; - } - decrement_slow(); - } - void decrement_slow(); - - public: - bool operator==(const iterator &other) const { - return node == other.node && position == other.position; - } - bool operator==(const const_iterator &other) const { - return node == other.node && position == other.position; - } - bool operator!=(const iterator &other) const { - return node != other.node || position != other.position; - } - bool operator!=(const const_iterator &other) const { - return node != other.node || position != other.position; - } - - // Accessors for the key/value the iterator is pointing at. - reference operator*() const { - ABSL_HARDENING_ASSERT(node != nullptr); - ABSL_HARDENING_ASSERT(node->start() <= position); - ABSL_HARDENING_ASSERT(node->finish() > position); - return node->value(position); - } - pointer operator->() const { return &operator*(); } - - btree_iterator &operator++() { - increment(); - return *this; - } - btree_iterator &operator--() { - decrement(); - return *this; - } - btree_iterator operator++(int) { - btree_iterator tmp = *this; - ++*this; - return tmp; - } - btree_iterator operator--(int) { - btree_iterator tmp = *this; - --*this; - return tmp; - } - - private: - friend iterator; - friend const_iterator; - template - friend class btree; - template - friend class btree_container; - template - friend class btree_set_container; - template - friend class btree_map_container; - template - friend class btree_multiset_container; - template - friend class base_checker; - - const key_type &key() const { return node->key(position); } - slot_type *slot() { return node->slot(position); } - - // The node in the tree the iterator is pointing at. - Node *node; - // The position within the node of the tree the iterator is pointing at. - // NOTE: this is an int rather than a field_type because iterators can point - // to invalid positions (such as -1) in certain circumstances. - int position; -}; - -template -class btree { - using node_type = btree_node; - using is_key_compare_to = typename Params::is_key_compare_to; - using init_type = typename Params::init_type; - using field_type = typename node_type::field_type; - - // We use a static empty node for the root/leftmost/rightmost of empty btrees - // in order to avoid branching in begin()/end(). - struct alignas(node_type::Alignment()) EmptyNodeType : node_type { - using field_type = typename node_type::field_type; - node_type *parent; - field_type position = 0; - field_type start = 0; - field_type finish = 0; - // max_count must be != kInternalNodeMaxCount (so that this node is regarded - // as a leaf node). max_count() is never called when the tree is empty. - field_type max_count = node_type::kInternalNodeMaxCount + 1; - -#ifdef _MSC_VER - // MSVC has constexpr code generations bugs here. - EmptyNodeType() : parent(this) {} -#else - constexpr EmptyNodeType(node_type *p) : parent(p) {} -#endif - }; - - static node_type *EmptyNode() { -#ifdef _MSC_VER - static EmptyNodeType *empty_node = new EmptyNodeType; - // This assert fails on some other construction methods. - assert(empty_node->parent == empty_node); - return empty_node; -#else - static constexpr EmptyNodeType empty_node( - const_cast(&empty_node)); - return const_cast(&empty_node); -#endif - } - - enum : uint32_t { - kNodeSlots = node_type::kNodeSlots, - kMinNodeValues = kNodeSlots / 2, - }; - - struct node_stats { - using size_type = typename Params::size_type; - - node_stats(size_type l, size_type i) : leaf_nodes(l), internal_nodes(i) {} - - node_stats &operator+=(const node_stats &other) { - leaf_nodes += other.leaf_nodes; - internal_nodes += other.internal_nodes; - return *this; - } - - size_type leaf_nodes; - size_type internal_nodes; - }; - - public: - using key_type = typename Params::key_type; - using value_type = typename Params::value_type; - using size_type = typename Params::size_type; - using difference_type = typename Params::difference_type; - using key_compare = typename Params::key_compare; - using value_compare = typename Params::value_compare; - using allocator_type = typename Params::allocator_type; - using reference = typename Params::reference; - using const_reference = typename Params::const_reference; - using pointer = typename Params::pointer; - using const_pointer = typename Params::const_pointer; - using iterator = - typename btree_iterator::iterator; - using const_iterator = typename iterator::const_iterator; - using reverse_iterator = std::reverse_iterator; - using const_reverse_iterator = std::reverse_iterator; - using node_handle_type = node_handle; - - // Internal types made public for use by btree_container types. - using params_type = Params; - using slot_type = typename Params::slot_type; - - private: - // For use in copy_or_move_values_in_order. - const value_type &maybe_move_from_iterator(const_iterator it) { return *it; } - value_type &&maybe_move_from_iterator(iterator it) { - // This is a destructive operation on the other container so it's safe for - // us to const_cast and move from the keys here even if it's a set. - return std::move(const_cast(*it)); - } - - // Copies or moves (depending on the template parameter) the values in - // other into this btree in their order in other. This btree must be empty - // before this method is called. This method is used in copy construction, - // copy assignment, and move assignment. - template - void copy_or_move_values_in_order(Btree &other); - - // Validates that various assumptions/requirements are true at compile time. - constexpr static bool static_assert_validation(); - - public: - btree(const key_compare &comp, const allocator_type &alloc) - : root_(comp, alloc, EmptyNode()), rightmost_(EmptyNode()), size_(0) {} - - btree(const btree &other) : btree(other, other.allocator()) {} - btree(const btree &other, const allocator_type &alloc) - : btree(other.key_comp(), alloc) { - copy_or_move_values_in_order(other); - } - btree(btree &&other) noexcept - : root_(std::move(other.root_)), - rightmost_(absl::exchange(other.rightmost_, EmptyNode())), - size_(absl::exchange(other.size_, 0)) { - other.mutable_root() = EmptyNode(); - } - btree(btree &&other, const allocator_type &alloc) - : btree(other.key_comp(), alloc) { - if (alloc == other.allocator()) { - swap(other); - } else { - // Move values from `other` one at a time when allocators are different. - copy_or_move_values_in_order(other); - } - } - - ~btree() { - // Put static_asserts in destructor to avoid triggering them before the type - // is complete. - static_assert(static_assert_validation(), "This call must be elided."); - clear(); - } - - // Assign the contents of other to *this. - btree &operator=(const btree &other); - btree &operator=(btree &&other) noexcept; - - iterator begin() { return iterator(leftmost()); } - const_iterator begin() const { return const_iterator(leftmost()); } - iterator end() { return iterator(rightmost_, rightmost_->finish()); } - const_iterator end() const { - return const_iterator(rightmost_, rightmost_->finish()); - } - reverse_iterator rbegin() { return reverse_iterator(end()); } - const_reverse_iterator rbegin() const { - return const_reverse_iterator(end()); - } - reverse_iterator rend() { return reverse_iterator(begin()); } - const_reverse_iterator rend() const { - return const_reverse_iterator(begin()); - } - - // Finds the first element whose key is not less than `key`. - template - iterator lower_bound(const K &key) { - return internal_end(internal_lower_bound(key).value); - } - template - const_iterator lower_bound(const K &key) const { - return internal_end(internal_lower_bound(key).value); - } - - // Finds the first element whose key is not less than `key` and also returns - // whether that element is equal to `key`. - template - std::pair lower_bound_equal(const K &key) const; - - // Finds the first element whose key is greater than `key`. - template - iterator upper_bound(const K &key) { - return internal_end(internal_upper_bound(key)); - } - template - const_iterator upper_bound(const K &key) const { - return internal_end(internal_upper_bound(key)); - } - - // Finds the range of values which compare equal to key. The first member of - // the returned pair is equal to lower_bound(key). The second member of the - // pair is equal to upper_bound(key). - template - std::pair equal_range(const K &key); - template - std::pair equal_range(const K &key) const { - return const_cast(this)->equal_range(key); - } - - // Inserts a value into the btree only if it does not already exist. The - // boolean return value indicates whether insertion succeeded or failed. - // Requirement: if `key` already exists in the btree, does not consume `args`. - // Requirement: `key` is never referenced after consuming `args`. - template - std::pair insert_unique(const K &key, Args &&... args); - - // Inserts with hint. Checks to see if the value should be placed immediately - // before `position` in the tree. If so, then the insertion will take - // amortized constant time. If not, the insertion will take amortized - // logarithmic time as if a call to insert_unique() were made. - // Requirement: if `key` already exists in the btree, does not consume `args`. - // Requirement: `key` is never referenced after consuming `args`. - template - std::pair insert_hint_unique(iterator position, - const K &key, - Args &&... args); - - // Insert a range of values into the btree. - // Note: the first overload avoids constructing a value_type if the key - // already exists in the btree. - template ()( - params_type::key(*std::declval()), - std::declval()))> - void insert_iterator_unique(InputIterator b, InputIterator e, int); - // We need the second overload for cases in which we need to construct a - // value_type in order to compare it with the keys already in the btree. - template - void insert_iterator_unique(InputIterator b, InputIterator e, char); - - // Inserts a value into the btree. - template - iterator insert_multi(const key_type &key, ValueType &&v); - - // Inserts a value into the btree. - template - iterator insert_multi(ValueType &&v) { - return insert_multi(params_type::key(v), std::forward(v)); - } - - // Insert with hint. Check to see if the value should be placed immediately - // before position in the tree. If it does, then the insertion will take - // amortized constant time. If not, the insertion will take amortized - // logarithmic time as if a call to insert_multi(v) were made. - template - iterator insert_hint_multi(iterator position, ValueType &&v); - - // Insert a range of values into the btree. - template - void insert_iterator_multi(InputIterator b, InputIterator e); - - // Erase the specified iterator from the btree. The iterator must be valid - // (i.e. not equal to end()). Return an iterator pointing to the node after - // the one that was erased (or end() if none exists). - // Requirement: does not read the value at `*iter`. - iterator erase(iterator iter); - - // Erases range. Returns the number of keys erased and an iterator pointing - // to the element after the last erased element. - std::pair erase_range(iterator begin, iterator end); - - // Finds an element with key equivalent to `key` or returns `end()` if `key` - // is not present. - template - iterator find(const K &key) { - return internal_end(internal_find(key)); - } - template - const_iterator find(const K &key) const { - return internal_end(internal_find(key)); - } - - // Clear the btree, deleting all of the values it contains. - void clear(); - - // Swaps the contents of `this` and `other`. - void swap(btree &other); - - const key_compare &key_comp() const noexcept { - return root_.template get<0>(); - } - template - bool compare_keys(const K1 &a, const K2 &b) const { - return compare_internal::compare_result_as_less_than(key_comp()(a, b)); - } - - value_compare value_comp() const { return value_compare(key_comp()); } - - // Verifies the structure of the btree. - void verify() const; - - // Size routines. - size_type size() const { return size_; } - size_type max_size() const { return (std::numeric_limits::max)(); } - bool empty() const { return size_ == 0; } - - // The height of the btree. An empty tree will have height 0. - size_type height() const { - size_type h = 0; - if (!empty()) { - // Count the length of the chain from the leftmost node up to the - // root. We actually count from the root back around to the level below - // the root, but the calculation is the same because of the circularity - // of that traversal. - const node_type *n = root(); - do { - ++h; - n = n->parent(); - } while (n != root()); - } - return h; - } - - // The number of internal, leaf and total nodes used by the btree. - size_type leaf_nodes() const { return internal_stats(root()).leaf_nodes; } - size_type internal_nodes() const { - return internal_stats(root()).internal_nodes; - } - size_type nodes() const { - node_stats stats = internal_stats(root()); - return stats.leaf_nodes + stats.internal_nodes; - } - - // The total number of bytes used by the btree. - size_type bytes_used() const { - node_stats stats = internal_stats(root()); - if (stats.leaf_nodes == 1 && stats.internal_nodes == 0) { - return sizeof(*this) + node_type::LeafSize(root()->max_count()); - } else { - return sizeof(*this) + stats.leaf_nodes * node_type::LeafSize() + - stats.internal_nodes * node_type::InternalSize(); - } - } - - // The average number of bytes used per value stored in the btree assuming - // random insertion order. - static double average_bytes_per_value() { - // The expected number of values per node with random insertion order is the - // average of the maximum and minimum numbers of values per node. - const double expected_values_per_node = - (kNodeSlots + kMinNodeValues) / 2.0; - return node_type::LeafSize() / expected_values_per_node; - } - - // The fullness of the btree. Computed as the number of elements in the btree - // divided by the maximum number of elements a tree with the current number - // of nodes could hold. A value of 1 indicates perfect space - // utilization. Smaller values indicate space wastage. - // Returns 0 for empty trees. - double fullness() const { - if (empty()) return 0.0; - return static_cast(size()) / (nodes() * kNodeSlots); - } - // The overhead of the btree structure in bytes per node. Computed as the - // total number of bytes used by the btree minus the number of bytes used for - // storing elements divided by the number of elements. - // Returns 0 for empty trees. - double overhead() const { - if (empty()) return 0.0; - return (bytes_used() - size() * sizeof(value_type)) / - static_cast(size()); - } - - // The allocator used by the btree. - allocator_type get_allocator() const { return allocator(); } - - private: - // Internal accessor routines. - node_type *root() { return root_.template get<2>(); } - const node_type *root() const { return root_.template get<2>(); } - node_type *&mutable_root() noexcept { return root_.template get<2>(); } - key_compare *mutable_key_comp() noexcept { return &root_.template get<0>(); } - - // The leftmost node is stored as the parent of the root node. - node_type *leftmost() { return root()->parent(); } - const node_type *leftmost() const { return root()->parent(); } - - // Allocator routines. - allocator_type *mutable_allocator() noexcept { - return &root_.template get<1>(); - } - const allocator_type &allocator() const noexcept { - return root_.template get<1>(); - } - - // Allocates a correctly aligned node of at least size bytes using the - // allocator. - node_type *allocate(const size_type size) { - return reinterpret_cast( - absl::container_internal::Allocate( - mutable_allocator(), size)); - } - - // Node creation/deletion routines. - node_type *new_internal_node(node_type *parent) { - node_type *n = allocate(node_type::InternalSize()); - n->init_internal(parent); - return n; - } - node_type *new_leaf_node(node_type *parent) { - node_type *n = allocate(node_type::LeafSize()); - n->init_leaf(parent, kNodeSlots); - return n; - } - node_type *new_leaf_root_node(const int max_count) { - node_type *n = allocate(node_type::LeafSize(max_count)); - n->init_leaf(/*parent=*/n, max_count); - return n; - } - - // Deletion helper routines. - iterator rebalance_after_delete(iterator iter); - - // Rebalances or splits the node iter points to. - void rebalance_or_split(iterator *iter); - - // Merges the values of left, right and the delimiting key on their parent - // onto left, removing the delimiting key and deleting right. - void merge_nodes(node_type *left, node_type *right); - - // Tries to merge node with its left or right sibling, and failing that, - // rebalance with its left or right sibling. Returns true if a merge - // occurred, at which point it is no longer valid to access node. Returns - // false if no merging took place. - bool try_merge_or_rebalance(iterator *iter); - - // Tries to shrink the height of the tree by 1. - void try_shrink(); - - iterator internal_end(iterator iter) { - return iter.node != nullptr ? iter : end(); - } - const_iterator internal_end(const_iterator iter) const { - return iter.node != nullptr ? iter : end(); - } - - // Emplaces a value into the btree immediately before iter. Requires that - // key(v) <= iter.key() and (--iter).key() <= key(v). - template - iterator internal_emplace(iterator iter, Args &&... args); - - // Returns an iterator pointing to the first value >= the value "iter" is - // pointing at. Note that "iter" might be pointing to an invalid location such - // as iter.position == iter.node->finish(). This routine simply moves iter up - // in the tree to a valid location. - // Requires: iter.node is non-null. - template - static IterType internal_last(IterType iter); - - // Returns an iterator pointing to the leaf position at which key would - // reside in the tree, unless there is an exact match - in which case, the - // result may not be on a leaf. When there's a three-way comparator, we can - // return whether there was an exact match. This allows the caller to avoid a - // subsequent comparison to determine if an exact match was made, which is - // important for keys with expensive comparison, such as strings. - template - SearchResult internal_locate( - const K &key) const; - - // Internal routine which implements lower_bound(). - template - SearchResult internal_lower_bound( - const K &key) const; - - // Internal routine which implements upper_bound(). - template - iterator internal_upper_bound(const K &key) const; - - // Internal routine which implements find(). - template - iterator internal_find(const K &key) const; - - // Verifies the tree structure of node. - int internal_verify(const node_type *node, const key_type *lo, - const key_type *hi) const; - - node_stats internal_stats(const node_type *node) const { - // The root can be a static empty node. - if (node == nullptr || (node == root() && empty())) { - return node_stats(0, 0); - } - if (node->leaf()) { - return node_stats(1, 0); - } - node_stats res(0, 1); - for (int i = node->start(); i <= node->finish(); ++i) { - res += internal_stats(node->child(i)); - } - return res; - } - - // We use compressed tuple in order to save space because key_compare and - // allocator_type are usually empty. - absl::container_internal::CompressedTuple - root_; - - // A pointer to the rightmost node. Note that the leftmost node is stored as - // the root's parent. - node_type *rightmost_; - - // Number of values. - size_type size_; -}; - -//// -// btree_node methods -template -template -inline void btree_node

::emplace_value(const size_type i, - allocator_type *alloc, - Args &&... args) { - assert(i >= start()); - assert(i <= finish()); - // Shift old values to create space for new value and then construct it in - // place. - if (i < finish()) { - transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this, - alloc); - } - value_init(i, alloc, std::forward(args)...); - set_finish(finish() + 1); - - if (!leaf() && finish() > i + 1) { - for (int j = finish(); j > i + 1; --j) { - set_child(j, child(j - 1)); - } - clear_child(i + 1); - } -} - -template -inline void btree_node

::remove_values(const field_type i, - const field_type to_erase, - allocator_type *alloc) { - // Transfer values after the removed range into their new places. - value_destroy_n(i, to_erase, alloc); - const field_type orig_finish = finish(); - const field_type src_i = i + to_erase; - transfer_n(orig_finish - src_i, i, src_i, this, alloc); - - if (!leaf()) { - // Delete all children between begin and end. - for (int j = 0; j < to_erase; ++j) { - clear_and_delete(child(i + j + 1), alloc); - } - // Rotate children after end into new positions. - for (int j = i + to_erase + 1; j <= orig_finish; ++j) { - set_child(j - to_erase, child(j)); - clear_child(j); - } - } - set_finish(orig_finish - to_erase); -} - -template -void btree_node

::rebalance_right_to_left(const int to_move, - btree_node *right, - allocator_type *alloc) { - assert(parent() == right->parent()); - assert(position() + 1 == right->position()); - assert(right->count() >= count()); - assert(to_move >= 1); - assert(to_move <= right->count()); - - // 1) Move the delimiting value in the parent to the left node. - transfer(finish(), position(), parent(), alloc); - - // 2) Move the (to_move - 1) values from the right node to the left node. - transfer_n(to_move - 1, finish() + 1, right->start(), right, alloc); - - // 3) Move the new delimiting value to the parent from the right node. - parent()->transfer(position(), right->start() + to_move - 1, right, alloc); - - // 4) Shift the values in the right node to their correct positions. - right->transfer_n(right->count() - to_move, right->start(), - right->start() + to_move, right, alloc); - - if (!leaf()) { - // Move the child pointers from the right to the left node. - for (int i = 0; i < to_move; ++i) { - init_child(finish() + i + 1, right->child(i)); - } - for (int i = right->start(); i <= right->finish() - to_move; ++i) { - assert(i + to_move <= right->max_count()); - right->init_child(i, right->child(i + to_move)); - right->clear_child(i + to_move); - } - } - - // Fixup `finish` on the left and right nodes. - set_finish(finish() + to_move); - right->set_finish(right->finish() - to_move); -} - -template -void btree_node

::rebalance_left_to_right(const int to_move, - btree_node *right, - allocator_type *alloc) { - assert(parent() == right->parent()); - assert(position() + 1 == right->position()); - assert(count() >= right->count()); - assert(to_move >= 1); - assert(to_move <= count()); - - // Values in the right node are shifted to the right to make room for the - // new to_move values. Then, the delimiting value in the parent and the - // other (to_move - 1) values in the left node are moved into the right node. - // Lastly, a new delimiting value is moved from the left node into the - // parent, and the remaining empty left node entries are destroyed. - - // 1) Shift existing values in the right node to their correct positions. - right->transfer_n_backward(right->count(), right->start() + to_move, - right->start(), right, alloc); - - // 2) Move the delimiting value in the parent to the right node. - right->transfer(right->start() + to_move - 1, position(), parent(), alloc); - - // 3) Move the (to_move - 1) values from the left node to the right node. - right->transfer_n(to_move - 1, right->start(), finish() - (to_move - 1), this, - alloc); - - // 4) Move the new delimiting value to the parent from the left node. - parent()->transfer(position(), finish() - to_move, this, alloc); - - if (!leaf()) { - // Move the child pointers from the left to the right node. - for (int i = right->finish(); i >= right->start(); --i) { - right->init_child(i + to_move, right->child(i)); - right->clear_child(i); - } - for (int i = 1; i <= to_move; ++i) { - right->init_child(i - 1, child(finish() - to_move + i)); - clear_child(finish() - to_move + i); - } - } - - // Fixup the counts on the left and right nodes. - set_finish(finish() - to_move); - right->set_finish(right->finish() + to_move); -} - -template -void btree_node

::split(const int insert_position, btree_node *dest, - allocator_type *alloc) { - assert(dest->count() == 0); - assert(max_count() == kNodeSlots); - - // We bias the split based on the position being inserted. If we're - // inserting at the beginning of the left node then bias the split to put - // more values on the right node. If we're inserting at the end of the - // right node then bias the split to put more values on the left node. - if (insert_position == start()) { - dest->set_finish(dest->start() + finish() - 1); - } else if (insert_position == kNodeSlots) { - dest->set_finish(dest->start()); - } else { - dest->set_finish(dest->start() + count() / 2); - } - set_finish(finish() - dest->count()); - assert(count() >= 1); - - // Move values from the left sibling to the right sibling. - dest->transfer_n(dest->count(), dest->start(), finish(), this, alloc); - - // The split key is the largest value in the left sibling. - --mutable_finish(); - parent()->emplace_value(position(), alloc, finish_slot()); - value_destroy(finish(), alloc); - parent()->init_child(position() + 1, dest); - - if (!leaf()) { - for (int i = dest->start(), j = finish() + 1; i <= dest->finish(); - ++i, ++j) { - assert(child(j) != nullptr); - dest->init_child(i, child(j)); - clear_child(j); - } - } -} - -template -void btree_node

::merge(btree_node *src, allocator_type *alloc) { - assert(parent() == src->parent()); - assert(position() + 1 == src->position()); - - // Move the delimiting value to the left node. - value_init(finish(), alloc, parent()->slot(position())); - - // Move the values from the right to the left node. - transfer_n(src->count(), finish() + 1, src->start(), src, alloc); - - if (!leaf()) { - // Move the child pointers from the right to the left node. - for (int i = src->start(), j = finish() + 1; i <= src->finish(); ++i, ++j) { - init_child(j, src->child(i)); - src->clear_child(i); - } - } - - // Fixup `finish` on the src and dest nodes. - set_finish(start() + 1 + count() + src->count()); - src->set_finish(src->start()); - - // Remove the value on the parent node and delete the src node. - parent()->remove_values(position(), /*to_erase=*/1, alloc); -} - -template -void btree_node

::clear_and_delete(btree_node *node, allocator_type *alloc) { - if (node->leaf()) { - node->value_destroy_n(node->start(), node->count(), alloc); - deallocate(LeafSize(node->max_count()), node, alloc); - return; - } - if (node->count() == 0) { - deallocate(InternalSize(), node, alloc); - return; - } - - // The parent of the root of the subtree we are deleting. - btree_node *delete_root_parent = node->parent(); - - // Navigate to the leftmost leaf under node, and then delete upwards. - while (!node->leaf()) node = node->start_child(); - // Use `int` because `pos` needs to be able to hold `kNodeSlots+1`, which - // isn't guaranteed to be a valid `field_type`. - int pos = node->position(); - btree_node *parent = node->parent(); - for (;;) { - // In each iteration of the next loop, we delete one leaf node and go right. - assert(pos <= parent->finish()); - do { - node = parent->child(pos); - if (!node->leaf()) { - // Navigate to the leftmost leaf under node. - while (!node->leaf()) node = node->start_child(); - pos = node->position(); - parent = node->parent(); - } - node->value_destroy_n(node->start(), node->count(), alloc); - deallocate(LeafSize(node->max_count()), node, alloc); - ++pos; - } while (pos <= parent->finish()); - - // Once we've deleted all children of parent, delete parent and go up/right. - assert(pos > parent->finish()); - do { - node = parent; - pos = node->position(); - parent = node->parent(); - node->value_destroy_n(node->start(), node->count(), alloc); - deallocate(InternalSize(), node, alloc); - if (parent == delete_root_parent) return; - ++pos; - } while (pos > parent->finish()); - } -} - -//// -// btree_iterator methods -template -void btree_iterator::increment_slow() { - if (node->leaf()) { - assert(position >= node->finish()); - btree_iterator save(*this); - while (position == node->finish() && !node->is_root()) { - assert(node->parent()->child(node->position()) == node); - position = node->position(); - node = node->parent(); - } - // TODO(ezb): assert we aren't incrementing end() instead of handling. - if (position == node->finish()) { - *this = save; - } - } else { - assert(position < node->finish()); - node = node->child(position + 1); - while (!node->leaf()) { - node = node->start_child(); - } - position = node->start(); - } -} - -template -void btree_iterator::decrement_slow() { - if (node->leaf()) { - assert(position <= -1); - btree_iterator save(*this); - while (position < node->start() && !node->is_root()) { - assert(node->parent()->child(node->position()) == node); - position = node->position() - 1; - node = node->parent(); - } - // TODO(ezb): assert we aren't decrementing begin() instead of handling. - if (position < node->start()) { - *this = save; - } - } else { - assert(position >= node->start()); - node = node->child(position); - while (!node->leaf()) { - node = node->child(node->finish()); - } - position = node->finish() - 1; - } -} - -//// -// btree methods -template -template -void btree

::copy_or_move_values_in_order(Btree &other) { - static_assert(std::is_same::value || - std::is_same::value, - "Btree type must be same or const."); - assert(empty()); - - // We can avoid key comparisons because we know the order of the - // values is the same order we'll store them in. - auto iter = other.begin(); - if (iter == other.end()) return; - insert_multi(maybe_move_from_iterator(iter)); - ++iter; - for (; iter != other.end(); ++iter) { - // If the btree is not empty, we can just insert the new value at the end - // of the tree. - internal_emplace(end(), maybe_move_from_iterator(iter)); - } -} - -template -constexpr bool btree

::static_assert_validation() { - static_assert(std::is_nothrow_copy_constructible::value, - "Key comparison must be nothrow copy constructible"); - static_assert(std::is_nothrow_copy_constructible::value, - "Allocator must be nothrow copy constructible"); - static_assert(type_traits_internal::is_trivially_copyable::value, - "iterator not trivially copyable."); - - // Note: We assert that kTargetValues, which is computed from - // Params::kTargetNodeSize, must fit the node_type::field_type. - static_assert( - kNodeSlots < (1 << (8 * sizeof(typename node_type::field_type))), - "target node size too large"); - - // Verify that key_compare returns an absl::{weak,strong}_ordering or bool. - using compare_result_type = - absl::result_of_t; - static_assert( - std::is_same::value || - std::is_convertible::value, - "key comparison function must return absl::{weak,strong}_ordering or " - "bool."); - - // Test the assumption made in setting kNodeValueSpace. - static_assert(node_type::MinimumOverhead() >= sizeof(void *) + 4, - "node space assumption incorrect"); - - return true; -} - -template -template -auto btree

::lower_bound_equal(const K &key) const - -> std::pair { - const SearchResult res = - internal_lower_bound(key); - const iterator lower = iterator(internal_end(res.value)); - const bool equal = res.HasMatch() - ? res.IsEq() - : lower != end() && !compare_keys(key, lower.key()); - return {lower, equal}; -} - -template -template -auto btree

::equal_range(const K &key) -> std::pair { - const std::pair lower_and_equal = lower_bound_equal(key); - const iterator lower = lower_and_equal.first; - if (!lower_and_equal.second) { - return {lower, lower}; - } - - const iterator next = std::next(lower); - if (!params_type::template can_have_multiple_equivalent_keys()) { - // The next iterator after lower must point to a key greater than `key`. - // Note: if this assert fails, then it may indicate that the comparator does - // not meet the equivalence requirements for Compare - // (see https://en.cppreference.com/w/cpp/named_req/Compare). - assert(next == end() || compare_keys(key, next.key())); - return {lower, next}; - } - // Try once more to avoid the call to upper_bound() if there's only one - // equivalent key. This should prevent all calls to upper_bound() in cases of - // unique-containers with heterogeneous comparators in which all comparison - // operators have the same equivalence classes. - if (next == end() || compare_keys(key, next.key())) return {lower, next}; - - // In this case, we need to call upper_bound() to avoid worst case O(N) - // behavior if we were to iterate over equal keys. - return {lower, upper_bound(key)}; -} - -template -template -auto btree

::insert_unique(const K &key, Args &&... args) - -> std::pair { - if (empty()) { - mutable_root() = rightmost_ = new_leaf_root_node(1); - } - - SearchResult res = internal_locate(key); - iterator iter = res.value; - - if (res.HasMatch()) { - if (res.IsEq()) { - // The key already exists in the tree, do nothing. - return {iter, false}; - } - } else { - iterator last = internal_last(iter); - if (last.node && !compare_keys(key, last.key())) { - // The key already exists in the tree, do nothing. - return {last, false}; - } - } - return {internal_emplace(iter, std::forward(args)...), true}; -} - -template -template -inline auto btree

::insert_hint_unique(iterator position, const K &key, - Args &&... args) - -> std::pair { - if (!empty()) { - if (position == end() || compare_keys(key, position.key())) { - if (position == begin() || compare_keys(std::prev(position).key(), key)) { - // prev.key() < key < position.key() - return {internal_emplace(position, std::forward(args)...), true}; - } - } else if (compare_keys(position.key(), key)) { - ++position; - if (position == end() || compare_keys(key, position.key())) { - // {original `position`}.key() < key < {current `position`}.key() - return {internal_emplace(position, std::forward(args)...), true}; - } - } else { - // position.key() == key - return {position, false}; - } - } - return insert_unique(key, std::forward(args)...); -} - -template -template -void btree

::insert_iterator_unique(InputIterator b, InputIterator e, int) { - for (; b != e; ++b) { - insert_hint_unique(end(), params_type::key(*b), *b); - } -} - -template -template -void btree

::insert_iterator_unique(InputIterator b, InputIterator e, char) { - for (; b != e; ++b) { - init_type value(*b); - insert_hint_unique(end(), params_type::key(value), std::move(value)); - } -} - -template -template -auto btree

::insert_multi(const key_type &key, ValueType &&v) -> iterator { - if (empty()) { - mutable_root() = rightmost_ = new_leaf_root_node(1); - } - - iterator iter = internal_upper_bound(key); - if (iter.node == nullptr) { - iter = end(); - } - return internal_emplace(iter, std::forward(v)); -} - -template -template -auto btree

::insert_hint_multi(iterator position, ValueType &&v) -> iterator { - if (!empty()) { - const key_type &key = params_type::key(v); - if (position == end() || !compare_keys(position.key(), key)) { - if (position == begin() || - !compare_keys(key, std::prev(position).key())) { - // prev.key() <= key <= position.key() - return internal_emplace(position, std::forward(v)); - } - } else { - ++position; - if (position == end() || !compare_keys(position.key(), key)) { - // {original `position`}.key() < key < {current `position`}.key() - return internal_emplace(position, std::forward(v)); - } - } - } - return insert_multi(std::forward(v)); -} - -template -template -void btree

::insert_iterator_multi(InputIterator b, InputIterator e) { - for (; b != e; ++b) { - insert_hint_multi(end(), *b); - } -} - -template -auto btree

::operator=(const btree &other) -> btree & { - if (this != &other) { - clear(); - - *mutable_key_comp() = other.key_comp(); - if (absl::allocator_traits< - allocator_type>::propagate_on_container_copy_assignment::value) { - *mutable_allocator() = other.allocator(); - } - - copy_or_move_values_in_order(other); - } - return *this; -} - -template -auto btree

::operator=(btree &&other) noexcept -> btree & { - if (this != &other) { - clear(); - - using std::swap; - if (absl::allocator_traits< - allocator_type>::propagate_on_container_copy_assignment::value) { - // Note: `root_` also contains the allocator and the key comparator. - swap(root_, other.root_); - swap(rightmost_, other.rightmost_); - swap(size_, other.size_); - } else { - if (allocator() == other.allocator()) { - swap(mutable_root(), other.mutable_root()); - swap(*mutable_key_comp(), *other.mutable_key_comp()); - swap(rightmost_, other.rightmost_); - swap(size_, other.size_); - } else { - // We aren't allowed to propagate the allocator and the allocator is - // different so we can't take over its memory. We must move each element - // individually. We need both `other` and `this` to have `other`s key - // comparator while moving the values so we can't swap the key - // comparators. - *mutable_key_comp() = other.key_comp(); - copy_or_move_values_in_order(other); - } - } - } - return *this; -} - -template -auto btree

::erase(iterator iter) -> iterator { - bool internal_delete = false; - if (!iter.node->leaf()) { - // Deletion of a value on an internal node. First, move the largest value - // from our left child here, then delete that position (in remove_values() - // below). We can get to the largest value from our left child by - // decrementing iter. - iterator internal_iter(iter); - --iter; - assert(iter.node->leaf()); - params_type::move(mutable_allocator(), iter.node->slot(iter.position), - internal_iter.node->slot(internal_iter.position)); - internal_delete = true; - } - - // Delete the key from the leaf. - iter.node->remove_values(iter.position, /*to_erase=*/1, mutable_allocator()); - --size_; - - // We want to return the next value after the one we just erased. If we - // erased from an internal node (internal_delete == true), then the next - // value is ++(++iter). If we erased from a leaf node (internal_delete == - // false) then the next value is ++iter. Note that ++iter may point to an - // internal node and the value in the internal node may move to a leaf node - // (iter.node) when rebalancing is performed at the leaf level. - - iterator res = rebalance_after_delete(iter); - - // If we erased from an internal node, advance the iterator. - if (internal_delete) { - ++res; - } - return res; -} - -template -auto btree

::rebalance_after_delete(iterator iter) -> iterator { - // Merge/rebalance as we walk back up the tree. - iterator res(iter); - bool first_iteration = true; - for (;;) { - if (iter.node == root()) { - try_shrink(); - if (empty()) { - return end(); - } - break; - } - if (iter.node->count() >= kMinNodeValues) { - break; - } - bool merged = try_merge_or_rebalance(&iter); - // On the first iteration, we should update `res` with `iter` because `res` - // may have been invalidated. - if (first_iteration) { - res = iter; - first_iteration = false; - } - if (!merged) { - break; - } - iter.position = iter.node->position(); - iter.node = iter.node->parent(); - } - - // Adjust our return value. If we're pointing at the end of a node, advance - // the iterator. - if (res.position == res.node->finish()) { - res.position = res.node->finish() - 1; - ++res; - } - - return res; -} - -template -auto btree

::erase_range(iterator begin, iterator end) - -> std::pair { - difference_type count = std::distance(begin, end); - assert(count >= 0); - - if (count == 0) { - return {0, begin}; - } - - if (count == size_) { - clear(); - return {count, this->end()}; - } - - if (begin.node == end.node) { - assert(end.position > begin.position); - begin.node->remove_values(begin.position, end.position - begin.position, - mutable_allocator()); - size_ -= count; - return {count, rebalance_after_delete(begin)}; - } - - const size_type target_size = size_ - count; - while (size_ > target_size) { - if (begin.node->leaf()) { - const size_type remaining_to_erase = size_ - target_size; - const size_type remaining_in_node = begin.node->finish() - begin.position; - const size_type to_erase = - (std::min)(remaining_to_erase, remaining_in_node); - begin.node->remove_values(begin.position, to_erase, mutable_allocator()); - size_ -= to_erase; - begin = rebalance_after_delete(begin); - } else { - begin = erase(begin); - } - } - return {count, begin}; -} - -template -void btree

::clear() { - if (!empty()) { - node_type::clear_and_delete(root(), mutable_allocator()); - } - mutable_root() = EmptyNode(); - rightmost_ = EmptyNode(); - size_ = 0; -} - -template -void btree

::swap(btree &other) { - using std::swap; - if (absl::allocator_traits< - allocator_type>::propagate_on_container_swap::value) { - // Note: `root_` also contains the allocator and the key comparator. - swap(root_, other.root_); - } else { - // It's undefined behavior if the allocators are unequal here. - assert(allocator() == other.allocator()); - swap(mutable_root(), other.mutable_root()); - swap(*mutable_key_comp(), *other.mutable_key_comp()); - } - swap(rightmost_, other.rightmost_); - swap(size_, other.size_); -} - -template -void btree

::verify() const { - assert(root() != nullptr); - assert(leftmost() != nullptr); - assert(rightmost_ != nullptr); - assert(empty() || size() == internal_verify(root(), nullptr, nullptr)); - assert(leftmost() == (++const_iterator(root(), -1)).node); - assert(rightmost_ == (--const_iterator(root(), root()->finish())).node); - assert(leftmost()->leaf()); - assert(rightmost_->leaf()); -} - -template -void btree

::rebalance_or_split(iterator *iter) { - node_type *&node = iter->node; - int &insert_position = iter->position; - assert(node->count() == node->max_count()); - assert(kNodeSlots == node->max_count()); - - // First try to make room on the node by rebalancing. - node_type *parent = node->parent(); - if (node != root()) { - if (node->position() > parent->start()) { - // Try rebalancing with our left sibling. - node_type *left = parent->child(node->position() - 1); - assert(left->max_count() == kNodeSlots); - if (left->count() < kNodeSlots) { - // We bias rebalancing based on the position being inserted. If we're - // inserting at the end of the right node then we bias rebalancing to - // fill up the left node. - int to_move = (kNodeSlots - left->count()) / - (1 + (insert_position < static_cast(kNodeSlots))); - to_move = (std::max)(1, to_move); - - if (insert_position - to_move >= node->start() || - left->count() + to_move < static_cast(kNodeSlots)) { - left->rebalance_right_to_left(to_move, node, mutable_allocator()); - - assert(node->max_count() - node->count() == to_move); - insert_position = insert_position - to_move; - if (insert_position < node->start()) { - insert_position = insert_position + left->count() + 1; - node = left; - } - - assert(node->count() < node->max_count()); - return; - } - } - } - - if (node->position() < parent->finish()) { - // Try rebalancing with our right sibling. - node_type *right = parent->child(node->position() + 1); - assert(right->max_count() == kNodeSlots); - if (right->count() < kNodeSlots) { - // We bias rebalancing based on the position being inserted. If we're - // inserting at the beginning of the left node then we bias rebalancing - // to fill up the right node. - int to_move = (static_cast(kNodeSlots) - right->count()) / - (1 + (insert_position > node->start())); - to_move = (std::max)(1, to_move); - - if (insert_position <= node->finish() - to_move || - right->count() + to_move < static_cast(kNodeSlots)) { - node->rebalance_left_to_right(to_move, right, mutable_allocator()); - - if (insert_position > node->finish()) { - insert_position = insert_position - node->count() - 1; - node = right; - } - - assert(node->count() < node->max_count()); - return; - } - } - } - - // Rebalancing failed, make sure there is room on the parent node for a new - // value. - assert(parent->max_count() == kNodeSlots); - if (parent->count() == kNodeSlots) { - iterator parent_iter(node->parent(), node->position()); - rebalance_or_split(&parent_iter); - } - } else { - // Rebalancing not possible because this is the root node. - // Create a new root node and set the current root node as the child of the - // new root. - parent = new_internal_node(parent); - parent->init_child(parent->start(), root()); - mutable_root() = parent; - // If the former root was a leaf node, then it's now the rightmost node. - assert(!parent->start_child()->leaf() || - parent->start_child() == rightmost_); - } - - // Split the node. - node_type *split_node; - if (node->leaf()) { - split_node = new_leaf_node(parent); - node->split(insert_position, split_node, mutable_allocator()); - if (rightmost_ == node) rightmost_ = split_node; - } else { - split_node = new_internal_node(parent); - node->split(insert_position, split_node, mutable_allocator()); - } - - if (insert_position > node->finish()) { - insert_position = insert_position - node->count() - 1; - node = split_node; - } -} - -template -void btree

::merge_nodes(node_type *left, node_type *right) { - left->merge(right, mutable_allocator()); - if (rightmost_ == right) rightmost_ = left; -} - -template -bool btree

::try_merge_or_rebalance(iterator *iter) { - node_type *parent = iter->node->parent(); - if (iter->node->position() > parent->start()) { - // Try merging with our left sibling. - node_type *left = parent->child(iter->node->position() - 1); - assert(left->max_count() == kNodeSlots); - if (1U + left->count() + iter->node->count() <= kNodeSlots) { - iter->position += 1 + left->count(); - merge_nodes(left, iter->node); - iter->node = left; - return true; - } - } - if (iter->node->position() < parent->finish()) { - // Try merging with our right sibling. - node_type *right = parent->child(iter->node->position() + 1); - assert(right->max_count() == kNodeSlots); - if (1U + iter->node->count() + right->count() <= kNodeSlots) { - merge_nodes(iter->node, right); - return true; - } - // Try rebalancing with our right sibling. We don't perform rebalancing if - // we deleted the first element from iter->node and the node is not - // empty. This is a small optimization for the common pattern of deleting - // from the front of the tree. - if (right->count() > kMinNodeValues && - (iter->node->count() == 0 || iter->position > iter->node->start())) { - int to_move = (right->count() - iter->node->count()) / 2; - to_move = (std::min)(to_move, right->count() - 1); - iter->node->rebalance_right_to_left(to_move, right, mutable_allocator()); - return false; - } - } - if (iter->node->position() > parent->start()) { - // Try rebalancing with our left sibling. We don't perform rebalancing if - // we deleted the last element from iter->node and the node is not - // empty. This is a small optimization for the common pattern of deleting - // from the back of the tree. - node_type *left = parent->child(iter->node->position() - 1); - if (left->count() > kMinNodeValues && - (iter->node->count() == 0 || iter->position < iter->node->finish())) { - int to_move = (left->count() - iter->node->count()) / 2; - to_move = (std::min)(to_move, left->count() - 1); - left->rebalance_left_to_right(to_move, iter->node, mutable_allocator()); - iter->position += to_move; - return false; - } - } - return false; -} - -template -void btree

::try_shrink() { - node_type *orig_root = root(); - if (orig_root->count() > 0) { - return; - } - // Deleted the last item on the root node, shrink the height of the tree. - if (orig_root->leaf()) { - assert(size() == 0); - mutable_root() = rightmost_ = EmptyNode(); - } else { - node_type *child = orig_root->start_child(); - child->make_root(); - mutable_root() = child; - } - node_type::clear_and_delete(orig_root, mutable_allocator()); -} - -template -template -inline IterType btree

::internal_last(IterType iter) { - assert(iter.node != nullptr); - while (iter.position == iter.node->finish()) { - iter.position = iter.node->position(); - iter.node = iter.node->parent(); - if (iter.node->leaf()) { - iter.node = nullptr; - break; - } - } - return iter; -} - -template -template -inline auto btree

::internal_emplace(iterator iter, Args &&... args) - -> iterator { - if (!iter.node->leaf()) { - // We can't insert on an internal node. Instead, we'll insert after the - // previous value which is guaranteed to be on a leaf node. - --iter; - ++iter.position; - } - const field_type max_count = iter.node->max_count(); - allocator_type *alloc = mutable_allocator(); - if (iter.node->count() == max_count) { - // Make room in the leaf for the new item. - if (max_count < kNodeSlots) { - // Insertion into the root where the root is smaller than the full node - // size. Simply grow the size of the root node. - assert(iter.node == root()); - iter.node = - new_leaf_root_node((std::min)(kNodeSlots, 2 * max_count)); - // Transfer the values from the old root to the new root. - node_type *old_root = root(); - node_type *new_root = iter.node; - new_root->transfer_n(old_root->count(), new_root->start(), - old_root->start(), old_root, alloc); - new_root->set_finish(old_root->finish()); - old_root->set_finish(old_root->start()); - node_type::clear_and_delete(old_root, alloc); - mutable_root() = rightmost_ = new_root; - } else { - rebalance_or_split(&iter); - } - } - iter.node->emplace_value(iter.position, alloc, std::forward(args)...); - ++size_; - return iter; -} - -template -template -inline auto btree

::internal_locate(const K &key) const - -> SearchResult { - iterator iter(const_cast(root())); - for (;;) { - SearchResult res = - iter.node->lower_bound(key, key_comp()); - iter.position = res.value; - if (res.IsEq()) { - return {iter, MatchKind::kEq}; - } - // Note: in the non-key-compare-to case, we don't need to walk all the way - // down the tree if the keys are equal, but determining equality would - // require doing an extra comparison on each node on the way down, and we - // will need to go all the way to the leaf node in the expected case. - if (iter.node->leaf()) { - break; - } - iter.node = iter.node->child(iter.position); - } - // Note: in the non-key-compare-to case, the key may actually be equivalent - // here (and the MatchKind::kNe is ignored). - return {iter, MatchKind::kNe}; -} - -template -template -auto btree

::internal_lower_bound(const K &key) const - -> SearchResult { - if (!params_type::template can_have_multiple_equivalent_keys()) { - SearchResult ret = internal_locate(key); - ret.value = internal_last(ret.value); - return ret; - } - iterator iter(const_cast(root())); - SearchResult res; - bool seen_eq = false; - for (;;) { - res = iter.node->lower_bound(key, key_comp()); - iter.position = res.value; - if (iter.node->leaf()) { - break; - } - seen_eq = seen_eq || res.IsEq(); - iter.node = iter.node->child(iter.position); - } - if (res.IsEq()) return {iter, MatchKind::kEq}; - return {internal_last(iter), seen_eq ? MatchKind::kEq : MatchKind::kNe}; -} - -template -template -auto btree

::internal_upper_bound(const K &key) const -> iterator { - iterator iter(const_cast(root())); - for (;;) { - iter.position = iter.node->upper_bound(key, key_comp()); - if (iter.node->leaf()) { - break; - } - iter.node = iter.node->child(iter.position); - } - return internal_last(iter); -} - -template -template -auto btree

::internal_find(const K &key) const -> iterator { - SearchResult res = internal_locate(key); - if (res.HasMatch()) { - if (res.IsEq()) { - return res.value; - } - } else { - const iterator iter = internal_last(res.value); - if (iter.node != nullptr && !compare_keys(key, iter.key())) { - return iter; - } - } - return {nullptr, 0}; -} - -template -int btree

::internal_verify(const node_type *node, const key_type *lo, - const key_type *hi) const { - assert(node->count() > 0); - assert(node->count() <= node->max_count()); - if (lo) { - assert(!compare_keys(node->key(node->start()), *lo)); - } - if (hi) { - assert(!compare_keys(*hi, node->key(node->finish() - 1))); - } - for (int i = node->start() + 1; i < node->finish(); ++i) { - assert(!compare_keys(node->key(i), node->key(i - 1))); - } - int count = node->count(); - if (!node->leaf()) { - for (int i = node->start(); i <= node->finish(); ++i) { - assert(node->child(i) != nullptr); - assert(node->child(i)->parent() == node); - assert(node->child(i)->position() == i); - count += internal_verify(node->child(i), - i == node->start() ? lo : &node->key(i - 1), - i == node->finish() ? hi : &node->key(i)); - } - } - return count; -} - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_BTREE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/btree_container.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/btree_container.h deleted file mode 100644 index 03be708..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/btree_container.h +++ /dev/null @@ -1,682 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_BTREE_CONTAINER_H_ -#define ABSL_CONTAINER_INTERNAL_BTREE_CONTAINER_H_ - -#include -#include -#include -#include - -#include "absl/base/internal/throw_delegate.h" -#include "absl/container/internal/btree.h" // IWYU pragma: export -#include "absl/container/internal/common.h" -#include "absl/memory/memory.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// A common base class for btree_set, btree_map, btree_multiset, and -// btree_multimap. -template -class btree_container { - using params_type = typename Tree::params_type; - - protected: - // Alias used for heterogeneous lookup functions. - // `key_arg` evaluates to `K` when the functors are transparent and to - // `key_type` otherwise. It permits template argument deduction on `K` for the - // transparent case. - template - using key_arg = - typename KeyArg::value>:: - template type; - - public: - using key_type = typename Tree::key_type; - using value_type = typename Tree::value_type; - using size_type = typename Tree::size_type; - using difference_type = typename Tree::difference_type; - using key_compare = typename Tree::key_compare; - using value_compare = typename Tree::value_compare; - using allocator_type = typename Tree::allocator_type; - using reference = typename Tree::reference; - using const_reference = typename Tree::const_reference; - using pointer = typename Tree::pointer; - using const_pointer = typename Tree::const_pointer; - using iterator = typename Tree::iterator; - using const_iterator = typename Tree::const_iterator; - using reverse_iterator = typename Tree::reverse_iterator; - using const_reverse_iterator = typename Tree::const_reverse_iterator; - using node_type = typename Tree::node_handle_type; - - // Constructors/assignments. - btree_container() : tree_(key_compare(), allocator_type()) {} - explicit btree_container(const key_compare &comp, - const allocator_type &alloc = allocator_type()) - : tree_(comp, alloc) {} - explicit btree_container(const allocator_type &alloc) - : tree_(key_compare(), alloc) {} - - btree_container(const btree_container &other) - : btree_container(other, absl::allocator_traits:: - select_on_container_copy_construction( - other.get_allocator())) {} - btree_container(const btree_container &other, const allocator_type &alloc) - : tree_(other.tree_, alloc) {} - - btree_container(btree_container &&other) noexcept( - std::is_nothrow_move_constructible::value) = default; - btree_container(btree_container &&other, const allocator_type &alloc) - : tree_(std::move(other.tree_), alloc) {} - - btree_container &operator=(const btree_container &other) = default; - btree_container &operator=(btree_container &&other) noexcept( - std::is_nothrow_move_assignable::value) = default; - - // Iterator routines. - iterator begin() { return tree_.begin(); } - const_iterator begin() const { return tree_.begin(); } - const_iterator cbegin() const { return tree_.begin(); } - iterator end() { return tree_.end(); } - const_iterator end() const { return tree_.end(); } - const_iterator cend() const { return tree_.end(); } - reverse_iterator rbegin() { return tree_.rbegin(); } - const_reverse_iterator rbegin() const { return tree_.rbegin(); } - const_reverse_iterator crbegin() const { return tree_.rbegin(); } - reverse_iterator rend() { return tree_.rend(); } - const_reverse_iterator rend() const { return tree_.rend(); } - const_reverse_iterator crend() const { return tree_.rend(); } - - // Lookup routines. - template - size_type count(const key_arg &key) const { - auto equal_range = this->equal_range(key); - return std::distance(equal_range.first, equal_range.second); - } - template - iterator find(const key_arg &key) { - return tree_.find(key); - } - template - const_iterator find(const key_arg &key) const { - return tree_.find(key); - } - template - bool contains(const key_arg &key) const { - return find(key) != end(); - } - template - iterator lower_bound(const key_arg &key) { - return tree_.lower_bound(key); - } - template - const_iterator lower_bound(const key_arg &key) const { - return tree_.lower_bound(key); - } - template - iterator upper_bound(const key_arg &key) { - return tree_.upper_bound(key); - } - template - const_iterator upper_bound(const key_arg &key) const { - return tree_.upper_bound(key); - } - template - std::pair equal_range(const key_arg &key) { - return tree_.equal_range(key); - } - template - std::pair equal_range( - const key_arg &key) const { - return tree_.equal_range(key); - } - - // Deletion routines. Note that there is also a deletion routine that is - // specific to btree_set_container/btree_multiset_container. - - // Erase the specified iterator from the btree. The iterator must be valid - // (i.e. not equal to end()). Return an iterator pointing to the node after - // the one that was erased (or end() if none exists). - iterator erase(const_iterator iter) { return tree_.erase(iterator(iter)); } - iterator erase(iterator iter) { return tree_.erase(iter); } - iterator erase(const_iterator first, const_iterator last) { - return tree_.erase_range(iterator(first), iterator(last)).second; - } - template - size_type erase(const key_arg &key) { - auto equal_range = this->equal_range(key); - return tree_.erase_range(equal_range.first, equal_range.second).first; - } - - // Extract routines. - node_type extract(iterator position) { - // Use Move instead of Transfer, because the rebalancing code expects to - // have a valid object to scribble metadata bits on top of. - auto node = CommonAccess::Move(get_allocator(), position.slot()); - erase(position); - return node; - } - node_type extract(const_iterator position) { - return extract(iterator(position)); - } - - // Utility routines. - void clear() { tree_.clear(); } - void swap(btree_container &other) { tree_.swap(other.tree_); } - void verify() const { tree_.verify(); } - - // Size routines. - size_type size() const { return tree_.size(); } - size_type max_size() const { return tree_.max_size(); } - bool empty() const { return tree_.empty(); } - - friend bool operator==(const btree_container &x, const btree_container &y) { - if (x.size() != y.size()) return false; - return std::equal(x.begin(), x.end(), y.begin()); - } - - friend bool operator!=(const btree_container &x, const btree_container &y) { - return !(x == y); - } - - friend bool operator<(const btree_container &x, const btree_container &y) { - return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); - } - - friend bool operator>(const btree_container &x, const btree_container &y) { - return y < x; - } - - friend bool operator<=(const btree_container &x, const btree_container &y) { - return !(y < x); - } - - friend bool operator>=(const btree_container &x, const btree_container &y) { - return !(x < y); - } - - // The allocator used by the btree. - allocator_type get_allocator() const { return tree_.get_allocator(); } - - // The key comparator used by the btree. - key_compare key_comp() const { return tree_.key_comp(); } - value_compare value_comp() const { return tree_.value_comp(); } - - // Support absl::Hash. - template - friend State AbslHashValue(State h, const btree_container &b) { - for (const auto &v : b) { - h = State::combine(std::move(h), v); - } - return State::combine(std::move(h), b.size()); - } - - protected: - Tree tree_; -}; - -// A common base class for btree_set and btree_map. -template -class btree_set_container : public btree_container { - using super_type = btree_container; - using params_type = typename Tree::params_type; - using init_type = typename params_type::init_type; - using is_key_compare_to = typename params_type::is_key_compare_to; - friend class BtreeNodePeer; - - protected: - template - using key_arg = typename super_type::template key_arg; - - public: - using key_type = typename Tree::key_type; - using value_type = typename Tree::value_type; - using size_type = typename Tree::size_type; - using key_compare = typename Tree::key_compare; - using allocator_type = typename Tree::allocator_type; - using iterator = typename Tree::iterator; - using const_iterator = typename Tree::const_iterator; - using node_type = typename super_type::node_type; - using insert_return_type = InsertReturnType; - - // Inherit constructors. - using super_type::super_type; - btree_set_container() {} - - // Range constructors. - template - btree_set_container(InputIterator b, InputIterator e, - const key_compare &comp = key_compare(), - const allocator_type &alloc = allocator_type()) - : super_type(comp, alloc) { - insert(b, e); - } - template - btree_set_container(InputIterator b, InputIterator e, - const allocator_type &alloc) - : btree_set_container(b, e, key_compare(), alloc) {} - - // Initializer list constructors. - btree_set_container(std::initializer_list init, - const key_compare &comp = key_compare(), - const allocator_type &alloc = allocator_type()) - : btree_set_container(init.begin(), init.end(), comp, alloc) {} - btree_set_container(std::initializer_list init, - const allocator_type &alloc) - : btree_set_container(init.begin(), init.end(), alloc) {} - - // Insertion routines. - std::pair insert(const value_type &v) { - return this->tree_.insert_unique(params_type::key(v), v); - } - std::pair insert(value_type &&v) { - return this->tree_.insert_unique(params_type::key(v), std::move(v)); - } - template - std::pair emplace(Args &&... args) { - init_type v(std::forward(args)...); - return this->tree_.insert_unique(params_type::key(v), std::move(v)); - } - iterator insert(const_iterator hint, const value_type &v) { - return this->tree_ - .insert_hint_unique(iterator(hint), params_type::key(v), v) - .first; - } - iterator insert(const_iterator hint, value_type &&v) { - return this->tree_ - .insert_hint_unique(iterator(hint), params_type::key(v), std::move(v)) - .first; - } - template - iterator emplace_hint(const_iterator hint, Args &&... args) { - init_type v(std::forward(args)...); - return this->tree_ - .insert_hint_unique(iterator(hint), params_type::key(v), std::move(v)) - .first; - } - template - void insert(InputIterator b, InputIterator e) { - this->tree_.insert_iterator_unique(b, e, 0); - } - void insert(std::initializer_list init) { - this->tree_.insert_iterator_unique(init.begin(), init.end(), 0); - } - insert_return_type insert(node_type &&node) { - if (!node) return {this->end(), false, node_type()}; - std::pair res = - this->tree_.insert_unique(params_type::key(CommonAccess::GetSlot(node)), - CommonAccess::GetSlot(node)); - if (res.second) { - CommonAccess::Destroy(&node); - return {res.first, true, node_type()}; - } else { - return {res.first, false, std::move(node)}; - } - } - iterator insert(const_iterator hint, node_type &&node) { - if (!node) return this->end(); - std::pair res = this->tree_.insert_hint_unique( - iterator(hint), params_type::key(CommonAccess::GetSlot(node)), - CommonAccess::GetSlot(node)); - if (res.second) CommonAccess::Destroy(&node); - return res.first; - } - - // Node extraction routines. - template - node_type extract(const key_arg &key) { - const std::pair lower_and_equal = - this->tree_.lower_bound_equal(key); - return lower_and_equal.second ? extract(lower_and_equal.first) - : node_type(); - } - using super_type::extract; - - // Merge routines. - // Moves elements from `src` into `this`. If the element already exists in - // `this`, it is left unmodified in `src`. - template < - typename T, - typename absl::enable_if_t< - absl::conjunction< - std::is_same, - std::is_same, - std::is_same>::value, - int> = 0> - void merge(btree_container &src) { // NOLINT - for (auto src_it = src.begin(); src_it != src.end();) { - if (insert(std::move(params_type::element(src_it.slot()))).second) { - src_it = src.erase(src_it); - } else { - ++src_it; - } - } - } - - template < - typename T, - typename absl::enable_if_t< - absl::conjunction< - std::is_same, - std::is_same, - std::is_same>::value, - int> = 0> - void merge(btree_container &&src) { - merge(src); - } -}; - -// Base class for btree_map. -template -class btree_map_container : public btree_set_container { - using super_type = btree_set_container; - using params_type = typename Tree::params_type; - friend class BtreeNodePeer; - - private: - template - using key_arg = typename super_type::template key_arg; - - public: - using key_type = typename Tree::key_type; - using mapped_type = typename params_type::mapped_type; - using value_type = typename Tree::value_type; - using key_compare = typename Tree::key_compare; - using allocator_type = typename Tree::allocator_type; - using iterator = typename Tree::iterator; - using const_iterator = typename Tree::const_iterator; - - // Inherit constructors. - using super_type::super_type; - btree_map_container() {} - - // Insertion routines. - // Note: the nullptr template arguments and extra `const M&` overloads allow - // for supporting bitfield arguments. - template - std::pair insert_or_assign(const key_arg &k, - const M &obj) { - return insert_or_assign_impl(k, obj); - } - template - std::pair insert_or_assign(key_arg &&k, const M &obj) { - return insert_or_assign_impl(std::forward(k), obj); - } - template - std::pair insert_or_assign(const key_arg &k, M &&obj) { - return insert_or_assign_impl(k, std::forward(obj)); - } - template - std::pair insert_or_assign(key_arg &&k, M &&obj) { - return insert_or_assign_impl(std::forward(k), std::forward(obj)); - } - template - iterator insert_or_assign(const_iterator hint, const key_arg &k, - const M &obj) { - return insert_or_assign_hint_impl(hint, k, obj); - } - template - iterator insert_or_assign(const_iterator hint, key_arg &&k, const M &obj) { - return insert_or_assign_hint_impl(hint, std::forward(k), obj); - } - template - iterator insert_or_assign(const_iterator hint, const key_arg &k, M &&obj) { - return insert_or_assign_hint_impl(hint, k, std::forward(obj)); - } - template - iterator insert_or_assign(const_iterator hint, key_arg &&k, M &&obj) { - return insert_or_assign_hint_impl(hint, std::forward(k), - std::forward(obj)); - } - - template ::value, int> = 0> - std::pair try_emplace(const key_arg &k, Args &&... args) { - return try_emplace_impl(k, std::forward(args)...); - } - template ::value, int> = 0> - std::pair try_emplace(key_arg &&k, Args &&... args) { - return try_emplace_impl(std::forward(k), std::forward(args)...); - } - template - iterator try_emplace(const_iterator hint, const key_arg &k, - Args &&... args) { - return try_emplace_hint_impl(hint, k, std::forward(args)...); - } - template - iterator try_emplace(const_iterator hint, key_arg &&k, Args &&... args) { - return try_emplace_hint_impl(hint, std::forward(k), - std::forward(args)...); - } - - template - mapped_type &operator[](const key_arg &k) { - return try_emplace(k).first->second; - } - template - mapped_type &operator[](key_arg &&k) { - return try_emplace(std::forward(k)).first->second; - } - - template - mapped_type &at(const key_arg &key) { - auto it = this->find(key); - if (it == this->end()) - base_internal::ThrowStdOutOfRange("absl::btree_map::at"); - return it->second; - } - template - const mapped_type &at(const key_arg &key) const { - auto it = this->find(key); - if (it == this->end()) - base_internal::ThrowStdOutOfRange("absl::btree_map::at"); - return it->second; - } - - private: - // Note: when we call `std::forward(obj)` twice, it's safe because - // insert_unique/insert_hint_unique are guaranteed to not consume `obj` when - // `ret.second` is false. - template - std::pair insert_or_assign_impl(K &&k, M &&obj) { - const std::pair ret = - this->tree_.insert_unique(k, std::forward(k), std::forward(obj)); - if (!ret.second) ret.first->second = std::forward(obj); - return ret; - } - template - iterator insert_or_assign_hint_impl(const_iterator hint, K &&k, M &&obj) { - const std::pair ret = this->tree_.insert_hint_unique( - iterator(hint), k, std::forward(k), std::forward(obj)); - if (!ret.second) ret.first->second = std::forward(obj); - return ret.first; - } - - template - std::pair try_emplace_impl(K &&k, Args &&... args) { - return this->tree_.insert_unique( - k, std::piecewise_construct, std::forward_as_tuple(std::forward(k)), - std::forward_as_tuple(std::forward(args)...)); - } - template - iterator try_emplace_hint_impl(const_iterator hint, K &&k, Args &&... args) { - return this->tree_ - .insert_hint_unique(iterator(hint), k, std::piecewise_construct, - std::forward_as_tuple(std::forward(k)), - std::forward_as_tuple(std::forward(args)...)) - .first; - } -}; - -// A common base class for btree_multiset and btree_multimap. -template -class btree_multiset_container : public btree_container { - using super_type = btree_container; - using params_type = typename Tree::params_type; - using init_type = typename params_type::init_type; - using is_key_compare_to = typename params_type::is_key_compare_to; - - template - using key_arg = typename super_type::template key_arg; - - public: - using key_type = typename Tree::key_type; - using value_type = typename Tree::value_type; - using size_type = typename Tree::size_type; - using key_compare = typename Tree::key_compare; - using allocator_type = typename Tree::allocator_type; - using iterator = typename Tree::iterator; - using const_iterator = typename Tree::const_iterator; - using node_type = typename super_type::node_type; - - // Inherit constructors. - using super_type::super_type; - btree_multiset_container() {} - - // Range constructors. - template - btree_multiset_container(InputIterator b, InputIterator e, - const key_compare &comp = key_compare(), - const allocator_type &alloc = allocator_type()) - : super_type(comp, alloc) { - insert(b, e); - } - template - btree_multiset_container(InputIterator b, InputIterator e, - const allocator_type &alloc) - : btree_multiset_container(b, e, key_compare(), alloc) {} - - // Initializer list constructors. - btree_multiset_container(std::initializer_list init, - const key_compare &comp = key_compare(), - const allocator_type &alloc = allocator_type()) - : btree_multiset_container(init.begin(), init.end(), comp, alloc) {} - btree_multiset_container(std::initializer_list init, - const allocator_type &alloc) - : btree_multiset_container(init.begin(), init.end(), alloc) {} - - // Insertion routines. - iterator insert(const value_type &v) { return this->tree_.insert_multi(v); } - iterator insert(value_type &&v) { - return this->tree_.insert_multi(std::move(v)); - } - iterator insert(const_iterator hint, const value_type &v) { - return this->tree_.insert_hint_multi(iterator(hint), v); - } - iterator insert(const_iterator hint, value_type &&v) { - return this->tree_.insert_hint_multi(iterator(hint), std::move(v)); - } - template - void insert(InputIterator b, InputIterator e) { - this->tree_.insert_iterator_multi(b, e); - } - void insert(std::initializer_list init) { - this->tree_.insert_iterator_multi(init.begin(), init.end()); - } - template - iterator emplace(Args &&... args) { - return this->tree_.insert_multi(init_type(std::forward(args)...)); - } - template - iterator emplace_hint(const_iterator hint, Args &&... args) { - return this->tree_.insert_hint_multi( - iterator(hint), init_type(std::forward(args)...)); - } - iterator insert(node_type &&node) { - if (!node) return this->end(); - iterator res = - this->tree_.insert_multi(params_type::key(CommonAccess::GetSlot(node)), - CommonAccess::GetSlot(node)); - CommonAccess::Destroy(&node); - return res; - } - iterator insert(const_iterator hint, node_type &&node) { - if (!node) return this->end(); - iterator res = this->tree_.insert_hint_multi( - iterator(hint), - std::move(params_type::element(CommonAccess::GetSlot(node)))); - CommonAccess::Destroy(&node); - return res; - } - - // Node extraction routines. - template - node_type extract(const key_arg &key) { - const std::pair lower_and_equal = - this->tree_.lower_bound_equal(key); - return lower_and_equal.second ? extract(lower_and_equal.first) - : node_type(); - } - using super_type::extract; - - // Merge routines. - // Moves all elements from `src` into `this`. - template < - typename T, - typename absl::enable_if_t< - absl::conjunction< - std::is_same, - std::is_same, - std::is_same>::value, - int> = 0> - void merge(btree_container &src) { // NOLINT - for (auto src_it = src.begin(), end = src.end(); src_it != end; ++src_it) { - insert(std::move(params_type::element(src_it.slot()))); - } - src.clear(); - } - - template < - typename T, - typename absl::enable_if_t< - absl::conjunction< - std::is_same, - std::is_same, - std::is_same>::value, - int> = 0> - void merge(btree_container &&src) { - merge(src); - } -}; - -// A base class for btree_multimap. -template -class btree_multimap_container : public btree_multiset_container { - using super_type = btree_multiset_container; - using params_type = typename Tree::params_type; - - public: - using mapped_type = typename params_type::mapped_type; - - // Inherit constructors. - using super_type::super_type; - btree_multimap_container() {} -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_BTREE_CONTAINER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/common.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/common.h deleted file mode 100644 index 030e9d4..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/common.h +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_CONTAINER_H_ -#define ABSL_CONTAINER_INTERNAL_CONTAINER_H_ - -#include -#include - -#include "absl/meta/type_traits.h" -#include "absl/types/optional.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -struct IsTransparent : std::false_type {}; -template -struct IsTransparent> - : std::true_type {}; - -template -struct KeyArg { - // Transparent. Forward `K`. - template - using type = K; -}; - -template <> -struct KeyArg { - // Not transparent. Always use `key_type`. - template - using type = key_type; -}; - -// The node_handle concept from C++17. -// We specialize node_handle for sets and maps. node_handle_base holds the -// common API of both. -template -class node_handle_base { - protected: - using slot_type = typename PolicyTraits::slot_type; - - public: - using allocator_type = Alloc; - - constexpr node_handle_base() = default; - node_handle_base(node_handle_base&& other) noexcept { - *this = std::move(other); - } - ~node_handle_base() { destroy(); } - node_handle_base& operator=(node_handle_base&& other) noexcept { - destroy(); - if (!other.empty()) { - alloc_ = other.alloc_; - PolicyTraits::transfer(alloc(), slot(), other.slot()); - other.reset(); - } - return *this; - } - - bool empty() const noexcept { return !alloc_; } - explicit operator bool() const noexcept { return !empty(); } - allocator_type get_allocator() const { return *alloc_; } - - protected: - friend struct CommonAccess; - - struct transfer_tag_t {}; - node_handle_base(transfer_tag_t, const allocator_type& a, slot_type* s) - : alloc_(a) { - PolicyTraits::transfer(alloc(), slot(), s); - } - - struct move_tag_t {}; - node_handle_base(move_tag_t, const allocator_type& a, slot_type* s) - : alloc_(a) { - PolicyTraits::construct(alloc(), slot(), s); - } - - void destroy() { - if (!empty()) { - PolicyTraits::destroy(alloc(), slot()); - reset(); - } - } - - void reset() { - assert(alloc_.has_value()); - alloc_ = absl::nullopt; - } - - slot_type* slot() const { - assert(!empty()); - return reinterpret_cast(std::addressof(slot_space_)); - } - allocator_type* alloc() { return std::addressof(*alloc_); } - - private: - absl::optional alloc_ = {}; - alignas(slot_type) mutable unsigned char slot_space_[sizeof(slot_type)] = {}; -}; - -// For sets. -template -class node_handle : public node_handle_base { - using Base = node_handle_base; - - public: - using value_type = typename PolicyTraits::value_type; - - constexpr node_handle() {} - - value_type& value() const { return PolicyTraits::element(this->slot()); } - - private: - friend struct CommonAccess; - - using Base::Base; -}; - -// For maps. -template -class node_handle> - : public node_handle_base { - using Base = node_handle_base; - using slot_type = typename PolicyTraits::slot_type; - - public: - using key_type = typename Policy::key_type; - using mapped_type = typename Policy::mapped_type; - - constexpr node_handle() {} - - // When C++17 is available, we can use std::launder to provide mutable - // access to the key. Otherwise, we provide const access. - auto key() const - -> decltype(PolicyTraits::mutable_key(std::declval())) { - return PolicyTraits::mutable_key(this->slot()); - } - - mapped_type& mapped() const { - return PolicyTraits::value(&PolicyTraits::element(this->slot())); - } - - private: - friend struct CommonAccess; - - using Base::Base; -}; - -// Provide access to non-public node-handle functions. -struct CommonAccess { - template - static auto GetSlot(const Node& node) -> decltype(node.slot()) { - return node.slot(); - } - - template - static void Destroy(Node* node) { - node->destroy(); - } - - template - static void Reset(Node* node) { - node->reset(); - } - - template - static T Transfer(Args&&... args) { - return T(typename T::transfer_tag_t{}, std::forward(args)...); - } - - template - static T Move(Args&&... args) { - return T(typename T::move_tag_t{}, std::forward(args)...); - } -}; - -// Implement the insert_return_type<> concept of C++17. -template -struct InsertReturnType { - Iterator position; - bool inserted; - NodeType node; -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_CONTAINER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/compressed_tuple.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/compressed_tuple.h deleted file mode 100644 index 5ebe164..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/compressed_tuple.h +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Helper class to perform the Empty Base Optimization. -// Ts can contain classes and non-classes, empty or not. For the ones that -// are empty classes, we perform the optimization. If all types in Ts are empty -// classes, then CompressedTuple is itself an empty class. -// -// To access the members, use member get() function. -// -// Eg: -// absl::container_internal::CompressedTuple value(7, t1, t2, -// t3); -// assert(value.get<0>() == 7); -// T1& t1 = value.get<1>(); -// const T2& t2 = value.get<2>(); -// ... -// -// https://en.cppreference.com/w/cpp/language/ebo - -#ifndef ABSL_CONTAINER_INTERNAL_COMPRESSED_TUPLE_H_ -#define ABSL_CONTAINER_INTERNAL_COMPRESSED_TUPLE_H_ - -#include -#include -#include -#include - -#include "absl/utility/utility.h" - -#if defined(_MSC_VER) && !defined(__NVCC__) -// We need to mark these classes with this declspec to ensure that -// CompressedTuple happens. -#define ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC __declspec(empty_bases) -#else -#define ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class CompressedTuple; - -namespace internal_compressed_tuple { - -template -struct Elem; -template -struct Elem, I> - : std::tuple_element> {}; -template -using ElemT = typename Elem::type; - -// Use the __is_final intrinsic if available. Where it's not available, classes -// declared with the 'final' specifier cannot be used as CompressedTuple -// elements. -// TODO(sbenza): Replace this with std::is_final in C++14. -template -constexpr bool IsFinal() { -#if defined(__clang__) || defined(__GNUC__) - return __is_final(T); -#else - return false; -#endif -} - -// We can't use EBCO on other CompressedTuples because that would mean that we -// derive from multiple Storage<> instantiations with the same I parameter, -// and potentially from multiple identical Storage<> instantiations. So anytime -// we use type inheritance rather than encapsulation, we mark -// CompressedTupleImpl, to make this easy to detect. -struct uses_inheritance {}; - -template -constexpr bool ShouldUseBase() { - return std::is_class::value && std::is_empty::value && !IsFinal() && - !std::is_base_of::value; -} - -// The storage class provides two specializations: -// - For empty classes, it stores T as a base class. -// - For everything else, it stores T as a member. -template ::type>()> -#else - bool UseBase = ShouldUseBase()> -#endif -struct Storage { - T value; - constexpr Storage() = default; - template - explicit constexpr Storage(absl::in_place_t, V&& v) - : value(absl::forward(v)) {} - constexpr const T& get() const& { return value; } - T& get() & { return value; } - constexpr const T&& get() const&& { return absl::move(*this).value; } - T&& get() && { return std::move(*this).value; } -}; - -template -struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC Storage : T { - constexpr Storage() = default; - - template - explicit constexpr Storage(absl::in_place_t, V&& v) - : T(absl::forward(v)) {} - - constexpr const T& get() const& { return *this; } - T& get() & { return *this; } - constexpr const T&& get() const&& { return absl::move(*this); } - T&& get() && { return std::move(*this); } -}; - -template -struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl; - -template -struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl< - CompressedTuple, absl::index_sequence, ShouldAnyUseBase> - // We use the dummy identity function through std::integral_constant to - // convince MSVC of accepting and expanding I in that context. Without it - // you would get: - // error C3548: 'I': parameter pack cannot be used in this context - : uses_inheritance, - Storage::value>... { - constexpr CompressedTupleImpl() = default; - template - explicit constexpr CompressedTupleImpl(absl::in_place_t, Vs&&... args) - : Storage(absl::in_place, absl::forward(args))... {} - friend CompressedTuple; -}; - -template -struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl< - CompressedTuple, absl::index_sequence, false> - // We use the dummy identity function as above... - : Storage::value, false>... { - constexpr CompressedTupleImpl() = default; - template - explicit constexpr CompressedTupleImpl(absl::in_place_t, Vs&&... args) - : Storage(absl::in_place, absl::forward(args))... {} - friend CompressedTuple; -}; - -std::false_type Or(std::initializer_list); -std::true_type Or(std::initializer_list); - -// MSVC requires this to be done separately rather than within the declaration -// of CompressedTuple below. -template -constexpr bool ShouldAnyUseBase() { - return decltype( - Or({std::integral_constant()>()...})){}; -} - -template -using TupleElementMoveConstructible = - typename std::conditional::value, - std::is_convertible, - std::is_constructible>::type; - -template -struct TupleMoveConstructible : std::false_type {}; - -template -struct TupleMoveConstructible, Vs...> - : std::integral_constant< - bool, absl::conjunction< - TupleElementMoveConstructible...>::value> {}; - -template -struct compressed_tuple_size; - -template -struct compressed_tuple_size> - : public std::integral_constant {}; - -template -struct TupleItemsMoveConstructible - : std::integral_constant< - bool, TupleMoveConstructible::value == - sizeof...(Vs), - T, Vs...>::value> {}; - -} // namespace internal_compressed_tuple - -// Helper class to perform the Empty Base Class Optimization. -// Ts can contain classes and non-classes, empty or not. For the ones that -// are empty classes, we perform the CompressedTuple. If all types in Ts are -// empty classes, then CompressedTuple is itself an empty class. (This -// does not apply when one or more of those empty classes is itself an empty -// CompressedTuple.) -// -// To access the members, use member .get() function. -// -// Eg: -// absl::container_internal::CompressedTuple value(7, t1, t2, -// t3); -// assert(value.get<0>() == 7); -// T1& t1 = value.get<1>(); -// const T2& t2 = value.get<2>(); -// ... -// -// https://en.cppreference.com/w/cpp/language/ebo -template -class ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTuple - : private internal_compressed_tuple::CompressedTupleImpl< - CompressedTuple, absl::index_sequence_for, - internal_compressed_tuple::ShouldAnyUseBase()> { - private: - template - using ElemT = internal_compressed_tuple::ElemT; - - template - using StorageT = internal_compressed_tuple::Storage, I>; - - public: - // There seems to be a bug in MSVC dealing in which using '=default' here will - // cause the compiler to ignore the body of other constructors. The work- - // around is to explicitly implement the default constructor. -#if defined(_MSC_VER) - constexpr CompressedTuple() : CompressedTuple::CompressedTupleImpl() {} -#else - constexpr CompressedTuple() = default; -#endif - explicit constexpr CompressedTuple(const Ts&... base) - : CompressedTuple::CompressedTupleImpl(absl::in_place, base...) {} - - template )>>, - internal_compressed_tuple::TupleItemsMoveConstructible< - CompressedTuple, First, Vs...>>::value, - bool> = true> - explicit constexpr CompressedTuple(First&& first, Vs&&... base) - : CompressedTuple::CompressedTupleImpl(absl::in_place, - absl::forward(first), - absl::forward(base)...) {} - - template - ElemT& get() & { - return StorageT::get(); - } - - template - constexpr const ElemT& get() const& { - return StorageT::get(); - } - - template - ElemT&& get() && { - return std::move(*this).StorageT::get(); - } - - template - constexpr const ElemT&& get() const&& { - return absl::move(*this).StorageT::get(); - } -}; - -// Explicit specialization for a zero-element tuple -// (needed to avoid ambiguous overloads for the default constructor). -template <> -class ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTuple<> {}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#undef ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC - -#endif // ABSL_CONTAINER_INTERNAL_COMPRESSED_TUPLE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/container_memory.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/container_memory.h deleted file mode 100644 index e67529e..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/container_memory.h +++ /dev/null @@ -1,460 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_CONTAINER_MEMORY_H_ -#define ABSL_CONTAINER_INTERNAL_CONTAINER_MEMORY_H_ - -#include -#include -#include -#include -#include -#include -#include - -#include "absl/base/config.h" -#include "absl/memory/memory.h" -#include "absl/meta/type_traits.h" -#include "absl/utility/utility.h" - -#ifdef ABSL_HAVE_ADDRESS_SANITIZER -#include -#endif - -#ifdef ABSL_HAVE_MEMORY_SANITIZER -#include -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -struct alignas(Alignment) AlignedType {}; - -// Allocates at least n bytes aligned to the specified alignment. -// Alignment must be a power of 2. It must be positive. -// -// Note that many allocators don't honor alignment requirements above certain -// threshold (usually either alignof(std::max_align_t) or alignof(void*)). -// Allocate() doesn't apply alignment corrections. If the underlying allocator -// returns insufficiently alignment pointer, that's what you are going to get. -template -void* Allocate(Alloc* alloc, size_t n) { - static_assert(Alignment > 0, ""); - assert(n && "n must be positive"); - using M = AlignedType; - using A = typename absl::allocator_traits::template rebind_alloc; - using AT = typename absl::allocator_traits::template rebind_traits; - // On macOS, "mem_alloc" is a #define with one argument defined in - // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it - // with the "foo(bar)" syntax. - A my_mem_alloc(*alloc); - void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M)); - assert(reinterpret_cast(p) % Alignment == 0 && - "allocator does not respect alignment"); - return p; -} - -// The pointer must have been previously obtained by calling -// Allocate(alloc, n). -template -void Deallocate(Alloc* alloc, void* p, size_t n) { - static_assert(Alignment > 0, ""); - assert(n && "n must be positive"); - using M = AlignedType; - using A = typename absl::allocator_traits::template rebind_alloc; - using AT = typename absl::allocator_traits::template rebind_traits; - // On macOS, "mem_alloc" is a #define with one argument defined in - // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it - // with the "foo(bar)" syntax. - A my_mem_alloc(*alloc); - AT::deallocate(my_mem_alloc, static_cast(p), - (n + sizeof(M) - 1) / sizeof(M)); -} - -namespace memory_internal { - -// Constructs T into uninitialized storage pointed by `ptr` using the args -// specified in the tuple. -template -void ConstructFromTupleImpl(Alloc* alloc, T* ptr, Tuple&& t, - absl::index_sequence) { - absl::allocator_traits::construct( - *alloc, ptr, std::get(std::forward(t))...); -} - -template -struct WithConstructedImplF { - template - decltype(std::declval()(std::declval())) operator()( - Args&&... args) const { - return std::forward(f)(T(std::forward(args)...)); - } - F&& f; -}; - -template -decltype(std::declval()(std::declval())) WithConstructedImpl( - Tuple&& t, absl::index_sequence, F&& f) { - return WithConstructedImplF{std::forward(f)}( - std::get(std::forward(t))...); -} - -template -auto TupleRefImpl(T&& t, absl::index_sequence) - -> decltype(std::forward_as_tuple(std::get(std::forward(t))...)) { - return std::forward_as_tuple(std::get(std::forward(t))...); -} - -// Returns a tuple of references to the elements of the input tuple. T must be a -// tuple. -template -auto TupleRef(T&& t) -> decltype( - TupleRefImpl(std::forward(t), - absl::make_index_sequence< - std::tuple_size::type>::value>())) { - return TupleRefImpl( - std::forward(t), - absl::make_index_sequence< - std::tuple_size::type>::value>()); -} - -template -decltype(std::declval()(std::declval(), std::piecewise_construct, - std::declval>(), std::declval())) -DecomposePairImpl(F&& f, std::pair, V> p) { - const auto& key = std::get<0>(p.first); - return std::forward(f)(key, std::piecewise_construct, std::move(p.first), - std::move(p.second)); -} - -} // namespace memory_internal - -// Constructs T into uninitialized storage pointed by `ptr` using the args -// specified in the tuple. -template -void ConstructFromTuple(Alloc* alloc, T* ptr, Tuple&& t) { - memory_internal::ConstructFromTupleImpl( - alloc, ptr, std::forward(t), - absl::make_index_sequence< - std::tuple_size::type>::value>()); -} - -// Constructs T using the args specified in the tuple and calls F with the -// constructed value. -template -decltype(std::declval()(std::declval())) WithConstructed( - Tuple&& t, F&& f) { - return memory_internal::WithConstructedImpl( - std::forward(t), - absl::make_index_sequence< - std::tuple_size::type>::value>(), - std::forward(f)); -} - -// Given arguments of an std::pair's consructor, PairArgs() returns a pair of -// tuples with references to the passed arguments. The tuples contain -// constructor arguments for the first and the second elements of the pair. -// -// The following two snippets are equivalent. -// -// 1. std::pair p(args...); -// -// 2. auto a = PairArgs(args...); -// std::pair p(std::piecewise_construct, -// std::move(p.first), std::move(p.second)); -inline std::pair, std::tuple<>> PairArgs() { return {}; } -template -std::pair, std::tuple> PairArgs(F&& f, S&& s) { - return {std::piecewise_construct, std::forward_as_tuple(std::forward(f)), - std::forward_as_tuple(std::forward(s))}; -} -template -std::pair, std::tuple> PairArgs( - const std::pair& p) { - return PairArgs(p.first, p.second); -} -template -std::pair, std::tuple> PairArgs(std::pair&& p) { - return PairArgs(std::forward(p.first), std::forward(p.second)); -} -template -auto PairArgs(std::piecewise_construct_t, F&& f, S&& s) - -> decltype(std::make_pair(memory_internal::TupleRef(std::forward(f)), - memory_internal::TupleRef(std::forward(s)))) { - return std::make_pair(memory_internal::TupleRef(std::forward(f)), - memory_internal::TupleRef(std::forward(s))); -} - -// A helper function for implementing apply() in map policies. -template -auto DecomposePair(F&& f, Args&&... args) - -> decltype(memory_internal::DecomposePairImpl( - std::forward(f), PairArgs(std::forward(args)...))) { - return memory_internal::DecomposePairImpl( - std::forward(f), PairArgs(std::forward(args)...)); -} - -// A helper function for implementing apply() in set policies. -template -decltype(std::declval()(std::declval(), std::declval())) -DecomposeValue(F&& f, Arg&& arg) { - const auto& key = arg; - return std::forward(f)(key, std::forward(arg)); -} - -// Helper functions for asan and msan. -inline void SanitizerPoisonMemoryRegion(const void* m, size_t s) { -#ifdef ABSL_HAVE_ADDRESS_SANITIZER - ASAN_POISON_MEMORY_REGION(m, s); -#endif -#ifdef ABSL_HAVE_MEMORY_SANITIZER - __msan_poison(m, s); -#endif - (void)m; - (void)s; -} - -inline void SanitizerUnpoisonMemoryRegion(const void* m, size_t s) { -#ifdef ABSL_HAVE_ADDRESS_SANITIZER - ASAN_UNPOISON_MEMORY_REGION(m, s); -#endif -#ifdef ABSL_HAVE_MEMORY_SANITIZER - __msan_unpoison(m, s); -#endif - (void)m; - (void)s; -} - -template -inline void SanitizerPoisonObject(const T* object) { - SanitizerPoisonMemoryRegion(object, sizeof(T)); -} - -template -inline void SanitizerUnpoisonObject(const T* object) { - SanitizerUnpoisonMemoryRegion(object, sizeof(T)); -} - -namespace memory_internal { - -// If Pair is a standard-layout type, OffsetOf::kFirst and -// OffsetOf::kSecond are equivalent to offsetof(Pair, first) and -// offsetof(Pair, second) respectively. Otherwise they are -1. -// -// The purpose of OffsetOf is to avoid calling offsetof() on non-standard-layout -// type, which is non-portable. -template -struct OffsetOf { - static constexpr size_t kFirst = static_cast(-1); - static constexpr size_t kSecond = static_cast(-1); -}; - -template -struct OffsetOf::type> { - static constexpr size_t kFirst = offsetof(Pair, first); - static constexpr size_t kSecond = offsetof(Pair, second); -}; - -template -struct IsLayoutCompatible { - private: - struct Pair { - K first; - V second; - }; - - // Is P layout-compatible with Pair? - template - static constexpr bool LayoutCompatible() { - return std::is_standard_layout

() && sizeof(P) == sizeof(Pair) && - alignof(P) == alignof(Pair) && - memory_internal::OffsetOf

::kFirst == - memory_internal::OffsetOf::kFirst && - memory_internal::OffsetOf

::kSecond == - memory_internal::OffsetOf::kSecond; - } - - public: - // Whether pair and pair are layout-compatible. If they are, - // then it is safe to store them in a union and read from either. - static constexpr bool value = std::is_standard_layout() && - std::is_standard_layout() && - memory_internal::OffsetOf::kFirst == 0 && - LayoutCompatible>() && - LayoutCompatible>(); -}; - -} // namespace memory_internal - -// The internal storage type for key-value containers like flat_hash_map. -// -// It is convenient for the value_type of a flat_hash_map to be -// pair; the "const K" prevents accidental modification of the key -// when dealing with the reference returned from find() and similar methods. -// However, this creates other problems; we want to be able to emplace(K, V) -// efficiently with move operations, and similarly be able to move a -// pair in insert(). -// -// The solution is this union, which aliases the const and non-const versions -// of the pair. This also allows flat_hash_map to work, even though -// that has the same efficiency issues with move in emplace() and insert() - -// but people do it anyway. -// -// If kMutableKeys is false, only the value member can be accessed. -// -// If kMutableKeys is true, key can be accessed through all slots while value -// and mutable_value must be accessed only via INITIALIZED slots. Slots are -// created and destroyed via mutable_value so that the key can be moved later. -// -// Accessing one of the union fields while the other is active is safe as -// long as they are layout-compatible, which is guaranteed by the definition of -// kMutableKeys. For C++11, the relevant section of the standard is -// https://timsong-cpp.github.io/cppwp/n3337/class.mem#19 (9.2.19) -template -union map_slot_type { - map_slot_type() {} - ~map_slot_type() = delete; - using value_type = std::pair; - using mutable_value_type = - std::pair, absl::remove_const_t>; - - value_type value; - mutable_value_type mutable_value; - absl::remove_const_t key; -}; - -template -struct map_slot_policy { - using slot_type = map_slot_type; - using value_type = std::pair; - using mutable_value_type = std::pair; - - private: - static void emplace(slot_type* slot) { - // The construction of union doesn't do anything at runtime but it allows us - // to access its members without violating aliasing rules. - new (slot) slot_type; - } - // If pair and pair are layout-compatible, we can accept one - // or the other via slot_type. We are also free to access the key via - // slot_type::key in this case. - using kMutableKeys = memory_internal::IsLayoutCompatible; - - public: - static value_type& element(slot_type* slot) { return slot->value; } - static const value_type& element(const slot_type* slot) { - return slot->value; - } - - // When C++17 is available, we can use std::launder to provide mutable - // access to the key for use in node handle. -#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606 - static K& mutable_key(slot_type* slot) { - // Still check for kMutableKeys so that we can avoid calling std::launder - // unless necessary because it can interfere with optimizations. - return kMutableKeys::value ? slot->key - : *std::launder(const_cast( - std::addressof(slot->value.first))); - } -#else // !(defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606) - static const K& mutable_key(slot_type* slot) { return key(slot); } -#endif - - static const K& key(const slot_type* slot) { - return kMutableKeys::value ? slot->key : slot->value.first; - } - - template - static void construct(Allocator* alloc, slot_type* slot, Args&&... args) { - emplace(slot); - if (kMutableKeys::value) { - absl::allocator_traits::construct(*alloc, &slot->mutable_value, - std::forward(args)...); - } else { - absl::allocator_traits::construct(*alloc, &slot->value, - std::forward(args)...); - } - } - - // Construct this slot by moving from another slot. - template - static void construct(Allocator* alloc, slot_type* slot, slot_type* other) { - emplace(slot); - if (kMutableKeys::value) { - absl::allocator_traits::construct( - *alloc, &slot->mutable_value, std::move(other->mutable_value)); - } else { - absl::allocator_traits::construct(*alloc, &slot->value, - std::move(other->value)); - } - } - - template - static void destroy(Allocator* alloc, slot_type* slot) { - if (kMutableKeys::value) { - absl::allocator_traits::destroy(*alloc, &slot->mutable_value); - } else { - absl::allocator_traits::destroy(*alloc, &slot->value); - } - } - - template - static void transfer(Allocator* alloc, slot_type* new_slot, - slot_type* old_slot) { - emplace(new_slot); - if (kMutableKeys::value) { - absl::allocator_traits::construct( - *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value)); - } else { - absl::allocator_traits::construct(*alloc, &new_slot->value, - std::move(old_slot->value)); - } - destroy(alloc, old_slot); - } - - template - static void swap(Allocator* alloc, slot_type* a, slot_type* b) { - if (kMutableKeys::value) { - using std::swap; - swap(a->mutable_value, b->mutable_value); - } else { - value_type tmp = std::move(a->value); - absl::allocator_traits::destroy(*alloc, &a->value); - absl::allocator_traits::construct(*alloc, &a->value, - std::move(b->value)); - absl::allocator_traits::destroy(*alloc, &b->value); - absl::allocator_traits::construct(*alloc, &b->value, - std::move(tmp)); - } - } - - template - static void move(Allocator* alloc, slot_type* src, slot_type* dest) { - if (kMutableKeys::value) { - dest->mutable_value = std::move(src->mutable_value); - } else { - absl::allocator_traits::destroy(*alloc, &dest->value); - absl::allocator_traits::construct(*alloc, &dest->value, - std::move(src->value)); - } - } -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_CONTAINER_MEMORY_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/counting_allocator.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/counting_allocator.h deleted file mode 100644 index 927cf08..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/counting_allocator.h +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_COUNTING_ALLOCATOR_H_ -#define ABSL_CONTAINER_INTERNAL_COUNTING_ALLOCATOR_H_ - -#include -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// This is a stateful allocator, but the state lives outside of the -// allocator (in whatever test is using the allocator). This is odd -// but helps in tests where the allocator is propagated into nested -// containers - that chain of allocators uses the same state and is -// thus easier to query for aggregate allocation information. -template -class CountingAllocator { - public: - using Allocator = std::allocator; - using AllocatorTraits = std::allocator_traits; - using value_type = typename AllocatorTraits::value_type; - using pointer = typename AllocatorTraits::pointer; - using const_pointer = typename AllocatorTraits::const_pointer; - using size_type = typename AllocatorTraits::size_type; - using difference_type = typename AllocatorTraits::difference_type; - - CountingAllocator() = default; - explicit CountingAllocator(int64_t* bytes_used) : bytes_used_(bytes_used) {} - CountingAllocator(int64_t* bytes_used, int64_t* instance_count) - : bytes_used_(bytes_used), instance_count_(instance_count) {} - - template - CountingAllocator(const CountingAllocator& x) - : bytes_used_(x.bytes_used_), instance_count_(x.instance_count_) {} - - pointer allocate( - size_type n, - typename AllocatorTraits::const_void_pointer hint = nullptr) { - Allocator allocator; - pointer ptr = AllocatorTraits::allocate(allocator, n, hint); - if (bytes_used_ != nullptr) { - *bytes_used_ += n * sizeof(T); - } - return ptr; - } - - void deallocate(pointer p, size_type n) { - Allocator allocator; - AllocatorTraits::deallocate(allocator, p, n); - if (bytes_used_ != nullptr) { - *bytes_used_ -= n * sizeof(T); - } - } - - template - void construct(U* p, Args&&... args) { - Allocator allocator; - AllocatorTraits::construct(allocator, p, std::forward(args)...); - if (instance_count_ != nullptr) { - *instance_count_ += 1; - } - } - - template - void destroy(U* p) { - Allocator allocator; - AllocatorTraits::destroy(allocator, p); - if (instance_count_ != nullptr) { - *instance_count_ -= 1; - } - } - - template - class rebind { - public: - using other = CountingAllocator; - }; - - friend bool operator==(const CountingAllocator& a, - const CountingAllocator& b) { - return a.bytes_used_ == b.bytes_used_ && - a.instance_count_ == b.instance_count_; - } - - friend bool operator!=(const CountingAllocator& a, - const CountingAllocator& b) { - return !(a == b); - } - - int64_t* bytes_used_ = nullptr; - int64_t* instance_count_ = nullptr; -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_COUNTING_ALLOCATOR_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_function_defaults.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_function_defaults.h deleted file mode 100644 index 0683422..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_function_defaults.h +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Define the default Hash and Eq functions for SwissTable containers. -// -// std::hash and std::equal_to are not appropriate hash and equal -// functions for SwissTable containers. There are two reasons for this. -// -// SwissTable containers are power of 2 sized containers: -// -// This means they use the lower bits of the hash value to find the slot for -// each entry. The typical hash function for integral types is the identity. -// This is a very weak hash function for SwissTable and any power of 2 sized -// hashtable implementation which will lead to excessive collisions. For -// SwissTable we use murmur3 style mixing to reduce collisions to a minimum. -// -// SwissTable containers support heterogeneous lookup: -// -// In order to make heterogeneous lookup work, hash and equal functions must be -// polymorphic. At the same time they have to satisfy the same requirements the -// C++ standard imposes on hash functions and equality operators. That is: -// -// if hash_default_eq(a, b) returns true for any a and b of type T, then -// hash_default_hash(a) must equal hash_default_hash(b) -// -// For SwissTable containers this requirement is relaxed to allow a and b of -// any and possibly different types. Note that like the standard the hash and -// equal functions are still bound to T. This is important because some type U -// can be hashed by/tested for equality differently depending on T. A notable -// example is `const char*`. `const char*` is treated as a c-style string when -// the hash function is hash but as a pointer when the hash -// function is hash. -// -#ifndef ABSL_CONTAINER_INTERNAL_HASH_FUNCTION_DEFAULTS_H_ -#define ABSL_CONTAINER_INTERNAL_HASH_FUNCTION_DEFAULTS_H_ - -#include -#include -#include -#include -#include - -#include "absl/base/config.h" -#include "absl/hash/hash.h" -#include "absl/strings/cord.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// The hash of an object of type T is computed by using absl::Hash. -template -struct HashEq { - using Hash = absl::Hash; - using Eq = std::equal_to; -}; - -struct StringHash { - using is_transparent = void; - - size_t operator()(absl::string_view v) const { - return absl::Hash{}(v); - } - size_t operator()(const absl::Cord& v) const { - return absl::Hash{}(v); - } -}; - -// Supports heterogeneous lookup for string-like elements. -struct StringHashEq { - using Hash = StringHash; - struct Eq { - using is_transparent = void; - bool operator()(absl::string_view lhs, absl::string_view rhs) const { - return lhs == rhs; - } - bool operator()(const absl::Cord& lhs, const absl::Cord& rhs) const { - return lhs == rhs; - } - bool operator()(const absl::Cord& lhs, absl::string_view rhs) const { - return lhs == rhs; - } - bool operator()(absl::string_view lhs, const absl::Cord& rhs) const { - return lhs == rhs; - } - }; -}; - -template <> -struct HashEq : StringHashEq {}; -template <> -struct HashEq : StringHashEq {}; -template <> -struct HashEq : StringHashEq {}; - -// Supports heterogeneous lookup for pointers and smart pointers. -template -struct HashEq { - struct Hash { - using is_transparent = void; - template - size_t operator()(const U& ptr) const { - return absl::Hash{}(HashEq::ToPtr(ptr)); - } - }; - struct Eq { - using is_transparent = void; - template - bool operator()(const A& a, const B& b) const { - return HashEq::ToPtr(a) == HashEq::ToPtr(b); - } - }; - - private: - static const T* ToPtr(const T* ptr) { return ptr; } - template - static const T* ToPtr(const std::unique_ptr& ptr) { - return ptr.get(); - } - template - static const T* ToPtr(const std::shared_ptr& ptr) { - return ptr.get(); - } -}; - -template -struct HashEq> : HashEq {}; -template -struct HashEq> : HashEq {}; - -// This header's visibility is restricted. If you need to access the default -// hasher please use the container's ::hasher alias instead. -// -// Example: typename Hash = typename absl::flat_hash_map::hasher -template -using hash_default_hash = typename container_internal::HashEq::Hash; - -// This header's visibility is restricted. If you need to access the default -// key equal please use the container's ::key_equal alias instead. -// -// Example: typename Eq = typename absl::flat_hash_map::key_equal -template -using hash_default_eq = typename container_internal::HashEq::Eq; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_HASH_FUNCTION_DEFAULTS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_generator_testing.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_generator_testing.h deleted file mode 100644 index 6869fe4..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_generator_testing.h +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Generates random values for testing. Specialized only for the few types we -// care about. - -#ifndef ABSL_CONTAINER_INTERNAL_HASH_GENERATOR_TESTING_H_ -#define ABSL_CONTAINER_INTERNAL_HASH_GENERATOR_TESTING_H_ - -#include - -#include -#include -#include -#include -#include -#include - -#include "absl/container/internal/hash_policy_testing.h" -#include "absl/memory/memory.h" -#include "absl/meta/type_traits.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { -namespace hash_internal { -namespace generator_internal { - -template -struct IsMap : std::false_type {}; - -template -struct IsMap> : std::true_type {}; - -} // namespace generator_internal - -std::mt19937_64* GetSharedRng(); - -enum Enum { - kEnumEmpty, - kEnumDeleted, -}; - -enum class EnumClass : uint64_t { - kEmpty, - kDeleted, -}; - -inline std::ostream& operator<<(std::ostream& o, const EnumClass& ec) { - return o << static_cast(ec); -} - -template -struct Generator; - -template -struct Generator::value>::type> { - T operator()() const { - std::uniform_int_distribution dist; - return dist(*GetSharedRng()); - } -}; - -template <> -struct Generator { - Enum operator()() const { - std::uniform_int_distribution::type> - dist; - while (true) { - auto variate = dist(*GetSharedRng()); - if (variate != kEnumEmpty && variate != kEnumDeleted) - return static_cast(variate); - } - } -}; - -template <> -struct Generator { - EnumClass operator()() const { - std::uniform_int_distribution< - typename std::underlying_type::type> - dist; - while (true) { - EnumClass variate = static_cast(dist(*GetSharedRng())); - if (variate != EnumClass::kEmpty && variate != EnumClass::kDeleted) - return static_cast(variate); - } - } -}; - -template <> -struct Generator { - std::string operator()() const; -}; - -template <> -struct Generator { - absl::string_view operator()() const; -}; - -template <> -struct Generator { - NonStandardLayout operator()() const { - return NonStandardLayout(Generator()()); - } -}; - -template -struct Generator> { - std::pair operator()() const { - return std::pair(Generator::type>()(), - Generator::type>()()); - } -}; - -template -struct Generator> { - std::tuple operator()() const { - return std::tuple(Generator::type>()()...); - } -}; - -template -struct Generator> { - std::unique_ptr operator()() const { - return absl::make_unique(Generator()()); - } -}; - -template -struct Generator().key()), - decltype(std::declval().value())>> - : Generator().key())>::type, - typename std::decay().value())>::type>> {}; - -template -using GeneratedType = decltype( - std::declval::value, - typename Container::value_type, - typename Container::key_type>::type>&>()()); - -} // namespace hash_internal -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_HASH_GENERATOR_TESTING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_policy_testing.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_policy_testing.h deleted file mode 100644 index 01c40d2..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_policy_testing.h +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Utilities to help tests verify that hash tables properly handle stateful -// allocators and hash functions. - -#ifndef ABSL_CONTAINER_INTERNAL_HASH_POLICY_TESTING_H_ -#define ABSL_CONTAINER_INTERNAL_HASH_POLICY_TESTING_H_ - -#include -#include -#include -#include -#include -#include -#include - -#include "absl/hash/hash.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { -namespace hash_testing_internal { - -template -struct WithId { - WithId() : id_(next_id()) {} - WithId(const WithId& that) : id_(that.id_) {} - WithId(WithId&& that) : id_(that.id_) { that.id_ = 0; } - WithId& operator=(const WithId& that) { - id_ = that.id_; - return *this; - } - WithId& operator=(WithId&& that) { - id_ = that.id_; - that.id_ = 0; - return *this; - } - - size_t id() const { return id_; } - - friend bool operator==(const WithId& a, const WithId& b) { - return a.id_ == b.id_; - } - friend bool operator!=(const WithId& a, const WithId& b) { return !(a == b); } - - protected: - explicit WithId(size_t id) : id_(id) {} - - private: - size_t id_; - - template - static size_t next_id() { - // 0 is reserved for moved from state. - static size_t gId = 1; - return gId++; - } -}; - -} // namespace hash_testing_internal - -struct NonStandardLayout { - NonStandardLayout() {} - explicit NonStandardLayout(std::string s) : value(std::move(s)) {} - virtual ~NonStandardLayout() {} - - friend bool operator==(const NonStandardLayout& a, - const NonStandardLayout& b) { - return a.value == b.value; - } - friend bool operator!=(const NonStandardLayout& a, - const NonStandardLayout& b) { - return a.value != b.value; - } - - template - friend H AbslHashValue(H h, const NonStandardLayout& v) { - return H::combine(std::move(h), v.value); - } - - std::string value; -}; - -struct StatefulTestingHash - : absl::container_internal::hash_testing_internal::WithId< - StatefulTestingHash> { - template - size_t operator()(const T& t) const { - return absl::Hash{}(t); - } -}; - -struct StatefulTestingEqual - : absl::container_internal::hash_testing_internal::WithId< - StatefulTestingEqual> { - template - bool operator()(const T& t, const U& u) const { - return t == u; - } -}; - -// It is expected that Alloc() == Alloc() for all allocators so we cannot use -// WithId base. We need to explicitly assign ids. -template -struct Alloc : std::allocator { - using propagate_on_container_swap = std::true_type; - - // Using old paradigm for this to ensure compatibility. - explicit Alloc(size_t id = 0) : id_(id) {} - - Alloc(const Alloc&) = default; - Alloc& operator=(const Alloc&) = default; - - template - Alloc(const Alloc& that) : std::allocator(that), id_(that.id()) {} - - template - struct rebind { - using other = Alloc; - }; - - size_t id() const { return id_; } - - friend bool operator==(const Alloc& a, const Alloc& b) { - return a.id_ == b.id_; - } - friend bool operator!=(const Alloc& a, const Alloc& b) { return !(a == b); } - - private: - size_t id_ = (std::numeric_limits::max)(); -}; - -template -auto items(const Map& m) -> std::vector< - std::pair> { - using std::get; - std::vector> res; - res.reserve(m.size()); - for (const auto& v : m) res.emplace_back(get<0>(v), get<1>(v)); - return res; -} - -template -auto keys(const Set& s) - -> std::vector::type> { - std::vector::type> res; - res.reserve(s.size()); - for (const auto& v : s) res.emplace_back(v); - return res; -} - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -// ABSL_UNORDERED_SUPPORTS_ALLOC_CTORS is false for glibcxx versions -// where the unordered containers are missing certain constructors that -// take allocator arguments. This test is defined ad-hoc for the platforms -// we care about (notably Crosstool 17) because libstdcxx's useless -// versioning scheme precludes a more principled solution. -// From GCC-4.9 Changelog: (src: https://gcc.gnu.org/gcc-4.9/changes.html) -// "the unordered associative containers in and -// meet the allocator-aware container requirements;" -#if (defined(__GLIBCXX__) && __GLIBCXX__ <= 20140425 ) || \ -( __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9 )) -#define ABSL_UNORDERED_SUPPORTS_ALLOC_CTORS 0 -#else -#define ABSL_UNORDERED_SUPPORTS_ALLOC_CTORS 1 -#endif - -#endif // ABSL_CONTAINER_INTERNAL_HASH_POLICY_TESTING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_policy_traits.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_policy_traits.h deleted file mode 100644 index 46c97b1..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hash_policy_traits.h +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_HASH_POLICY_TRAITS_H_ -#define ABSL_CONTAINER_INTERNAL_HASH_POLICY_TRAITS_H_ - -#include -#include -#include -#include -#include - -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// Defines how slots are initialized/destroyed/moved. -template -struct hash_policy_traits { - // The type of the keys stored in the hashtable. - using key_type = typename Policy::key_type; - - private: - struct ReturnKey { - // When C++17 is available, we can use std::launder to provide mutable - // access to the key for use in node handle. -#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606 - template ::value, int> = 0> - static key_type& Impl(Key&& k, int) { - return *std::launder( - const_cast(std::addressof(std::forward(k)))); - } -#endif - - template - static Key Impl(Key&& k, char) { - return std::forward(k); - } - - // When Key=T&, we forward the lvalue reference. - // When Key=T, we return by value to avoid a dangling reference. - // eg, for string_hash_map. - template - auto operator()(Key&& k, const Args&...) const - -> decltype(Impl(std::forward(k), 0)) { - return Impl(std::forward(k), 0); - } - }; - - template - struct ConstantIteratorsImpl : std::false_type {}; - - template - struct ConstantIteratorsImpl> - : P::constant_iterators {}; - - public: - // The actual object stored in the hash table. - using slot_type = typename Policy::slot_type; - - // The argument type for insertions into the hashtable. This is different - // from value_type for increased performance. See initializer_list constructor - // and insert() member functions for more details. - using init_type = typename Policy::init_type; - - using reference = decltype(Policy::element(std::declval())); - using pointer = typename std::remove_reference::type*; - using value_type = typename std::remove_reference::type; - - // Policies can set this variable to tell raw_hash_set that all iterators - // should be constant, even `iterator`. This is useful for set-like - // containers. - // Defaults to false if not provided by the policy. - using constant_iterators = ConstantIteratorsImpl<>; - - // PRECONDITION: `slot` is UNINITIALIZED - // POSTCONDITION: `slot` is INITIALIZED - template - static void construct(Alloc* alloc, slot_type* slot, Args&&... args) { - Policy::construct(alloc, slot, std::forward(args)...); - } - - // PRECONDITION: `slot` is INITIALIZED - // POSTCONDITION: `slot` is UNINITIALIZED - template - static void destroy(Alloc* alloc, slot_type* slot) { - Policy::destroy(alloc, slot); - } - - // Transfers the `old_slot` to `new_slot`. Any memory allocated by the - // allocator inside `old_slot` to `new_slot` can be transferred. - // - // OPTIONAL: defaults to: - // - // clone(new_slot, std::move(*old_slot)); - // destroy(old_slot); - // - // PRECONDITION: `new_slot` is UNINITIALIZED and `old_slot` is INITIALIZED - // POSTCONDITION: `new_slot` is INITIALIZED and `old_slot` is - // UNINITIALIZED - template - static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) { - transfer_impl(alloc, new_slot, old_slot, 0); - } - - // PRECONDITION: `slot` is INITIALIZED - // POSTCONDITION: `slot` is INITIALIZED - template - static auto element(slot_type* slot) -> decltype(P::element(slot)) { - return P::element(slot); - } - - // Returns the amount of memory owned by `slot`, exclusive of `sizeof(*slot)`. - // - // If `slot` is nullptr, returns the constant amount of memory owned by any - // full slot or -1 if slots own variable amounts of memory. - // - // PRECONDITION: `slot` is INITIALIZED or nullptr - template - static size_t space_used(const slot_type* slot) { - return P::space_used(slot); - } - - // Provides generalized access to the key for elements, both for elements in - // the table and for elements that have not yet been inserted (or even - // constructed). We would like an API that allows us to say: `key(args...)` - // but we cannot do that for all cases, so we use this more general API that - // can be used for many things, including the following: - // - // - Given an element in a table, get its key. - // - Given an element initializer, get its key. - // - Given `emplace()` arguments, get the element key. - // - // Implementations of this must adhere to a very strict technical - // specification around aliasing and consuming arguments: - // - // Let `value_type` be the result type of `element()` without ref- and - // cv-qualifiers. The first argument is a functor, the rest are constructor - // arguments for `value_type`. Returns `std::forward(f)(k, xs...)`, where - // `k` is the element key, and `xs...` are the new constructor arguments for - // `value_type`. It's allowed for `k` to alias `xs...`, and for both to alias - // `ts...`. The key won't be touched once `xs...` are used to construct an - // element; `ts...` won't be touched at all, which allows `apply()` to consume - // any rvalues among them. - // - // If `value_type` is constructible from `Ts&&...`, `Policy::apply()` must not - // trigger a hard compile error unless it originates from `f`. In other words, - // `Policy::apply()` must be SFINAE-friendly. If `value_type` is not - // constructible from `Ts&&...`, either SFINAE or a hard compile error is OK. - // - // If `Ts...` is `[cv] value_type[&]` or `[cv] init_type[&]`, - // `Policy::apply()` must work. A compile error is not allowed, SFINAE or not. - template - static auto apply(F&& f, Ts&&... ts) - -> decltype(P::apply(std::forward(f), std::forward(ts)...)) { - return P::apply(std::forward(f), std::forward(ts)...); - } - - // Returns the "key" portion of the slot. - // Used for node handle manipulation. - template - static auto mutable_key(slot_type* slot) - -> decltype(P::apply(ReturnKey(), element(slot))) { - return P::apply(ReturnKey(), element(slot)); - } - - // Returns the "value" (as opposed to the "key") portion of the element. Used - // by maps to implement `operator[]`, `at()` and `insert_or_assign()`. - template - static auto value(T* elem) -> decltype(P::value(elem)) { - return P::value(elem); - } - - private: - // Use auto -> decltype as an enabler. - template - static auto transfer_impl(Alloc* alloc, slot_type* new_slot, - slot_type* old_slot, int) - -> decltype((void)P::transfer(alloc, new_slot, old_slot)) { - P::transfer(alloc, new_slot, old_slot); - } - template - static void transfer_impl(Alloc* alloc, slot_type* new_slot, - slot_type* old_slot, char) { - construct(alloc, new_slot, std::move(element(old_slot))); - destroy(alloc, old_slot); - } -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_HASH_POLICY_TRAITS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtable_debug.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtable_debug.h deleted file mode 100644 index 19d5212..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtable_debug.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This library provides APIs to debug the probing behavior of hash tables. -// -// In general, the probing behavior is a black box for users and only the -// side effects can be measured in the form of performance differences. -// These APIs give a glimpse on the actual behavior of the probing algorithms in -// these hashtables given a specified hash function and a set of elements. -// -// The probe count distribution can be used to assess the quality of the hash -// function for that particular hash table. Note that a hash function that -// performs well in one hash table implementation does not necessarily performs -// well in a different one. -// -// This library supports std::unordered_{set,map}, dense_hash_{set,map} and -// absl::{flat,node,string}_hash_{set,map}. - -#ifndef ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_H_ -#define ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_H_ - -#include -#include -#include -#include - -#include "absl/container/internal/hashtable_debug_hooks.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// Returns the number of probes required to lookup `key`. Returns 0 for a -// search with no collisions. Higher values mean more hash collisions occurred; -// however, the exact meaning of this number varies according to the container -// type. -template -size_t GetHashtableDebugNumProbes( - const C& c, const typename C::key_type& key) { - return absl::container_internal::hashtable_debug_internal:: - HashtableDebugAccess::GetNumProbes(c, key); -} - -// Gets a histogram of the number of probes for each elements in the container. -// The sum of all the values in the vector is equal to container.size(). -template -std::vector GetHashtableDebugNumProbesHistogram(const C& container) { - std::vector v; - for (auto it = container.begin(); it != container.end(); ++it) { - size_t num_probes = GetHashtableDebugNumProbes( - container, - absl::container_internal::hashtable_debug_internal::GetKey(*it, 0)); - v.resize((std::max)(v.size(), num_probes + 1)); - v[num_probes]++; - } - return v; -} - -struct HashtableDebugProbeSummary { - size_t total_elements; - size_t total_num_probes; - double mean; -}; - -// Gets a summary of the probe count distribution for the elements in the -// container. -template -HashtableDebugProbeSummary GetHashtableDebugProbeSummary(const C& container) { - auto probes = GetHashtableDebugNumProbesHistogram(container); - HashtableDebugProbeSummary summary = {}; - for (size_t i = 0; i < probes.size(); ++i) { - summary.total_elements += probes[i]; - summary.total_num_probes += probes[i] * i; - } - summary.mean = 1.0 * summary.total_num_probes / summary.total_elements; - return summary; -} - -// Returns the number of bytes requested from the allocator by the container -// and not freed. -template -size_t AllocatedByteSize(const C& c) { - return absl::container_internal::hashtable_debug_internal:: - HashtableDebugAccess::AllocatedByteSize(c); -} - -// Returns a tight lower bound for AllocatedByteSize(c) where `c` is of type `C` -// and `c.size()` is equal to `num_elements`. -template -size_t LowerBoundAllocatedByteSize(size_t num_elements) { - return absl::container_internal::hashtable_debug_internal:: - HashtableDebugAccess::LowerBoundAllocatedByteSize(num_elements); -} - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtable_debug_hooks.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtable_debug_hooks.h deleted file mode 100644 index 3e9ea59..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtable_debug_hooks.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Provides the internal API for hashtable_debug.h. - -#ifndef ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_HOOKS_H_ -#define ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_HOOKS_H_ - -#include - -#include -#include -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { -namespace hashtable_debug_internal { - -// If it is a map, call get<0>(). -using std::get; -template -auto GetKey(const typename T::value_type& pair, int) -> decltype(get<0>(pair)) { - return get<0>(pair); -} - -// If it is not a map, return the value directly. -template -const typename T::key_type& GetKey(const typename T::key_type& key, char) { - return key; -} - -// Containers should specialize this to provide debug information for that -// container. -template -struct HashtableDebugAccess { - // Returns the number of probes required to find `key` in `c`. The "number of - // probes" is a concept that can vary by container. Implementations should - // return 0 when `key` was found in the minimum number of operations and - // should increment the result for each non-trivial operation required to find - // `key`. - // - // The default implementation uses the bucket api from the standard and thus - // works for `std::unordered_*` containers. - static size_t GetNumProbes(const Container& c, - const typename Container::key_type& key) { - if (!c.bucket_count()) return {}; - size_t num_probes = 0; - size_t bucket = c.bucket(key); - for (auto it = c.begin(bucket), e = c.end(bucket);; ++it, ++num_probes) { - if (it == e) return num_probes; - if (c.key_eq()(key, GetKey(*it, 0))) return num_probes; - } - } - - // Returns the number of bytes requested from the allocator by the container - // and not freed. - // - // static size_t AllocatedByteSize(const Container& c); - - // Returns a tight lower bound for AllocatedByteSize(c) where `c` is of type - // `Container` and `c.size()` is equal to `num_elements`. - // - // static size_t LowerBoundAllocatedByteSize(size_t num_elements); -}; - -} // namespace hashtable_debug_internal -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_HASHTABLE_DEBUG_HOOKS_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtablez_sampler.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtablez_sampler.h deleted file mode 100644 index 85685f7..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/hashtablez_sampler.h +++ /dev/null @@ -1,322 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: hashtablez_sampler.h -// ----------------------------------------------------------------------------- -// -// This header file defines the API for a low level library to sample hashtables -// and collect runtime statistics about them. -// -// `HashtablezSampler` controls the lifecycle of `HashtablezInfo` objects which -// store information about a single sample. -// -// `Record*` methods store information into samples. -// `Sample()` and `Unsample()` make use of a single global sampler with -// properties controlled by the flags hashtablez_enabled, -// hashtablez_sample_rate, and hashtablez_max_samples. -// -// WARNING -// -// Using this sampling API may cause sampled Swiss tables to use the global -// allocator (operator `new`) in addition to any custom allocator. If you -// are using a table in an unusual circumstance where allocation or calling a -// linux syscall is unacceptable, this could interfere. -// -// This utility is internal-only. Use at your own risk. - -#ifndef ABSL_CONTAINER_INTERNAL_HASHTABLEZ_SAMPLER_H_ -#define ABSL_CONTAINER_INTERNAL_HASHTABLEZ_SAMPLER_H_ - -#include -#include -#include -#include - -#include "absl/base/internal/per_thread_tls.h" -#include "absl/base/optimization.h" -#include "absl/container/internal/have_sse.h" -#include "absl/synchronization/mutex.h" -#include "absl/utility/utility.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// Stores information about a sampled hashtable. All mutations to this *must* -// be made through `Record*` functions below. All reads from this *must* only -// occur in the callback to `HashtablezSampler::Iterate`. -struct HashtablezInfo { - // Constructs the object but does not fill in any fields. - HashtablezInfo(); - ~HashtablezInfo(); - HashtablezInfo(const HashtablezInfo&) = delete; - HashtablezInfo& operator=(const HashtablezInfo&) = delete; - - // Puts the object into a clean state, fills in the logically `const` members, - // blocking for any readers that are currently sampling the object. - void PrepareForSampling() ABSL_EXCLUSIVE_LOCKS_REQUIRED(init_mu); - - // These fields are mutated by the various Record* APIs and need to be - // thread-safe. - std::atomic capacity; - std::atomic size; - std::atomic num_erases; - std::atomic num_rehashes; - std::atomic max_probe_length; - std::atomic total_probe_length; - std::atomic hashes_bitwise_or; - std::atomic hashes_bitwise_and; - std::atomic hashes_bitwise_xor; - - // `HashtablezSampler` maintains intrusive linked lists for all samples. See - // comments on `HashtablezSampler::all_` for details on these. `init_mu` - // guards the ability to restore the sample to a pristine state. This - // prevents races with sampling and resurrecting an object. - absl::Mutex init_mu; - HashtablezInfo* next; - HashtablezInfo* dead ABSL_GUARDED_BY(init_mu); - - // All of the fields below are set by `PrepareForSampling`, they must not be - // mutated in `Record*` functions. They are logically `const` in that sense. - // These are guarded by init_mu, but that is not externalized to clients, who - // can only read them during `HashtablezSampler::Iterate` which will hold the - // lock. - static constexpr int kMaxStackDepth = 64; - absl::Time create_time; - int32_t depth; - void* stack[kMaxStackDepth]; -}; - -inline void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length) { -#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 - total_probe_length /= 16; -#else - total_probe_length /= 8; -#endif - info->total_probe_length.store(total_probe_length, std::memory_order_relaxed); - info->num_erases.store(0, std::memory_order_relaxed); - // There is only one concurrent writer, so `load` then `store` is sufficient - // instead of using `fetch_add`. - info->num_rehashes.store( - 1 + info->num_rehashes.load(std::memory_order_relaxed), - std::memory_order_relaxed); -} - -inline void RecordStorageChangedSlow(HashtablezInfo* info, size_t size, - size_t capacity) { - info->size.store(size, std::memory_order_relaxed); - info->capacity.store(capacity, std::memory_order_relaxed); - if (size == 0) { - // This is a clear, reset the total/num_erases too. - info->total_probe_length.store(0, std::memory_order_relaxed); - info->num_erases.store(0, std::memory_order_relaxed); - } -} - -void RecordInsertSlow(HashtablezInfo* info, size_t hash, - size_t distance_from_desired); - -inline void RecordEraseSlow(HashtablezInfo* info) { - info->size.fetch_sub(1, std::memory_order_relaxed); - // There is only one concurrent writer, so `load` then `store` is sufficient - // instead of using `fetch_add`. - info->num_erases.store( - 1 + info->num_erases.load(std::memory_order_relaxed), - std::memory_order_relaxed); -} - -HashtablezInfo* SampleSlow(int64_t* next_sample); -void UnsampleSlow(HashtablezInfo* info); - -#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) -#error ABSL_INTERNAL_HASHTABLEZ_SAMPLE cannot be directly set -#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) - -#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) -class HashtablezInfoHandle { - public: - explicit HashtablezInfoHandle() : info_(nullptr) {} - explicit HashtablezInfoHandle(HashtablezInfo* info) : info_(info) {} - ~HashtablezInfoHandle() { - if (ABSL_PREDICT_TRUE(info_ == nullptr)) return; - UnsampleSlow(info_); - } - - HashtablezInfoHandle(const HashtablezInfoHandle&) = delete; - HashtablezInfoHandle& operator=(const HashtablezInfoHandle&) = delete; - - HashtablezInfoHandle(HashtablezInfoHandle&& o) noexcept - : info_(absl::exchange(o.info_, nullptr)) {} - HashtablezInfoHandle& operator=(HashtablezInfoHandle&& o) noexcept { - if (ABSL_PREDICT_FALSE(info_ != nullptr)) { - UnsampleSlow(info_); - } - info_ = absl::exchange(o.info_, nullptr); - return *this; - } - - inline void RecordStorageChanged(size_t size, size_t capacity) { - if (ABSL_PREDICT_TRUE(info_ == nullptr)) return; - RecordStorageChangedSlow(info_, size, capacity); - } - - inline void RecordRehash(size_t total_probe_length) { - if (ABSL_PREDICT_TRUE(info_ == nullptr)) return; - RecordRehashSlow(info_, total_probe_length); - } - - inline void RecordInsert(size_t hash, size_t distance_from_desired) { - if (ABSL_PREDICT_TRUE(info_ == nullptr)) return; - RecordInsertSlow(info_, hash, distance_from_desired); - } - - inline void RecordErase() { - if (ABSL_PREDICT_TRUE(info_ == nullptr)) return; - RecordEraseSlow(info_); - } - - friend inline void swap(HashtablezInfoHandle& lhs, - HashtablezInfoHandle& rhs) { - std::swap(lhs.info_, rhs.info_); - } - - private: - friend class HashtablezInfoHandlePeer; - HashtablezInfo* info_; -}; -#else -// Ensure that when Hashtablez is turned off at compile time, HashtablezInfo can -// be removed by the linker, in order to reduce the binary size. -class HashtablezInfoHandle { - public: - explicit HashtablezInfoHandle() = default; - explicit HashtablezInfoHandle(std::nullptr_t) {} - - inline void RecordStorageChanged(size_t /*size*/, size_t /*capacity*/) {} - inline void RecordRehash(size_t /*total_probe_length*/) {} - inline void RecordInsert(size_t /*hash*/, size_t /*distance_from_desired*/) {} - inline void RecordErase() {} - - friend inline void swap(HashtablezInfoHandle& /*lhs*/, - HashtablezInfoHandle& /*rhs*/) {} -}; -#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) - -#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) -extern ABSL_PER_THREAD_TLS_KEYWORD int64_t global_next_sample; -#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) - -// Returns an RAII sampling handle that manages registration and unregistation -// with the global sampler. -inline HashtablezInfoHandle Sample() { -#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) - if (ABSL_PREDICT_TRUE(--global_next_sample > 0)) { - return HashtablezInfoHandle(nullptr); - } - return HashtablezInfoHandle(SampleSlow(&global_next_sample)); -#else - return HashtablezInfoHandle(nullptr); -#endif // !ABSL_PER_THREAD_TLS -} - -// Holds samples and their associated stack traces with a soft limit of -// `SetHashtablezMaxSamples()`. -// -// Thread safe. -class HashtablezSampler { - public: - // Returns a global Sampler. - static HashtablezSampler& Global(); - - HashtablezSampler(); - ~HashtablezSampler(); - - // Registers for sampling. Returns an opaque registration info. - HashtablezInfo* Register(); - - // Unregisters the sample. - void Unregister(HashtablezInfo* sample); - - // The dispose callback will be called on all samples the moment they are - // being unregistered. Only affects samples that are unregistered after the - // callback has been set. - // Returns the previous callback. - using DisposeCallback = void (*)(const HashtablezInfo&); - DisposeCallback SetDisposeCallback(DisposeCallback f); - - // Iterates over all the registered `StackInfo`s. Returning the number of - // samples that have been dropped. - int64_t Iterate(const std::function& f); - - private: - void PushNew(HashtablezInfo* sample); - void PushDead(HashtablezInfo* sample); - HashtablezInfo* PopDead(); - - std::atomic dropped_samples_; - std::atomic size_estimate_; - - // Intrusive lock free linked lists for tracking samples. - // - // `all_` records all samples (they are never removed from this list) and is - // terminated with a `nullptr`. - // - // `graveyard_.dead` is a circular linked list. When it is empty, - // `graveyard_.dead == &graveyard`. The list is circular so that - // every item on it (even the last) has a non-null dead pointer. This allows - // `Iterate` to determine if a given sample is live or dead using only - // information on the sample itself. - // - // For example, nodes [A, B, C, D, E] with [A, C, E] alive and [B, D] dead - // looks like this (G is the Graveyard): - // - // +---+ +---+ +---+ +---+ +---+ - // all -->| A |--->| B |--->| C |--->| D |--->| E | - // | | | | | | | | | | - // +---+ | | +->| |-+ | | +->| |-+ | | - // | G | +---+ | +---+ | +---+ | +---+ | +---+ - // | | | | | | - // | | --------+ +--------+ | - // +---+ | - // ^ | - // +--------------------------------------+ - // - std::atomic all_; - HashtablezInfo graveyard_; - - std::atomic dispose_; -}; - -// Enables or disables sampling for Swiss tables. -void SetHashtablezEnabled(bool enabled); - -// Sets the rate at which Swiss tables will be sampled. -void SetHashtablezSampleParameter(int32_t rate); - -// Sets a soft max for the number of samples that will be kept. -void SetHashtablezMaxSamples(int32_t max); - -// Configuration override. -// This allows process-wide sampling without depending on order of -// initialization of static storage duration objects. -// The definition of this constant is weak, which allows us to inject a -// different value for it at link time. -extern "C" bool ABSL_INTERNAL_C_SYMBOL(AbslContainerInternalSampleEverything)(); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_HASHTABLEZ_SAMPLER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/have_sse.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/have_sse.h deleted file mode 100644 index e75e1a1..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/have_sse.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Shared config probing for SSE instructions used in Swiss tables. -#ifndef ABSL_CONTAINER_INTERNAL_HAVE_SSE_H_ -#define ABSL_CONTAINER_INTERNAL_HAVE_SSE_H_ - -#ifndef ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 -#if defined(__SSE2__) || \ - (defined(_MSC_VER) && \ - (defined(_M_X64) || (defined(_M_IX86) && _M_IX86_FP >= 2))) -#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 1 -#else -#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 0 -#endif -#endif - -#ifndef ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 -#ifdef __SSSE3__ -#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 1 -#else -#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 0 -#endif -#endif - -#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 && \ - !ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 -#error "Bad configuration!" -#endif - -#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 -#include -#endif - -#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 -#include -#endif - -#endif // ABSL_CONTAINER_INTERNAL_HAVE_SSE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/inlined_vector.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/inlined_vector.h deleted file mode 100644 index b8aec45..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/inlined_vector.h +++ /dev/null @@ -1,967 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_INLINED_VECTOR_INTERNAL_H_ -#define ABSL_CONTAINER_INTERNAL_INLINED_VECTOR_INTERNAL_H_ - -#include -#include -#include -#include -#include -#include -#include - -#include "absl/base/macros.h" -#include "absl/container/internal/compressed_tuple.h" -#include "absl/memory/memory.h" -#include "absl/meta/type_traits.h" -#include "absl/types/span.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace inlined_vector_internal { - -// GCC does not deal very well with the below code -#if !defined(__clang__) && defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" -#endif - -template -using IsAtLeastForwardIterator = std::is_convertible< - typename std::iterator_traits::iterator_category, - std::forward_iterator_tag>; - -template ::value_type> -using IsMemcpyOk = - absl::conjunction>, - absl::is_trivially_copy_constructible, - absl::is_trivially_copy_assignable, - absl::is_trivially_destructible>; - -template -void DestroyElements(AllocatorType* alloc_ptr, Pointer destroy_first, - SizeType destroy_size) { - using AllocatorTraits = absl::allocator_traits; - - if (destroy_first != nullptr) { - for (auto i = destroy_size; i != 0;) { - --i; - AllocatorTraits::destroy(*alloc_ptr, destroy_first + i); - } - -#if !defined(NDEBUG) - { - using ValueType = typename AllocatorTraits::value_type; - - // Overwrite unused memory with `0xab` so we can catch uninitialized - // usage. - // - // Cast to `void*` to tell the compiler that we don't care that we might - // be scribbling on a vtable pointer. - void* memory_ptr = destroy_first; - auto memory_size = destroy_size * sizeof(ValueType); - std::memset(memory_ptr, 0xab, memory_size); - } -#endif // !defined(NDEBUG) - } -} - -// If kUseMemcpy is true, memcpy(dst, src, n); else do nothing. -// Useful to avoid compiler warnings when memcpy() is used for T values -// that are not trivially copyable in non-reachable code. -template -inline void MemcpyIfAllowed(void* dst, const void* src, size_t n); - -// memcpy when allowed. -template <> -inline void MemcpyIfAllowed(void* dst, const void* src, size_t n) { - memcpy(dst, src, n); -} - -// Do nothing for types that are not memcpy-able. This function is only -// called from non-reachable branches. -template <> -inline void MemcpyIfAllowed(void*, const void*, size_t) {} - -template -void ConstructElements(AllocatorType* alloc_ptr, Pointer construct_first, - ValueAdapter* values_ptr, SizeType construct_size) { - for (SizeType i = 0; i < construct_size; ++i) { - ABSL_INTERNAL_TRY { - values_ptr->ConstructNext(alloc_ptr, construct_first + i); - } - ABSL_INTERNAL_CATCH_ANY { - inlined_vector_internal::DestroyElements(alloc_ptr, construct_first, i); - ABSL_INTERNAL_RETHROW; - } - } -} - -template -void AssignElements(Pointer assign_first, ValueAdapter* values_ptr, - SizeType assign_size) { - for (SizeType i = 0; i < assign_size; ++i) { - values_ptr->AssignNext(assign_first + i); - } -} - -template -struct StorageView { - using AllocatorTraits = absl::allocator_traits; - using Pointer = typename AllocatorTraits::pointer; - using SizeType = typename AllocatorTraits::size_type; - - Pointer data; - SizeType size; - SizeType capacity; -}; - -template -class IteratorValueAdapter { - using AllocatorTraits = absl::allocator_traits; - using Pointer = typename AllocatorTraits::pointer; - - public: - explicit IteratorValueAdapter(const Iterator& it) : it_(it) {} - - void ConstructNext(AllocatorType* alloc_ptr, Pointer construct_at) { - AllocatorTraits::construct(*alloc_ptr, construct_at, *it_); - ++it_; - } - - void AssignNext(Pointer assign_at) { - *assign_at = *it_; - ++it_; - } - - private: - Iterator it_; -}; - -template -class CopyValueAdapter { - using AllocatorTraits = absl::allocator_traits; - using ValueType = typename AllocatorTraits::value_type; - using Pointer = typename AllocatorTraits::pointer; - using ConstPointer = typename AllocatorTraits::const_pointer; - - public: - explicit CopyValueAdapter(const ValueType& v) : ptr_(std::addressof(v)) {} - - void ConstructNext(AllocatorType* alloc_ptr, Pointer construct_at) { - AllocatorTraits::construct(*alloc_ptr, construct_at, *ptr_); - } - - void AssignNext(Pointer assign_at) { *assign_at = *ptr_; } - - private: - ConstPointer ptr_; -}; - -template -class DefaultValueAdapter { - using AllocatorTraits = absl::allocator_traits; - using ValueType = typename AllocatorTraits::value_type; - using Pointer = typename AllocatorTraits::pointer; - - public: - explicit DefaultValueAdapter() {} - - void ConstructNext(AllocatorType* alloc_ptr, Pointer construct_at) { - AllocatorTraits::construct(*alloc_ptr, construct_at); - } - - void AssignNext(Pointer assign_at) { *assign_at = ValueType(); } -}; - -template -class AllocationTransaction { - using AllocatorTraits = absl::allocator_traits; - using Pointer = typename AllocatorTraits::pointer; - using SizeType = typename AllocatorTraits::size_type; - - public: - explicit AllocationTransaction(AllocatorType* alloc_ptr) - : alloc_data_(*alloc_ptr, nullptr) {} - - ~AllocationTransaction() { - if (DidAllocate()) { - AllocatorTraits::deallocate(GetAllocator(), GetData(), GetCapacity()); - } - } - - AllocationTransaction(const AllocationTransaction&) = delete; - void operator=(const AllocationTransaction&) = delete; - - AllocatorType& GetAllocator() { return alloc_data_.template get<0>(); } - Pointer& GetData() { return alloc_data_.template get<1>(); } - SizeType& GetCapacity() { return capacity_; } - - bool DidAllocate() { return GetData() != nullptr; } - Pointer Allocate(SizeType capacity) { - GetData() = AllocatorTraits::allocate(GetAllocator(), capacity); - GetCapacity() = capacity; - return GetData(); - } - - void Reset() { - GetData() = nullptr; - GetCapacity() = 0; - } - - private: - container_internal::CompressedTuple alloc_data_; - SizeType capacity_ = 0; -}; - -template -class ConstructionTransaction { - using AllocatorTraits = absl::allocator_traits; - using Pointer = typename AllocatorTraits::pointer; - using SizeType = typename AllocatorTraits::size_type; - - public: - explicit ConstructionTransaction(AllocatorType* alloc_ptr) - : alloc_data_(*alloc_ptr, nullptr) {} - - ~ConstructionTransaction() { - if (DidConstruct()) { - inlined_vector_internal::DestroyElements(std::addressof(GetAllocator()), - GetData(), GetSize()); - } - } - - ConstructionTransaction(const ConstructionTransaction&) = delete; - void operator=(const ConstructionTransaction&) = delete; - - AllocatorType& GetAllocator() { return alloc_data_.template get<0>(); } - Pointer& GetData() { return alloc_data_.template get<1>(); } - SizeType& GetSize() { return size_; } - - bool DidConstruct() { return GetData() != nullptr; } - template - void Construct(Pointer data, ValueAdapter* values_ptr, SizeType size) { - inlined_vector_internal::ConstructElements(std::addressof(GetAllocator()), - data, values_ptr, size); - GetData() = data; - GetSize() = size; - } - void Commit() { - GetData() = nullptr; - GetSize() = 0; - } - - private: - container_internal::CompressedTuple alloc_data_; - SizeType size_ = 0; -}; - -template -class Storage { - public: - using AllocatorTraits = absl::allocator_traits; - using allocator_type = typename AllocatorTraits::allocator_type; - using value_type = typename AllocatorTraits::value_type; - using pointer = typename AllocatorTraits::pointer; - using const_pointer = typename AllocatorTraits::const_pointer; - using size_type = typename AllocatorTraits::size_type; - using difference_type = typename AllocatorTraits::difference_type; - - using reference = value_type&; - using const_reference = const value_type&; - using RValueReference = value_type&&; - using iterator = pointer; - using const_iterator = const_pointer; - using reverse_iterator = std::reverse_iterator; - using const_reverse_iterator = std::reverse_iterator; - using MoveIterator = std::move_iterator; - using IsMemcpyOk = inlined_vector_internal::IsMemcpyOk; - - using StorageView = inlined_vector_internal::StorageView; - - template - using IteratorValueAdapter = - inlined_vector_internal::IteratorValueAdapter; - using CopyValueAdapter = - inlined_vector_internal::CopyValueAdapter; - using DefaultValueAdapter = - inlined_vector_internal::DefaultValueAdapter; - - using AllocationTransaction = - inlined_vector_internal::AllocationTransaction; - using ConstructionTransaction = - inlined_vector_internal::ConstructionTransaction; - - static size_type NextCapacity(size_type current_capacity) { - return current_capacity * 2; - } - - static size_type ComputeCapacity(size_type current_capacity, - size_type requested_capacity) { - return (std::max)(NextCapacity(current_capacity), requested_capacity); - } - - // --------------------------------------------------------------------------- - // Storage Constructors and Destructor - // --------------------------------------------------------------------------- - - Storage() : metadata_(allocator_type(), /* size and is_allocated */ 0) {} - - explicit Storage(const allocator_type& alloc) - : metadata_(alloc, /* size and is_allocated */ 0) {} - - ~Storage() { - if (GetSizeAndIsAllocated() == 0) { - // Empty and not allocated; nothing to do. - } else if (IsMemcpyOk::value) { - // No destructors need to be run; just deallocate if necessary. - DeallocateIfAllocated(); - } else { - DestroyContents(); - } - } - - // --------------------------------------------------------------------------- - // Storage Member Accessors - // --------------------------------------------------------------------------- - - size_type& GetSizeAndIsAllocated() { return metadata_.template get<1>(); } - - const size_type& GetSizeAndIsAllocated() const { - return metadata_.template get<1>(); - } - - size_type GetSize() const { return GetSizeAndIsAllocated() >> 1; } - - bool GetIsAllocated() const { return GetSizeAndIsAllocated() & 1; } - - pointer GetAllocatedData() { return data_.allocated.allocated_data; } - - const_pointer GetAllocatedData() const { - return data_.allocated.allocated_data; - } - - pointer GetInlinedData() { - return reinterpret_cast( - std::addressof(data_.inlined.inlined_data[0])); - } - - const_pointer GetInlinedData() const { - return reinterpret_cast( - std::addressof(data_.inlined.inlined_data[0])); - } - - size_type GetAllocatedCapacity() const { - return data_.allocated.allocated_capacity; - } - - size_type GetInlinedCapacity() const { return static_cast(N); } - - StorageView MakeStorageView() { - return GetIsAllocated() - ? StorageView{GetAllocatedData(), GetSize(), - GetAllocatedCapacity()} - : StorageView{GetInlinedData(), GetSize(), GetInlinedCapacity()}; - } - - allocator_type* GetAllocPtr() { - return std::addressof(metadata_.template get<0>()); - } - - const allocator_type* GetAllocPtr() const { - return std::addressof(metadata_.template get<0>()); - } - - // --------------------------------------------------------------------------- - // Storage Member Mutators - // --------------------------------------------------------------------------- - - ABSL_ATTRIBUTE_NOINLINE void InitFrom(const Storage& other); - - template - void Initialize(ValueAdapter values, size_type new_size); - - template - void Assign(ValueAdapter values, size_type new_size); - - template - void Resize(ValueAdapter values, size_type new_size); - - template - iterator Insert(const_iterator pos, ValueAdapter values, - size_type insert_count); - - template - reference EmplaceBack(Args&&... args); - - iterator Erase(const_iterator from, const_iterator to); - - void Reserve(size_type requested_capacity); - - void ShrinkToFit(); - - void Swap(Storage* other_storage_ptr); - - void SetIsAllocated() { - GetSizeAndIsAllocated() |= static_cast(1); - } - - void UnsetIsAllocated() { - GetSizeAndIsAllocated() &= ((std::numeric_limits::max)() - 1); - } - - void SetSize(size_type size) { - GetSizeAndIsAllocated() = - (size << 1) | static_cast(GetIsAllocated()); - } - - void SetAllocatedSize(size_type size) { - GetSizeAndIsAllocated() = (size << 1) | static_cast(1); - } - - void SetInlinedSize(size_type size) { - GetSizeAndIsAllocated() = size << static_cast(1); - } - - void AddSize(size_type count) { - GetSizeAndIsAllocated() += count << static_cast(1); - } - - void SubtractSize(size_type count) { - assert(count <= GetSize()); - - GetSizeAndIsAllocated() -= count << static_cast(1); - } - - void SetAllocatedData(pointer data, size_type capacity) { - data_.allocated.allocated_data = data; - data_.allocated.allocated_capacity = capacity; - } - - void AcquireAllocatedData(AllocationTransaction* allocation_tx_ptr) { - SetAllocatedData(allocation_tx_ptr->GetData(), - allocation_tx_ptr->GetCapacity()); - - allocation_tx_ptr->Reset(); - } - - void MemcpyFrom(const Storage& other_storage) { - assert(IsMemcpyOk::value || other_storage.GetIsAllocated()); - - GetSizeAndIsAllocated() = other_storage.GetSizeAndIsAllocated(); - data_ = other_storage.data_; - } - - void DeallocateIfAllocated() { - if (GetIsAllocated()) { - AllocatorTraits::deallocate(*GetAllocPtr(), GetAllocatedData(), - GetAllocatedCapacity()); - } - } - - private: - ABSL_ATTRIBUTE_NOINLINE void DestroyContents(); - - using Metadata = - container_internal::CompressedTuple; - - struct Allocated { - pointer allocated_data; - size_type allocated_capacity; - }; - - struct Inlined { - alignas(value_type) char inlined_data[sizeof(value_type[N])]; - }; - - union Data { - Allocated allocated; - Inlined inlined; - }; - - template - ABSL_ATTRIBUTE_NOINLINE reference EmplaceBackSlow(Args&&... args); - - Metadata metadata_; - Data data_; -}; - -template -void Storage::DestroyContents() { - pointer data = GetIsAllocated() ? GetAllocatedData() : GetInlinedData(); - inlined_vector_internal::DestroyElements(GetAllocPtr(), data, GetSize()); - DeallocateIfAllocated(); -} - -template -void Storage::InitFrom(const Storage& other) { - const auto n = other.GetSize(); - assert(n > 0); // Empty sources handled handled in caller. - const_pointer src; - pointer dst; - if (!other.GetIsAllocated()) { - dst = GetInlinedData(); - src = other.GetInlinedData(); - } else { - // Because this is only called from the `InlinedVector` constructors, it's - // safe to take on the allocation with size `0`. If `ConstructElements(...)` - // throws, deallocation will be automatically handled by `~Storage()`. - size_type new_capacity = ComputeCapacity(GetInlinedCapacity(), n); - dst = AllocatorTraits::allocate(*GetAllocPtr(), new_capacity); - SetAllocatedData(dst, new_capacity); - src = other.GetAllocatedData(); - } - if (IsMemcpyOk::value) { - MemcpyIfAllowed(dst, src, sizeof(dst[0]) * n); - } else { - auto values = IteratorValueAdapter(src); - inlined_vector_internal::ConstructElements(GetAllocPtr(), dst, &values, n); - } - GetSizeAndIsAllocated() = other.GetSizeAndIsAllocated(); -} - -template -template -auto Storage::Initialize(ValueAdapter values, size_type new_size) - -> void { - // Only callable from constructors! - assert(!GetIsAllocated()); - assert(GetSize() == 0); - - pointer construct_data; - if (new_size > GetInlinedCapacity()) { - // Because this is only called from the `InlinedVector` constructors, it's - // safe to take on the allocation with size `0`. If `ConstructElements(...)` - // throws, deallocation will be automatically handled by `~Storage()`. - size_type new_capacity = ComputeCapacity(GetInlinedCapacity(), new_size); - construct_data = AllocatorTraits::allocate(*GetAllocPtr(), new_capacity); - SetAllocatedData(construct_data, new_capacity); - SetIsAllocated(); - } else { - construct_data = GetInlinedData(); - } - - inlined_vector_internal::ConstructElements(GetAllocPtr(), construct_data, - &values, new_size); - - // Since the initial size was guaranteed to be `0` and the allocated bit is - // already correct for either case, *adding* `new_size` gives us the correct - // result faster than setting it directly. - AddSize(new_size); -} - -template -template -auto Storage::Assign(ValueAdapter values, size_type new_size) -> void { - StorageView storage_view = MakeStorageView(); - - AllocationTransaction allocation_tx(GetAllocPtr()); - - absl::Span assign_loop; - absl::Span construct_loop; - absl::Span destroy_loop; - - if (new_size > storage_view.capacity) { - size_type new_capacity = ComputeCapacity(storage_view.capacity, new_size); - construct_loop = {allocation_tx.Allocate(new_capacity), new_size}; - destroy_loop = {storage_view.data, storage_view.size}; - } else if (new_size > storage_view.size) { - assign_loop = {storage_view.data, storage_view.size}; - construct_loop = {storage_view.data + storage_view.size, - new_size - storage_view.size}; - } else { - assign_loop = {storage_view.data, new_size}; - destroy_loop = {storage_view.data + new_size, storage_view.size - new_size}; - } - - inlined_vector_internal::AssignElements(assign_loop.data(), &values, - assign_loop.size()); - - inlined_vector_internal::ConstructElements( - GetAllocPtr(), construct_loop.data(), &values, construct_loop.size()); - - inlined_vector_internal::DestroyElements(GetAllocPtr(), destroy_loop.data(), - destroy_loop.size()); - - if (allocation_tx.DidAllocate()) { - DeallocateIfAllocated(); - AcquireAllocatedData(&allocation_tx); - SetIsAllocated(); - } - - SetSize(new_size); -} - -template -template -auto Storage::Resize(ValueAdapter values, size_type new_size) -> void { - StorageView storage_view = MakeStorageView(); - auto* const base = storage_view.data; - const size_type size = storage_view.size; - auto* alloc = GetAllocPtr(); - if (new_size <= size) { - // Destroy extra old elements. - inlined_vector_internal::DestroyElements(alloc, base + new_size, - size - new_size); - } else if (new_size <= storage_view.capacity) { - // Construct new elements in place. - inlined_vector_internal::ConstructElements(alloc, base + size, &values, - new_size - size); - } else { - // Steps: - // a. Allocate new backing store. - // b. Construct new elements in new backing store. - // c. Move existing elements from old backing store to now. - // d. Destroy all elements in old backing store. - // Use transactional wrappers for the first two steps so we can roll - // back if necessary due to exceptions. - AllocationTransaction allocation_tx(alloc); - size_type new_capacity = ComputeCapacity(storage_view.capacity, new_size); - pointer new_data = allocation_tx.Allocate(new_capacity); - - ConstructionTransaction construction_tx(alloc); - construction_tx.Construct(new_data + size, &values, new_size - size); - - IteratorValueAdapter move_values((MoveIterator(base))); - inlined_vector_internal::ConstructElements(alloc, new_data, &move_values, - size); - - inlined_vector_internal::DestroyElements(alloc, base, size); - construction_tx.Commit(); - DeallocateIfAllocated(); - AcquireAllocatedData(&allocation_tx); - SetIsAllocated(); - } - SetSize(new_size); -} - -template -template -auto Storage::Insert(const_iterator pos, ValueAdapter values, - size_type insert_count) -> iterator { - StorageView storage_view = MakeStorageView(); - - size_type insert_index = - std::distance(const_iterator(storage_view.data), pos); - size_type insert_end_index = insert_index + insert_count; - size_type new_size = storage_view.size + insert_count; - - if (new_size > storage_view.capacity) { - AllocationTransaction allocation_tx(GetAllocPtr()); - ConstructionTransaction construction_tx(GetAllocPtr()); - ConstructionTransaction move_construciton_tx(GetAllocPtr()); - - IteratorValueAdapter move_values( - MoveIterator(storage_view.data)); - - size_type new_capacity = ComputeCapacity(storage_view.capacity, new_size); - pointer new_data = allocation_tx.Allocate(new_capacity); - - construction_tx.Construct(new_data + insert_index, &values, insert_count); - - move_construciton_tx.Construct(new_data, &move_values, insert_index); - - inlined_vector_internal::ConstructElements( - GetAllocPtr(), new_data + insert_end_index, &move_values, - storage_view.size - insert_index); - - inlined_vector_internal::DestroyElements(GetAllocPtr(), storage_view.data, - storage_view.size); - - construction_tx.Commit(); - move_construciton_tx.Commit(); - DeallocateIfAllocated(); - AcquireAllocatedData(&allocation_tx); - - SetAllocatedSize(new_size); - return iterator(new_data + insert_index); - } else { - size_type move_construction_destination_index = - (std::max)(insert_end_index, storage_view.size); - - ConstructionTransaction move_construction_tx(GetAllocPtr()); - - IteratorValueAdapter move_construction_values( - MoveIterator(storage_view.data + - (move_construction_destination_index - insert_count))); - absl::Span move_construction = { - storage_view.data + move_construction_destination_index, - new_size - move_construction_destination_index}; - - pointer move_assignment_values = storage_view.data + insert_index; - absl::Span move_assignment = { - storage_view.data + insert_end_index, - move_construction_destination_index - insert_end_index}; - - absl::Span insert_assignment = {move_assignment_values, - move_construction.size()}; - - absl::Span insert_construction = { - insert_assignment.data() + insert_assignment.size(), - insert_count - insert_assignment.size()}; - - move_construction_tx.Construct(move_construction.data(), - &move_construction_values, - move_construction.size()); - - for (pointer destination = move_assignment.data() + move_assignment.size(), - last_destination = move_assignment.data(), - source = move_assignment_values + move_assignment.size(); - ;) { - --destination; - --source; - if (destination < last_destination) break; - *destination = std::move(*source); - } - - inlined_vector_internal::AssignElements(insert_assignment.data(), &values, - insert_assignment.size()); - - inlined_vector_internal::ConstructElements( - GetAllocPtr(), insert_construction.data(), &values, - insert_construction.size()); - - move_construction_tx.Commit(); - - AddSize(insert_count); - return iterator(storage_view.data + insert_index); - } -} - -template -template -auto Storage::EmplaceBack(Args&&... args) -> reference { - StorageView storage_view = MakeStorageView(); - const auto n = storage_view.size; - if (ABSL_PREDICT_TRUE(n != storage_view.capacity)) { - // Fast path; new element fits. - pointer last_ptr = storage_view.data + n; - AllocatorTraits::construct(*GetAllocPtr(), last_ptr, - std::forward(args)...); - AddSize(1); - return *last_ptr; - } - // TODO(b/173712035): Annotate with musttail attribute to prevent regression. - return EmplaceBackSlow(std::forward(args)...); -} - -template -template -auto Storage::EmplaceBackSlow(Args&&... args) -> reference { - StorageView storage_view = MakeStorageView(); - AllocationTransaction allocation_tx(GetAllocPtr()); - IteratorValueAdapter move_values( - MoveIterator(storage_view.data)); - size_type new_capacity = NextCapacity(storage_view.capacity); - pointer construct_data = allocation_tx.Allocate(new_capacity); - pointer last_ptr = construct_data + storage_view.size; - - // Construct new element. - AllocatorTraits::construct(*GetAllocPtr(), last_ptr, - std::forward(args)...); - // Move elements from old backing store to new backing store. - ABSL_INTERNAL_TRY { - inlined_vector_internal::ConstructElements( - GetAllocPtr(), allocation_tx.GetData(), &move_values, - storage_view.size); - } - ABSL_INTERNAL_CATCH_ANY { - AllocatorTraits::destroy(*GetAllocPtr(), last_ptr); - ABSL_INTERNAL_RETHROW; - } - // Destroy elements in old backing store. - inlined_vector_internal::DestroyElements(GetAllocPtr(), storage_view.data, - storage_view.size); - - DeallocateIfAllocated(); - AcquireAllocatedData(&allocation_tx); - SetIsAllocated(); - AddSize(1); - return *last_ptr; -} - -template -auto Storage::Erase(const_iterator from, const_iterator to) - -> iterator { - StorageView storage_view = MakeStorageView(); - - size_type erase_size = std::distance(from, to); - size_type erase_index = - std::distance(const_iterator(storage_view.data), from); - size_type erase_end_index = erase_index + erase_size; - - IteratorValueAdapter move_values( - MoveIterator(storage_view.data + erase_end_index)); - - inlined_vector_internal::AssignElements(storage_view.data + erase_index, - &move_values, - storage_view.size - erase_end_index); - - inlined_vector_internal::DestroyElements( - GetAllocPtr(), storage_view.data + (storage_view.size - erase_size), - erase_size); - - SubtractSize(erase_size); - return iterator(storage_view.data + erase_index); -} - -template -auto Storage::Reserve(size_type requested_capacity) -> void { - StorageView storage_view = MakeStorageView(); - - if (ABSL_PREDICT_FALSE(requested_capacity <= storage_view.capacity)) return; - - AllocationTransaction allocation_tx(GetAllocPtr()); - - IteratorValueAdapter move_values( - MoveIterator(storage_view.data)); - - size_type new_capacity = - ComputeCapacity(storage_view.capacity, requested_capacity); - pointer new_data = allocation_tx.Allocate(new_capacity); - - inlined_vector_internal::ConstructElements(GetAllocPtr(), new_data, - &move_values, storage_view.size); - - inlined_vector_internal::DestroyElements(GetAllocPtr(), storage_view.data, - storage_view.size); - - DeallocateIfAllocated(); - AcquireAllocatedData(&allocation_tx); - SetIsAllocated(); -} - -template -auto Storage::ShrinkToFit() -> void { - // May only be called on allocated instances! - assert(GetIsAllocated()); - - StorageView storage_view{GetAllocatedData(), GetSize(), - GetAllocatedCapacity()}; - - if (ABSL_PREDICT_FALSE(storage_view.size == storage_view.capacity)) return; - - AllocationTransaction allocation_tx(GetAllocPtr()); - - IteratorValueAdapter move_values( - MoveIterator(storage_view.data)); - - pointer construct_data; - if (storage_view.size > GetInlinedCapacity()) { - size_type new_capacity = storage_view.size; - construct_data = allocation_tx.Allocate(new_capacity); - } else { - construct_data = GetInlinedData(); - } - - ABSL_INTERNAL_TRY { - inlined_vector_internal::ConstructElements(GetAllocPtr(), construct_data, - &move_values, storage_view.size); - } - ABSL_INTERNAL_CATCH_ANY { - SetAllocatedData(storage_view.data, storage_view.capacity); - ABSL_INTERNAL_RETHROW; - } - - inlined_vector_internal::DestroyElements(GetAllocPtr(), storage_view.data, - storage_view.size); - - AllocatorTraits::deallocate(*GetAllocPtr(), storage_view.data, - storage_view.capacity); - - if (allocation_tx.DidAllocate()) { - AcquireAllocatedData(&allocation_tx); - } else { - UnsetIsAllocated(); - } -} - -template -auto Storage::Swap(Storage* other_storage_ptr) -> void { - using std::swap; - assert(this != other_storage_ptr); - - if (GetIsAllocated() && other_storage_ptr->GetIsAllocated()) { - swap(data_.allocated, other_storage_ptr->data_.allocated); - } else if (!GetIsAllocated() && !other_storage_ptr->GetIsAllocated()) { - Storage* small_ptr = this; - Storage* large_ptr = other_storage_ptr; - if (small_ptr->GetSize() > large_ptr->GetSize()) swap(small_ptr, large_ptr); - - for (size_type i = 0; i < small_ptr->GetSize(); ++i) { - swap(small_ptr->GetInlinedData()[i], large_ptr->GetInlinedData()[i]); - } - - IteratorValueAdapter move_values( - MoveIterator(large_ptr->GetInlinedData() + small_ptr->GetSize())); - - inlined_vector_internal::ConstructElements( - large_ptr->GetAllocPtr(), - small_ptr->GetInlinedData() + small_ptr->GetSize(), &move_values, - large_ptr->GetSize() - small_ptr->GetSize()); - - inlined_vector_internal::DestroyElements( - large_ptr->GetAllocPtr(), - large_ptr->GetInlinedData() + small_ptr->GetSize(), - large_ptr->GetSize() - small_ptr->GetSize()); - } else { - Storage* allocated_ptr = this; - Storage* inlined_ptr = other_storage_ptr; - if (!allocated_ptr->GetIsAllocated()) swap(allocated_ptr, inlined_ptr); - - StorageView allocated_storage_view{allocated_ptr->GetAllocatedData(), - allocated_ptr->GetSize(), - allocated_ptr->GetAllocatedCapacity()}; - - IteratorValueAdapter move_values( - MoveIterator(inlined_ptr->GetInlinedData())); - - ABSL_INTERNAL_TRY { - inlined_vector_internal::ConstructElements( - inlined_ptr->GetAllocPtr(), allocated_ptr->GetInlinedData(), - &move_values, inlined_ptr->GetSize()); - } - ABSL_INTERNAL_CATCH_ANY { - allocated_ptr->SetAllocatedData(allocated_storage_view.data, - allocated_storage_view.capacity); - ABSL_INTERNAL_RETHROW; - } - - inlined_vector_internal::DestroyElements(inlined_ptr->GetAllocPtr(), - inlined_ptr->GetInlinedData(), - inlined_ptr->GetSize()); - - inlined_ptr->SetAllocatedData(allocated_storage_view.data, - allocated_storage_view.capacity); - } - - swap(GetSizeAndIsAllocated(), other_storage_ptr->GetSizeAndIsAllocated()); - swap(*GetAllocPtr(), *other_storage_ptr->GetAllocPtr()); -} - -// End ignore "maybe-uninitialized" -#if !defined(__clang__) && defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -} // namespace inlined_vector_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_INLINED_VECTOR_INTERNAL_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/layout.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/layout.h deleted file mode 100644 index 2336783..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/layout.h +++ /dev/null @@ -1,743 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// MOTIVATION AND TUTORIAL -// -// If you want to put in a single heap allocation N doubles followed by M ints, -// it's easy if N and M are known at compile time. -// -// struct S { -// double a[N]; -// int b[M]; -// }; -// -// S* p = new S; -// -// But what if N and M are known only in run time? Class template Layout to the -// rescue! It's a portable generalization of the technique known as struct hack. -// -// // This object will tell us everything we need to know about the memory -// // layout of double[N] followed by int[M]. It's structurally identical to -// // size_t[2] that stores N and M. It's very cheap to create. -// const Layout layout(N, M); -// -// // Allocate enough memory for both arrays. `AllocSize()` tells us how much -// // memory is needed. We are free to use any allocation function we want as -// // long as it returns aligned memory. -// std::unique_ptr p(new unsigned char[layout.AllocSize()]); -// -// // Obtain the pointer to the array of doubles. -// // Equivalent to `reinterpret_cast(p.get())`. -// // -// // We could have written layout.Pointer<0>(p) instead. If all the types are -// // unique you can use either form, but if some types are repeated you must -// // use the index form. -// double* a = layout.Pointer(p.get()); -// -// // Obtain the pointer to the array of ints. -// // Equivalent to `reinterpret_cast(p.get() + N * 8)`. -// int* b = layout.Pointer(p); -// -// If we are unable to specify sizes of all fields, we can pass as many sizes as -// we can to `Partial()`. In return, it'll allow us to access the fields whose -// locations and sizes can be computed from the provided information. -// `Partial()` comes in handy when the array sizes are embedded into the -// allocation. -// -// // size_t[1] containing N, size_t[1] containing M, double[N], int[M]. -// using L = Layout; -// -// unsigned char* Allocate(size_t n, size_t m) { -// const L layout(1, 1, n, m); -// unsigned char* p = new unsigned char[layout.AllocSize()]; -// *layout.Pointer<0>(p) = n; -// *layout.Pointer<1>(p) = m; -// return p; -// } -// -// void Use(unsigned char* p) { -// // First, extract N and M. -// // Specify that the first array has only one element. Using `prefix` we -// // can access the first two arrays but not more. -// constexpr auto prefix = L::Partial(1); -// size_t n = *prefix.Pointer<0>(p); -// size_t m = *prefix.Pointer<1>(p); -// -// // Now we can get pointers to the payload. -// const L layout(1, 1, n, m); -// double* a = layout.Pointer(p); -// int* b = layout.Pointer(p); -// } -// -// The layout we used above combines fixed-size with dynamically-sized fields. -// This is quite common. Layout is optimized for this use case and generates -// optimal code. All computations that can be performed at compile time are -// indeed performed at compile time. -// -// Efficiency tip: The order of fields matters. In `Layout` try to -// ensure that `alignof(T1) >= ... >= alignof(TN)`. This way you'll have no -// padding in between arrays. -// -// You can manually override the alignment of an array by wrapping the type in -// `Aligned`. `Layout<..., Aligned, ...>` has exactly the same API -// and behavior as `Layout<..., T, ...>` except that the first element of the -// array of `T` is aligned to `N` (the rest of the elements follow without -// padding). `N` cannot be less than `alignof(T)`. -// -// `AllocSize()` and `Pointer()` are the most basic methods for dealing with -// memory layouts. Check out the reference or code below to discover more. -// -// EXAMPLE -// -// // Immutable move-only string with sizeof equal to sizeof(void*). The -// // string size and the characters are kept in the same heap allocation. -// class CompactString { -// public: -// CompactString(const char* s = "") { -// const size_t size = strlen(s); -// // size_t[1] followed by char[size + 1]. -// const L layout(1, size + 1); -// p_.reset(new unsigned char[layout.AllocSize()]); -// // If running under ASAN, mark the padding bytes, if any, to catch -// // memory errors. -// layout.PoisonPadding(p_.get()); -// // Store the size in the allocation. -// *layout.Pointer(p_.get()) = size; -// // Store the characters in the allocation. -// memcpy(layout.Pointer(p_.get()), s, size + 1); -// } -// -// size_t size() const { -// // Equivalent to reinterpret_cast(*p). -// return *L::Partial().Pointer(p_.get()); -// } -// -// const char* c_str() const { -// // Equivalent to reinterpret_cast(p.get() + sizeof(size_t)). -// // The argument in Partial(1) specifies that we have size_t[1] in front -// // of the characters. -// return L::Partial(1).Pointer(p_.get()); -// } -// -// private: -// // Our heap allocation contains a size_t followed by an array of chars. -// using L = Layout; -// std::unique_ptr p_; -// }; -// -// int main() { -// CompactString s = "hello"; -// assert(s.size() == 5); -// assert(strcmp(s.c_str(), "hello") == 0); -// } -// -// DOCUMENTATION -// -// The interface exported by this file consists of: -// - class `Layout<>` and its public members. -// - The public members of class `internal_layout::LayoutImpl<>`. That class -// isn't intended to be used directly, and its name and template parameter -// list are internal implementation details, but the class itself provides -// most of the functionality in this file. See comments on its members for -// detailed documentation. -// -// `Layout::Partial(count1,..., countm)` (where `m` <= `n`) returns a -// `LayoutImpl<>` object. `Layout layout(count1,..., countn)` -// creates a `Layout` object, which exposes the same functionality by inheriting -// from `LayoutImpl<>`. - -#ifndef ABSL_CONTAINER_INTERNAL_LAYOUT_H_ -#define ABSL_CONTAINER_INTERNAL_LAYOUT_H_ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "absl/base/config.h" -#include "absl/meta/type_traits.h" -#include "absl/strings/str_cat.h" -#include "absl/types/span.h" -#include "absl/utility/utility.h" - -#ifdef ABSL_HAVE_ADDRESS_SANITIZER -#include -#endif - -#if defined(__GXX_RTTI) -#define ABSL_INTERNAL_HAS_CXA_DEMANGLE -#endif - -#ifdef ABSL_INTERNAL_HAS_CXA_DEMANGLE -#include -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// A type wrapper that instructs `Layout` to use the specific alignment for the -// array. `Layout<..., Aligned, ...>` has exactly the same API -// and behavior as `Layout<..., T, ...>` except that the first element of the -// array of `T` is aligned to `N` (the rest of the elements follow without -// padding). -// -// Requires: `N >= alignof(T)` and `N` is a power of 2. -template -struct Aligned; - -namespace internal_layout { - -template -struct NotAligned {}; - -template -struct NotAligned> { - static_assert(sizeof(T) == 0, "Aligned cannot be const-qualified"); -}; - -template -using IntToSize = size_t; - -template -using TypeToSize = size_t; - -template -struct Type : NotAligned { - using type = T; -}; - -template -struct Type> { - using type = T; -}; - -template -struct SizeOf : NotAligned, std::integral_constant {}; - -template -struct SizeOf> : std::integral_constant {}; - -// Note: workaround for https://gcc.gnu.org/PR88115 -template -struct AlignOf : NotAligned { - static constexpr size_t value = alignof(T); -}; - -template -struct AlignOf> { - static_assert(N % alignof(T) == 0, - "Custom alignment can't be lower than the type's alignment"); - static constexpr size_t value = N; -}; - -// Does `Ts...` contain `T`? -template -using Contains = absl::disjunction...>; - -template -using CopyConst = - typename std::conditional::value, const To, To>::type; - -// Note: We're not qualifying this with absl:: because it doesn't compile under -// MSVC. -template -using SliceType = Span; - -// This namespace contains no types. It prevents functions defined in it from -// being found by ADL. -namespace adl_barrier { - -template -constexpr size_t Find(Needle, Needle, Ts...) { - static_assert(!Contains(), "Duplicate element type"); - return 0; -} - -template -constexpr size_t Find(Needle, T, Ts...) { - return adl_barrier::Find(Needle(), Ts()...) + 1; -} - -constexpr bool IsPow2(size_t n) { return !(n & (n - 1)); } - -// Returns `q * m` for the smallest `q` such that `q * m >= n`. -// Requires: `m` is a power of two. It's enforced by IsLegalElementType below. -constexpr size_t Align(size_t n, size_t m) { return (n + m - 1) & ~(m - 1); } - -constexpr size_t Min(size_t a, size_t b) { return b < a ? b : a; } - -constexpr size_t Max(size_t a) { return a; } - -template -constexpr size_t Max(size_t a, size_t b, Ts... rest) { - return adl_barrier::Max(b < a ? a : b, rest...); -} - -template -std::string TypeName() { - std::string out; - int status = 0; - char* demangled = nullptr; -#ifdef ABSL_INTERNAL_HAS_CXA_DEMANGLE - demangled = abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &status); -#endif - if (status == 0 && demangled != nullptr) { // Demangling succeeded. - absl::StrAppend(&out, "<", demangled, ">"); - free(demangled); - } else { -#if defined(__GXX_RTTI) || defined(_CPPRTTI) - absl::StrAppend(&out, "<", typeid(T).name(), ">"); -#endif - } - return out; -} - -} // namespace adl_barrier - -template -using EnableIf = typename std::enable_if::type; - -// Can `T` be a template argument of `Layout`? -template -using IsLegalElementType = std::integral_constant< - bool, !std::is_reference::value && !std::is_volatile::value && - !std::is_reference::type>::value && - !std::is_volatile::type>::value && - adl_barrier::IsPow2(AlignOf::value)>; - -template -class LayoutImpl; - -// Public base class of `Layout` and the result type of `Layout::Partial()`. -// -// `Elements...` contains all template arguments of `Layout` that created this -// instance. -// -// `SizeSeq...` is `[0, NumSizes)` where `NumSizes` is the number of arguments -// passed to `Layout::Partial()` or `Layout::Layout()`. -// -// `OffsetSeq...` is `[0, NumOffsets)` where `NumOffsets` is -// `Min(sizeof...(Elements), NumSizes + 1)` (the number of arrays for which we -// can compute offsets). -template -class LayoutImpl, absl::index_sequence, - absl::index_sequence> { - private: - static_assert(sizeof...(Elements) > 0, "At least one field is required"); - static_assert(absl::conjunction...>::value, - "Invalid element type (see IsLegalElementType)"); - - enum { - NumTypes = sizeof...(Elements), - NumSizes = sizeof...(SizeSeq), - NumOffsets = sizeof...(OffsetSeq), - }; - - // These are guaranteed by `Layout`. - static_assert(NumOffsets == adl_barrier::Min(NumTypes, NumSizes + 1), - "Internal error"); - static_assert(NumTypes > 0, "Internal error"); - - // Returns the index of `T` in `Elements...`. Results in a compilation error - // if `Elements...` doesn't contain exactly one instance of `T`. - template - static constexpr size_t ElementIndex() { - static_assert(Contains, Type::type>...>(), - "Type not found"); - return adl_barrier::Find(Type(), - Type::type>()...); - } - - template - using ElementAlignment = - AlignOf>::type>; - - public: - // Element types of all arrays packed in a tuple. - using ElementTypes = std::tuple::type...>; - - // Element type of the Nth array. - template - using ElementType = typename std::tuple_element::type; - - constexpr explicit LayoutImpl(IntToSize... sizes) - : size_{sizes...} {} - - // Alignment of the layout, equal to the strictest alignment of all elements. - // All pointers passed to the methods of layout must be aligned to this value. - static constexpr size_t Alignment() { - return adl_barrier::Max(AlignOf::value...); - } - - // Offset in bytes of the Nth array. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // assert(x.Offset<0>() == 0); // The ints starts from 0. - // assert(x.Offset<1>() == 16); // The doubles starts from 16. - // - // Requires: `N <= NumSizes && N < sizeof...(Ts)`. - template = 0> - constexpr size_t Offset() const { - return 0; - } - - template = 0> - constexpr size_t Offset() const { - static_assert(N < NumOffsets, "Index out of bounds"); - return adl_barrier::Align( - Offset() + SizeOf>() * size_[N - 1], - ElementAlignment::value); - } - - // Offset in bytes of the array with the specified element type. There must - // be exactly one such array and its zero-based index must be at most - // `NumSizes`. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // assert(x.Offset() == 0); // The ints starts from 0. - // assert(x.Offset() == 16); // The doubles starts from 16. - template - constexpr size_t Offset() const { - return Offset()>(); - } - - // Offsets in bytes of all arrays for which the offsets are known. - constexpr std::array Offsets() const { - return {{Offset()...}}; - } - - // The number of elements in the Nth array. This is the Nth argument of - // `Layout::Partial()` or `Layout::Layout()` (zero-based). - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // assert(x.Size<0>() == 3); - // assert(x.Size<1>() == 4); - // - // Requires: `N < NumSizes`. - template - constexpr size_t Size() const { - static_assert(N < NumSizes, "Index out of bounds"); - return size_[N]; - } - - // The number of elements in the array with the specified element type. - // There must be exactly one such array and its zero-based index must be - // at most `NumSizes`. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // assert(x.Size() == 3); - // assert(x.Size() == 4); - template - constexpr size_t Size() const { - return Size()>(); - } - - // The number of elements of all arrays for which they are known. - constexpr std::array Sizes() const { - return {{Size()...}}; - } - - // Pointer to the beginning of the Nth array. - // - // `Char` must be `[const] [signed|unsigned] char`. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // unsigned char* p = new unsigned char[x.AllocSize()]; - // int* ints = x.Pointer<0>(p); - // double* doubles = x.Pointer<1>(p); - // - // Requires: `N <= NumSizes && N < sizeof...(Ts)`. - // Requires: `p` is aligned to `Alignment()`. - template - CopyConst>* Pointer(Char* p) const { - using C = typename std::remove_const::type; - static_assert( - std::is_same() || std::is_same() || - std::is_same(), - "The argument must be a pointer to [const] [signed|unsigned] char"); - constexpr size_t alignment = Alignment(); - (void)alignment; - assert(reinterpret_cast(p) % alignment == 0); - return reinterpret_cast>*>(p + Offset()); - } - - // Pointer to the beginning of the array with the specified element type. - // There must be exactly one such array and its zero-based index must be at - // most `NumSizes`. - // - // `Char` must be `[const] [signed|unsigned] char`. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // unsigned char* p = new unsigned char[x.AllocSize()]; - // int* ints = x.Pointer(p); - // double* doubles = x.Pointer(p); - // - // Requires: `p` is aligned to `Alignment()`. - template - CopyConst* Pointer(Char* p) const { - return Pointer()>(p); - } - - // Pointers to all arrays for which pointers are known. - // - // `Char` must be `[const] [signed|unsigned] char`. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // unsigned char* p = new unsigned char[x.AllocSize()]; - // - // int* ints; - // double* doubles; - // std::tie(ints, doubles) = x.Pointers(p); - // - // Requires: `p` is aligned to `Alignment()`. - // - // Note: We're not using ElementType alias here because it does not compile - // under MSVC. - template - std::tuple::type>*...> - Pointers(Char* p) const { - return std::tuple>*...>( - Pointer(p)...); - } - - // The Nth array. - // - // `Char` must be `[const] [signed|unsigned] char`. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // unsigned char* p = new unsigned char[x.AllocSize()]; - // Span ints = x.Slice<0>(p); - // Span doubles = x.Slice<1>(p); - // - // Requires: `N < NumSizes`. - // Requires: `p` is aligned to `Alignment()`. - template - SliceType>> Slice(Char* p) const { - return SliceType>>(Pointer(p), Size()); - } - - // The array with the specified element type. There must be exactly one - // such array and its zero-based index must be less than `NumSizes`. - // - // `Char` must be `[const] [signed|unsigned] char`. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // unsigned char* p = new unsigned char[x.AllocSize()]; - // Span ints = x.Slice(p); - // Span doubles = x.Slice(p); - // - // Requires: `p` is aligned to `Alignment()`. - template - SliceType> Slice(Char* p) const { - return Slice()>(p); - } - - // All arrays with known sizes. - // - // `Char` must be `[const] [signed|unsigned] char`. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // unsigned char* p = new unsigned char[x.AllocSize()]; - // - // Span ints; - // Span doubles; - // std::tie(ints, doubles) = x.Slices(p); - // - // Requires: `p` is aligned to `Alignment()`. - // - // Note: We're not using ElementType alias here because it does not compile - // under MSVC. - template - std::tuple::type>>...> - Slices(Char* p) const { - // Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63875 (fixed - // in 6.1). - (void)p; - return std::tuple>>...>( - Slice(p)...); - } - - // The size of the allocation that fits all arrays. - // - // // int[3], 4 bytes of padding, double[4]. - // Layout x(3, 4); - // unsigned char* p = new unsigned char[x.AllocSize()]; // 48 bytes - // - // Requires: `NumSizes == sizeof...(Ts)`. - constexpr size_t AllocSize() const { - static_assert(NumTypes == NumSizes, "You must specify sizes of all fields"); - return Offset() + - SizeOf>() * size_[NumTypes - 1]; - } - - // If built with --config=asan, poisons padding bytes (if any) in the - // allocation. The pointer must point to a memory block at least - // `AllocSize()` bytes in length. - // - // `Char` must be `[const] [signed|unsigned] char`. - // - // Requires: `p` is aligned to `Alignment()`. - template = 0> - void PoisonPadding(const Char* p) const { - Pointer<0>(p); // verify the requirements on `Char` and `p` - } - - template = 0> - void PoisonPadding(const Char* p) const { - static_assert(N < NumOffsets, "Index out of bounds"); - (void)p; -#ifdef ABSL_HAVE_ADDRESS_SANITIZER - PoisonPadding(p); - // The `if` is an optimization. It doesn't affect the observable behaviour. - if (ElementAlignment::value % ElementAlignment::value) { - size_t start = - Offset() + SizeOf>() * size_[N - 1]; - ASAN_POISON_MEMORY_REGION(p + start, Offset() - start); - } -#endif - } - - // Human-readable description of the memory layout. Useful for debugging. - // Slow. - // - // // char[5], 3 bytes of padding, int[3], 4 bytes of padding, followed - // // by an unknown number of doubles. - // auto x = Layout::Partial(5, 3); - // assert(x.DebugString() == - // "@0(1)[5]; @8(4)[3]; @24(8)"); - // - // Each field is in the following format: @offset(sizeof)[size] ( - // may be missing depending on the target platform). For example, - // @8(4)[3] means that at offset 8 we have an array of ints, where each - // int is 4 bytes, and we have 3 of those ints. The size of the last field may - // be missing (as in the example above). Only fields with known offsets are - // described. Type names may differ across platforms: one compiler might - // produce "unsigned*" where another produces "unsigned int *". - std::string DebugString() const { - const auto offsets = Offsets(); - const size_t sizes[] = {SizeOf>()...}; - const std::string types[] = { - adl_barrier::TypeName>()...}; - std::string res = absl::StrCat("@0", types[0], "(", sizes[0], ")"); - for (size_t i = 0; i != NumOffsets - 1; ++i) { - absl::StrAppend(&res, "[", size_[i], "]; @", offsets[i + 1], types[i + 1], - "(", sizes[i + 1], ")"); - } - // NumSizes is a constant that may be zero. Some compilers cannot see that - // inside the if statement "size_[NumSizes - 1]" must be valid. - int last = static_cast(NumSizes) - 1; - if (NumTypes == NumSizes && last >= 0) { - absl::StrAppend(&res, "[", size_[last], "]"); - } - return res; - } - - private: - // Arguments of `Layout::Partial()` or `Layout::Layout()`. - size_t size_[NumSizes > 0 ? NumSizes : 1]; -}; - -template -using LayoutType = LayoutImpl< - std::tuple, absl::make_index_sequence, - absl::make_index_sequence>; - -} // namespace internal_layout - -// Descriptor of arrays of various types and sizes laid out in memory one after -// another. See the top of the file for documentation. -// -// Check out the public API of internal_layout::LayoutImpl above. The type is -// internal to the library but its methods are public, and they are inherited -// by `Layout`. -template -class Layout : public internal_layout::LayoutType { - public: - static_assert(sizeof...(Ts) > 0, "At least one field is required"); - static_assert( - absl::conjunction...>::value, - "Invalid element type (see IsLegalElementType)"); - - // The result type of `Partial()` with `NumSizes` arguments. - template - using PartialType = internal_layout::LayoutType; - - // `Layout` knows the element types of the arrays we want to lay out in - // memory but not the number of elements in each array. - // `Partial(size1, ..., sizeN)` allows us to specify the latter. The - // resulting immutable object can be used to obtain pointers to the - // individual arrays. - // - // It's allowed to pass fewer array sizes than the number of arrays. E.g., - // if all you need is to the offset of the second array, you only need to - // pass one argument -- the number of elements in the first array. - // - // // int[3] followed by 4 bytes of padding and an unknown number of - // // doubles. - // auto x = Layout::Partial(3); - // // doubles start at byte 16. - // assert(x.Offset<1>() == 16); - // - // If you know the number of elements in all arrays, you can still call - // `Partial()` but it's more convenient to use the constructor of `Layout`. - // - // Layout x(3, 5); - // - // Note: The sizes of the arrays must be specified in number of elements, - // not in bytes. - // - // Requires: `sizeof...(Sizes) <= sizeof...(Ts)`. - // Requires: all arguments are convertible to `size_t`. - template - static constexpr PartialType Partial(Sizes&&... sizes) { - static_assert(sizeof...(Sizes) <= sizeof...(Ts), ""); - return PartialType(absl::forward(sizes)...); - } - - // Creates a layout with the sizes of all arrays specified. If you know - // only the sizes of the first N arrays (where N can be zero), you can use - // `Partial()` defined above. The constructor is essentially equivalent to - // calling `Partial()` and passing in all array sizes; the constructor is - // provided as a convenient abbreviation. - // - // Note: The sizes of the arrays must be specified in number of elements, - // not in bytes. - constexpr explicit Layout(internal_layout::TypeToSize... sizes) - : internal_layout::LayoutType(sizes...) {} -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_LAYOUT_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/node_hash_policy.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/node_hash_policy.h deleted file mode 100644 index 4617162..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/node_hash_policy.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Adapts a policy for nodes. -// -// The node policy should model: -// -// struct Policy { -// // Returns a new node allocated and constructed using the allocator, using -// // the specified arguments. -// template -// value_type* new_element(Alloc* alloc, Args&&... args) const; -// -// // Destroys and deallocates node using the allocator. -// template -// void delete_element(Alloc* alloc, value_type* node) const; -// }; -// -// It may also optionally define `value()` and `apply()`. For documentation on -// these, see hash_policy_traits.h. - -#ifndef ABSL_CONTAINER_INTERNAL_NODE_HASH_POLICY_H_ -#define ABSL_CONTAINER_INTERNAL_NODE_HASH_POLICY_H_ - -#include -#include -#include -#include -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -struct node_hash_policy { - static_assert(std::is_lvalue_reference::value, ""); - - using slot_type = typename std::remove_cv< - typename std::remove_reference::type>::type*; - - template - static void construct(Alloc* alloc, slot_type* slot, Args&&... args) { - *slot = Policy::new_element(alloc, std::forward(args)...); - } - - template - static void destroy(Alloc* alloc, slot_type* slot) { - Policy::delete_element(alloc, *slot); - } - - template - static void transfer(Alloc*, slot_type* new_slot, slot_type* old_slot) { - *new_slot = *old_slot; - } - - static size_t space_used(const slot_type* slot) { - if (slot == nullptr) return Policy::element_space_used(nullptr); - return Policy::element_space_used(*slot); - } - - static Reference element(slot_type* slot) { return **slot; } - - template - static auto value(T* elem) -> decltype(P::value(elem)) { - return P::value(elem); - } - - template - static auto apply(Ts&&... ts) -> decltype(P::apply(std::forward(ts)...)) { - return P::apply(std::forward(ts)...); - } -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_NODE_HASH_POLICY_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/raw_hash_map.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/raw_hash_map.h deleted file mode 100644 index 0a02757..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/raw_hash_map.h +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_RAW_HASH_MAP_H_ -#define ABSL_CONTAINER_INTERNAL_RAW_HASH_MAP_H_ - -#include -#include -#include - -#include "absl/base/internal/throw_delegate.h" -#include "absl/container/internal/container_memory.h" -#include "absl/container/internal/raw_hash_set.h" // IWYU pragma: export - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class raw_hash_map : public raw_hash_set { - // P is Policy. It's passed as a template argument to support maps that have - // incomplete types as values, as in unordered_map. - // MappedReference<> may be a non-reference type. - template - using MappedReference = decltype(P::value( - std::addressof(std::declval()))); - - // MappedConstReference<> may be a non-reference type. - template - using MappedConstReference = decltype(P::value( - std::addressof(std::declval()))); - - using KeyArgImpl = - KeyArg::value && IsTransparent::value>; - - public: - using key_type = typename Policy::key_type; - using mapped_type = typename Policy::mapped_type; - template - using key_arg = typename KeyArgImpl::template type; - - static_assert(!std::is_reference::value, ""); - // TODO(alkis): remove this assertion and verify that reference mapped_type is - // supported. - static_assert(!std::is_reference::value, ""); - - using iterator = typename raw_hash_map::raw_hash_set::iterator; - using const_iterator = typename raw_hash_map::raw_hash_set::const_iterator; - - raw_hash_map() {} - using raw_hash_map::raw_hash_set::raw_hash_set; - - // The last two template parameters ensure that both arguments are rvalues - // (lvalue arguments are handled by the overloads below). This is necessary - // for supporting bitfield arguments. - // - // union { int n : 1; }; - // flat_hash_map m; - // m.insert_or_assign(n, n); - template - std::pair insert_or_assign(key_arg&& k, V&& v) { - return insert_or_assign_impl(std::forward(k), std::forward(v)); - } - - template - std::pair insert_or_assign(key_arg&& k, const V& v) { - return insert_or_assign_impl(std::forward(k), v); - } - - template - std::pair insert_or_assign(const key_arg& k, V&& v) { - return insert_or_assign_impl(k, std::forward(v)); - } - - template - std::pair insert_or_assign(const key_arg& k, const V& v) { - return insert_or_assign_impl(k, v); - } - - template - iterator insert_or_assign(const_iterator, key_arg&& k, V&& v) { - return insert_or_assign(std::forward(k), std::forward(v)).first; - } - - template - iterator insert_or_assign(const_iterator, key_arg&& k, const V& v) { - return insert_or_assign(std::forward(k), v).first; - } - - template - iterator insert_or_assign(const_iterator, const key_arg& k, V&& v) { - return insert_or_assign(k, std::forward(v)).first; - } - - template - iterator insert_or_assign(const_iterator, const key_arg& k, const V& v) { - return insert_or_assign(k, v).first; - } - - // All `try_emplace()` overloads make the same guarantees regarding rvalue - // arguments as `std::unordered_map::try_emplace()`, namely that these - // functions will not move from rvalue arguments if insertions do not happen. - template ::value, int>::type = 0, - K* = nullptr> - std::pair try_emplace(key_arg&& k, Args&&... args) { - return try_emplace_impl(std::forward(k), std::forward(args)...); - } - - template ::value, int>::type = 0> - std::pair try_emplace(const key_arg& k, Args&&... args) { - return try_emplace_impl(k, std::forward(args)...); - } - - template - iterator try_emplace(const_iterator, key_arg&& k, Args&&... args) { - return try_emplace(std::forward(k), std::forward(args)...).first; - } - - template - iterator try_emplace(const_iterator, const key_arg& k, Args&&... args) { - return try_emplace(k, std::forward(args)...).first; - } - - template - MappedReference

at(const key_arg& key) { - auto it = this->find(key); - if (it == this->end()) { - base_internal::ThrowStdOutOfRange( - "absl::container_internal::raw_hash_map<>::at"); - } - return Policy::value(&*it); - } - - template - MappedConstReference

at(const key_arg& key) const { - auto it = this->find(key); - if (it == this->end()) { - base_internal::ThrowStdOutOfRange( - "absl::container_internal::raw_hash_map<>::at"); - } - return Policy::value(&*it); - } - - template - MappedReference

operator[](key_arg&& key) { - return Policy::value(&*try_emplace(std::forward(key)).first); - } - - template - MappedReference

operator[](const key_arg& key) { - return Policy::value(&*try_emplace(key).first); - } - - private: - template - std::pair insert_or_assign_impl(K&& k, V&& v) { - auto res = this->find_or_prepare_insert(k); - if (res.second) - this->emplace_at(res.first, std::forward(k), std::forward(v)); - else - Policy::value(&*this->iterator_at(res.first)) = std::forward(v); - return {this->iterator_at(res.first), res.second}; - } - - template - std::pair try_emplace_impl(K&& k, Args&&... args) { - auto res = this->find_or_prepare_insert(k); - if (res.second) - this->emplace_at(res.first, std::piecewise_construct, - std::forward_as_tuple(std::forward(k)), - std::forward_as_tuple(std::forward(args)...)); - return {this->iterator_at(res.first), res.second}; - } -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_RAW_HASH_MAP_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/raw_hash_set.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/raw_hash_set.h deleted file mode 100644 index 80fc2cb..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/raw_hash_set.h +++ /dev/null @@ -1,1900 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// An open-addressing -// hashtable with quadratic probing. -// -// This is a low level hashtable on top of which different interfaces can be -// implemented, like flat_hash_set, node_hash_set, string_hash_set, etc. -// -// The table interface is similar to that of std::unordered_set. Notable -// differences are that most member functions support heterogeneous keys when -// BOTH the hash and eq functions are marked as transparent. They do so by -// providing a typedef called `is_transparent`. -// -// When heterogeneous lookup is enabled, functions that take key_type act as if -// they have an overload set like: -// -// iterator find(const key_type& key); -// template -// iterator find(const K& key); -// -// size_type erase(const key_type& key); -// template -// size_type erase(const K& key); -// -// std::pair equal_range(const key_type& key); -// template -// std::pair equal_range(const K& key); -// -// When heterogeneous lookup is disabled, only the explicit `key_type` overloads -// exist. -// -// find() also supports passing the hash explicitly: -// -// iterator find(const key_type& key, size_t hash); -// template -// iterator find(const U& key, size_t hash); -// -// In addition the pointer to element and iterator stability guarantees are -// weaker: all iterators and pointers are invalidated after a new element is -// inserted. -// -// IMPLEMENTATION DETAILS -// -// The table stores elements inline in a slot array. In addition to the slot -// array the table maintains some control state per slot. The extra state is one -// byte per slot and stores empty or deleted marks, or alternatively 7 bits from -// the hash of an occupied slot. The table is split into logical groups of -// slots, like so: -// -// Group 1 Group 2 Group 3 -// +---------------+---------------+---------------+ -// | | | | | | | | | | | | | | | | | | | | | | | | | -// +---------------+---------------+---------------+ -// -// On lookup the hash is split into two parts: -// - H2: 7 bits (those stored in the control bytes) -// - H1: the rest of the bits -// The groups are probed using H1. For each group the slots are matched to H2 in -// parallel. Because H2 is 7 bits (128 states) and the number of slots per group -// is low (8 or 16) in almost all cases a match in H2 is also a lookup hit. -// -// On insert, once the right group is found (as in lookup), its slots are -// filled in order. -// -// On erase a slot is cleared. In case the group did not have any empty slots -// before the erase, the erased slot is marked as deleted. -// -// Groups without empty slots (but maybe with deleted slots) extend the probe -// sequence. The probing algorithm is quadratic. Given N the number of groups, -// the probing function for the i'th probe is: -// -// P(0) = H1 % N -// -// P(i) = (P(i - 1) + i) % N -// -// This probing function guarantees that after N probes, all the groups of the -// table will be probed exactly once. - -#ifndef ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_ -#define ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "absl/base/internal/endian.h" -#include "absl/base/optimization.h" -#include "absl/base/port.h" -#include "absl/container/internal/common.h" -#include "absl/container/internal/compressed_tuple.h" -#include "absl/container/internal/container_memory.h" -#include "absl/container/internal/hash_policy_traits.h" -#include "absl/container/internal/hashtable_debug_hooks.h" -#include "absl/container/internal/hashtablez_sampler.h" -#include "absl/container/internal/have_sse.h" -#include "absl/container/internal/layout.h" -#include "absl/memory/memory.h" -#include "absl/meta/type_traits.h" -#include "absl/numeric/bits.h" -#include "absl/utility/utility.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -void SwapAlloc(AllocType& lhs, AllocType& rhs, - std::true_type /* propagate_on_container_swap */) { - using std::swap; - swap(lhs, rhs); -} -template -void SwapAlloc(AllocType& /*lhs*/, AllocType& /*rhs*/, - std::false_type /* propagate_on_container_swap */) {} - -template -class probe_seq { - public: - probe_seq(size_t hash, size_t mask) { - assert(((mask + 1) & mask) == 0 && "not a mask"); - mask_ = mask; - offset_ = hash & mask_; - } - size_t offset() const { return offset_; } - size_t offset(size_t i) const { return (offset_ + i) & mask_; } - - void next() { - index_ += Width; - offset_ += index_; - offset_ &= mask_; - } - // 0-based probe index. The i-th probe in the probe sequence. - size_t index() const { return index_; } - - private: - size_t mask_; - size_t offset_; - size_t index_ = 0; -}; - -template -struct RequireUsableKey { - template - std::pair< - decltype(std::declval()(std::declval())), - decltype(std::declval()(std::declval(), - std::declval()))>* - operator()(const PassedKey&, const Args&...) const; -}; - -template -struct IsDecomposable : std::false_type {}; - -template -struct IsDecomposable< - absl::void_t(), - std::declval()...))>, - Policy, Hash, Eq, Ts...> : std::true_type {}; - -// TODO(alkis): Switch to std::is_nothrow_swappable when gcc/clang supports it. -template -constexpr bool IsNoThrowSwappable(std::true_type = {} /* is_swappable */) { - using std::swap; - return noexcept(swap(std::declval(), std::declval())); -} -template -constexpr bool IsNoThrowSwappable(std::false_type /* is_swappable */) { - return false; -} - -template -uint32_t TrailingZeros(T x) { - ABSL_INTERNAL_ASSUME(x != 0); - return countr_zero(x); -} - -// An abstraction over a bitmask. It provides an easy way to iterate through the -// indexes of the set bits of a bitmask. When Shift=0 (platforms with SSE), -// this is a true bitmask. On non-SSE, platforms the arithematic used to -// emulate the SSE behavior works in bytes (Shift=3) and leaves each bytes as -// either 0x00 or 0x80. -// -// For example: -// for (int i : BitMask(0x5)) -> yields 0, 2 -// for (int i : BitMask(0x0000000080800000)) -> yields 2, 3 -template -class BitMask { - static_assert(std::is_unsigned::value, ""); - static_assert(Shift == 0 || Shift == 3, ""); - - public: - // These are useful for unit tests (gunit). - using value_type = int; - using iterator = BitMask; - using const_iterator = BitMask; - - explicit BitMask(T mask) : mask_(mask) {} - BitMask& operator++() { - mask_ &= (mask_ - 1); - return *this; - } - explicit operator bool() const { return mask_ != 0; } - int operator*() const { return LowestBitSet(); } - uint32_t LowestBitSet() const { - return container_internal::TrailingZeros(mask_) >> Shift; - } - uint32_t HighestBitSet() const { - return static_cast((bit_width(mask_) - 1) >> Shift); - } - - BitMask begin() const { return *this; } - BitMask end() const { return BitMask(0); } - - uint32_t TrailingZeros() const { - return container_internal::TrailingZeros(mask_) >> Shift; - } - - uint32_t LeadingZeros() const { - constexpr int total_significant_bits = SignificantBits << Shift; - constexpr int extra_bits = sizeof(T) * 8 - total_significant_bits; - return countl_zero(mask_ << extra_bits) >> Shift; - } - - private: - friend bool operator==(const BitMask& a, const BitMask& b) { - return a.mask_ == b.mask_; - } - friend bool operator!=(const BitMask& a, const BitMask& b) { - return a.mask_ != b.mask_; - } - - T mask_; -}; - -using ctrl_t = signed char; -using h2_t = uint8_t; - -// The values here are selected for maximum performance. See the static asserts -// below for details. -enum Ctrl : ctrl_t { - kEmpty = -128, // 0b10000000 - kDeleted = -2, // 0b11111110 - kSentinel = -1, // 0b11111111 -}; -static_assert( - kEmpty & kDeleted & kSentinel & 0x80, - "Special markers need to have the MSB to make checking for them efficient"); -static_assert(kEmpty < kSentinel && kDeleted < kSentinel, - "kEmpty and kDeleted must be smaller than kSentinel to make the " - "SIMD test of IsEmptyOrDeleted() efficient"); -static_assert(kSentinel == -1, - "kSentinel must be -1 to elide loading it from memory into SIMD " - "registers (pcmpeqd xmm, xmm)"); -static_assert(kEmpty == -128, - "kEmpty must be -128 to make the SIMD check for its " - "existence efficient (psignb xmm, xmm)"); -static_assert(~kEmpty & ~kDeleted & kSentinel & 0x7F, - "kEmpty and kDeleted must share an unset bit that is not shared " - "by kSentinel to make the scalar test for MatchEmptyOrDeleted() " - "efficient"); -static_assert(kDeleted == -2, - "kDeleted must be -2 to make the implementation of " - "ConvertSpecialToEmptyAndFullToDeleted efficient"); - -// A single block of empty control bytes for tables without any slots allocated. -// This enables removing a branch in the hot path of find(). -inline ctrl_t* EmptyGroup() { - alignas(16) static constexpr ctrl_t empty_group[] = { - kSentinel, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, - kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty, kEmpty}; - return const_cast(empty_group); -} - -// Mixes a randomly generated per-process seed with `hash` and `ctrl` to -// randomize insertion order within groups. -bool ShouldInsertBackwards(size_t hash, ctrl_t* ctrl); - -// Returns a hash seed. -// -// The seed consists of the ctrl_ pointer, which adds enough entropy to ensure -// non-determinism of iteration order in most cases. -inline size_t HashSeed(const ctrl_t* ctrl) { - // The low bits of the pointer have little or no entropy because of - // alignment. We shift the pointer to try to use higher entropy bits. A - // good number seems to be 12 bits, because that aligns with page size. - return reinterpret_cast(ctrl) >> 12; -} - -inline size_t H1(size_t hash, const ctrl_t* ctrl) { - return (hash >> 7) ^ HashSeed(ctrl); -} -inline ctrl_t H2(size_t hash) { return hash & 0x7F; } - -inline bool IsEmpty(ctrl_t c) { return c == kEmpty; } -inline bool IsFull(ctrl_t c) { return c >= 0; } -inline bool IsDeleted(ctrl_t c) { return c == kDeleted; } -inline bool IsEmptyOrDeleted(ctrl_t c) { return c < kSentinel; } - -#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 - -// https://github.com/abseil/abseil-cpp/issues/209 -// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87853 -// _mm_cmpgt_epi8 is broken under GCC with -funsigned-char -// Work around this by using the portable implementation of Group -// when using -funsigned-char under GCC. -inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) { -#if defined(__GNUC__) && !defined(__clang__) - if (std::is_unsigned::value) { - const __m128i mask = _mm_set1_epi8(0x80); - const __m128i diff = _mm_subs_epi8(b, a); - return _mm_cmpeq_epi8(_mm_and_si128(diff, mask), mask); - } -#endif - return _mm_cmpgt_epi8(a, b); -} - -struct GroupSse2Impl { - static constexpr size_t kWidth = 16; // the number of slots per group - - explicit GroupSse2Impl(const ctrl_t* pos) { - ctrl = _mm_loadu_si128(reinterpret_cast(pos)); - } - - // Returns a bitmask representing the positions of slots that match hash. - BitMask Match(h2_t hash) const { - auto match = _mm_set1_epi8(hash); - return BitMask( - _mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))); - } - - // Returns a bitmask representing the positions of empty slots. - BitMask MatchEmpty() const { -#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 - // This only works because kEmpty is -128. - return BitMask( - _mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl))); -#else - return Match(static_cast(kEmpty)); -#endif - } - - // Returns a bitmask representing the positions of empty or deleted slots. - BitMask MatchEmptyOrDeleted() const { - auto special = _mm_set1_epi8(kSentinel); - return BitMask( - _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl))); - } - - // Returns the number of trailing empty or deleted elements in the group. - uint32_t CountLeadingEmptyOrDeleted() const { - auto special = _mm_set1_epi8(kSentinel); - return TrailingZeros(static_cast( - _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl)) + 1)); - } - - void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const { - auto msbs = _mm_set1_epi8(static_cast(-128)); - auto x126 = _mm_set1_epi8(126); -#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 - auto res = _mm_or_si128(_mm_shuffle_epi8(x126, ctrl), msbs); -#else - auto zero = _mm_setzero_si128(); - auto special_mask = _mm_cmpgt_epi8_fixed(zero, ctrl); - auto res = _mm_or_si128(msbs, _mm_andnot_si128(special_mask, x126)); -#endif - _mm_storeu_si128(reinterpret_cast<__m128i*>(dst), res); - } - - __m128i ctrl; -}; -#endif // ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 - -struct GroupPortableImpl { - static constexpr size_t kWidth = 8; - - explicit GroupPortableImpl(const ctrl_t* pos) - : ctrl(little_endian::Load64(pos)) {} - - BitMask Match(h2_t hash) const { - // For the technique, see: - // http://graphics.stanford.edu/~seander/bithacks.html##ValueInWord - // (Determine if a word has a byte equal to n). - // - // Caveat: there are false positives but: - // - they only occur if there is a real match - // - they never occur on kEmpty, kDeleted, kSentinel - // - they will be handled gracefully by subsequent checks in code - // - // Example: - // v = 0x1716151413121110 - // hash = 0x12 - // retval = (v - lsbs) & ~v & msbs = 0x0000000080800000 - constexpr uint64_t msbs = 0x8080808080808080ULL; - constexpr uint64_t lsbs = 0x0101010101010101ULL; - auto x = ctrl ^ (lsbs * hash); - return BitMask((x - lsbs) & ~x & msbs); - } - - BitMask MatchEmpty() const { - constexpr uint64_t msbs = 0x8080808080808080ULL; - return BitMask((ctrl & (~ctrl << 6)) & msbs); - } - - BitMask MatchEmptyOrDeleted() const { - constexpr uint64_t msbs = 0x8080808080808080ULL; - return BitMask((ctrl & (~ctrl << 7)) & msbs); - } - - uint32_t CountLeadingEmptyOrDeleted() const { - constexpr uint64_t gaps = 0x00FEFEFEFEFEFEFEULL; - return (TrailingZeros(((~ctrl & (ctrl >> 7)) | gaps) + 1) + 7) >> 3; - } - - void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const { - constexpr uint64_t msbs = 0x8080808080808080ULL; - constexpr uint64_t lsbs = 0x0101010101010101ULL; - auto x = ctrl & msbs; - auto res = (~x + (x >> 7)) & ~lsbs; - little_endian::Store64(dst, res); - } - - uint64_t ctrl; -}; - -#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 -using Group = GroupSse2Impl; -#else -using Group = GroupPortableImpl; -#endif - -template -class raw_hash_set; - -inline bool IsValidCapacity(size_t n) { return ((n + 1) & n) == 0 && n > 0; } - -// PRECONDITION: -// IsValidCapacity(capacity) -// ctrl[capacity] == kSentinel -// ctrl[i] != kSentinel for all i < capacity -// Applies mapping for every byte in ctrl: -// DELETED -> EMPTY -// EMPTY -> EMPTY -// FULL -> DELETED -void ConvertDeletedToEmptyAndFullToDeleted(ctrl_t* ctrl, size_t capacity); - -// Rounds up the capacity to the next power of 2 minus 1, with a minimum of 1. -inline size_t NormalizeCapacity(size_t n) { - return n ? ~size_t{} >> countl_zero(n) : 1; -} - -// General notes on capacity/growth methods below: -// - We use 7/8th as maximum load factor. For 16-wide groups, that gives an -// average of two empty slots per group. -// - For (capacity+1) >= Group::kWidth, growth is 7/8*capacity. -// - For (capacity+1) < Group::kWidth, growth == capacity. In this case, we -// never need to probe (the whole table fits in one group) so we don't need a -// load factor less than 1. - -// Given `capacity` of the table, returns the size (i.e. number of full slots) -// at which we should grow the capacity. -inline size_t CapacityToGrowth(size_t capacity) { - assert(IsValidCapacity(capacity)); - // `capacity*7/8` - if (Group::kWidth == 8 && capacity == 7) { - // x-x/8 does not work when x==7. - return 6; - } - return capacity - capacity / 8; -} -// From desired "growth" to a lowerbound of the necessary capacity. -// Might not be a valid one and requires NormalizeCapacity(). -inline size_t GrowthToLowerboundCapacity(size_t growth) { - // `growth*8/7` - if (Group::kWidth == 8 && growth == 7) { - // x+(x-1)/7 does not work when x==7. - return 8; - } - return growth + static_cast((static_cast(growth) - 1) / 7); -} - -inline void AssertIsFull(ctrl_t* ctrl) { - ABSL_HARDENING_ASSERT((ctrl != nullptr && IsFull(*ctrl)) && - "Invalid operation on iterator. The element might have " - "been erased, or the table might have rehashed."); -} - -inline void AssertIsValid(ctrl_t* ctrl) { - ABSL_HARDENING_ASSERT((ctrl == nullptr || IsFull(*ctrl)) && - "Invalid operation on iterator. The element might have " - "been erased, or the table might have rehashed."); -} - -struct FindInfo { - size_t offset; - size_t probe_length; -}; - -// The representation of the object has two modes: -// - small: For capacities < kWidth-1 -// - large: For the rest. -// -// Differences: -// - In small mode we are able to use the whole capacity. The extra control -// bytes give us at least one "empty" control byte to stop the iteration. -// This is important to make 1 a valid capacity. -// -// - In small mode only the first `capacity()` control bytes after the -// sentinel are valid. The rest contain dummy kEmpty values that do not -// represent a real slot. This is important to take into account on -// find_first_non_full(), where we never try ShouldInsertBackwards() for -// small tables. -inline bool is_small(size_t capacity) { return capacity < Group::kWidth - 1; } - -inline probe_seq probe(ctrl_t* ctrl, size_t hash, - size_t capacity) { - return probe_seq(H1(hash, ctrl), capacity); -} - -// Probes the raw_hash_set with the probe sequence for hash and returns the -// pointer to the first empty or deleted slot. -// NOTE: this function must work with tables having both kEmpty and kDelete -// in one group. Such tables appears during drop_deletes_without_resize. -// -// This function is very useful when insertions happen and: -// - the input is already a set -// - there are enough slots -// - the element with the hash is not in the table -inline FindInfo find_first_non_full(ctrl_t* ctrl, size_t hash, - size_t capacity) { - auto seq = probe(ctrl, hash, capacity); - while (true) { - Group g{ctrl + seq.offset()}; - auto mask = g.MatchEmptyOrDeleted(); - if (mask) { -#if !defined(NDEBUG) - // We want to add entropy even when ASLR is not enabled. - // In debug build we will randomly insert in either the front or back of - // the group. - // TODO(kfm,sbenza): revisit after we do unconditional mixing - if (!is_small(capacity) && ShouldInsertBackwards(hash, ctrl)) { - return {seq.offset(mask.HighestBitSet()), seq.index()}; - } -#endif - return {seq.offset(mask.LowestBitSet()), seq.index()}; - } - seq.next(); - assert(seq.index() < capacity && "full table!"); - } -} - -// Policy: a policy defines how to perform different operations on -// the slots of the hashtable (see hash_policy_traits.h for the full interface -// of policy). -// -// Hash: a (possibly polymorphic) functor that hashes keys of the hashtable. The -// functor should accept a key and return size_t as hash. For best performance -// it is important that the hash function provides high entropy across all bits -// of the hash. -// -// Eq: a (possibly polymorphic) functor that compares two keys for equality. It -// should accept two (of possibly different type) keys and return a bool: true -// if they are equal, false if they are not. If two keys compare equal, then -// their hash values as defined by Hash MUST be equal. -// -// Allocator: an Allocator -// [https://en.cppreference.com/w/cpp/named_req/Allocator] with which -// the storage of the hashtable will be allocated and the elements will be -// constructed and destroyed. -template -class raw_hash_set { - using PolicyTraits = hash_policy_traits; - using KeyArgImpl = - KeyArg::value && IsTransparent::value>; - - public: - using init_type = typename PolicyTraits::init_type; - using key_type = typename PolicyTraits::key_type; - // TODO(sbenza): Hide slot_type as it is an implementation detail. Needs user - // code fixes! - using slot_type = typename PolicyTraits::slot_type; - using allocator_type = Alloc; - using size_type = size_t; - using difference_type = ptrdiff_t; - using hasher = Hash; - using key_equal = Eq; - using policy_type = Policy; - using value_type = typename PolicyTraits::value_type; - using reference = value_type&; - using const_reference = const value_type&; - using pointer = typename absl::allocator_traits< - allocator_type>::template rebind_traits::pointer; - using const_pointer = typename absl::allocator_traits< - allocator_type>::template rebind_traits::const_pointer; - - // Alias used for heterogeneous lookup functions. - // `key_arg` evaluates to `K` when the functors are transparent and to - // `key_type` otherwise. It permits template argument deduction on `K` for the - // transparent case. - template - using key_arg = typename KeyArgImpl::template type; - - private: - // Give an early error when key_type is not hashable/eq. - auto KeyTypeCanBeHashed(const Hash& h, const key_type& k) -> decltype(h(k)); - auto KeyTypeCanBeEq(const Eq& eq, const key_type& k) -> decltype(eq(k, k)); - - using Layout = absl::container_internal::Layout; - - static Layout MakeLayout(size_t capacity) { - assert(IsValidCapacity(capacity)); - return Layout(capacity + Group::kWidth + 1, capacity); - } - - using AllocTraits = absl::allocator_traits; - using SlotAlloc = typename absl::allocator_traits< - allocator_type>::template rebind_alloc; - using SlotAllocTraits = typename absl::allocator_traits< - allocator_type>::template rebind_traits; - - static_assert(std::is_lvalue_reference::value, - "Policy::element() must return a reference"); - - template - struct SameAsElementReference - : std::is_same::type>::type, - typename std::remove_cv< - typename std::remove_reference::type>::type> {}; - - // An enabler for insert(T&&): T must be convertible to init_type or be the - // same as [cv] value_type [ref]. - // Note: we separate SameAsElementReference into its own type to avoid using - // reference unless we need to. MSVC doesn't seem to like it in some - // cases. - template - using RequiresInsertable = typename std::enable_if< - absl::disjunction, - SameAsElementReference>::value, - int>::type; - - // RequiresNotInit is a workaround for gcc prior to 7.1. - // See https://godbolt.org/g/Y4xsUh. - template - using RequiresNotInit = - typename std::enable_if::value, int>::type; - - template - using IsDecomposable = IsDecomposable; - - public: - static_assert(std::is_same::value, - "Allocators with custom pointer types are not supported"); - static_assert(std::is_same::value, - "Allocators with custom pointer types are not supported"); - - class iterator { - friend class raw_hash_set; - - public: - using iterator_category = std::forward_iterator_tag; - using value_type = typename raw_hash_set::value_type; - using reference = - absl::conditional_t; - using pointer = absl::remove_reference_t*; - using difference_type = typename raw_hash_set::difference_type; - - iterator() {} - - // PRECONDITION: not an end() iterator. - reference operator*() const { - AssertIsFull(ctrl_); - return PolicyTraits::element(slot_); - } - - // PRECONDITION: not an end() iterator. - pointer operator->() const { return &operator*(); } - - // PRECONDITION: not an end() iterator. - iterator& operator++() { - AssertIsFull(ctrl_); - ++ctrl_; - ++slot_; - skip_empty_or_deleted(); - return *this; - } - // PRECONDITION: not an end() iterator. - iterator operator++(int) { - auto tmp = *this; - ++*this; - return tmp; - } - - friend bool operator==(const iterator& a, const iterator& b) { - AssertIsValid(a.ctrl_); - AssertIsValid(b.ctrl_); - return a.ctrl_ == b.ctrl_; - } - friend bool operator!=(const iterator& a, const iterator& b) { - return !(a == b); - } - - private: - iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) { - // This assumption helps the compiler know that any non-end iterator is - // not equal to any end iterator. - ABSL_INTERNAL_ASSUME(ctrl != nullptr); - } - - void skip_empty_or_deleted() { - while (IsEmptyOrDeleted(*ctrl_)) { - uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted(); - ctrl_ += shift; - slot_ += shift; - } - if (ABSL_PREDICT_FALSE(*ctrl_ == kSentinel)) ctrl_ = nullptr; - } - - ctrl_t* ctrl_ = nullptr; - // To avoid uninitialized member warnings, put slot_ in an anonymous union. - // The member is not initialized on singleton and end iterators. - union { - slot_type* slot_; - }; - }; - - class const_iterator { - friend class raw_hash_set; - - public: - using iterator_category = typename iterator::iterator_category; - using value_type = typename raw_hash_set::value_type; - using reference = typename raw_hash_set::const_reference; - using pointer = typename raw_hash_set::const_pointer; - using difference_type = typename raw_hash_set::difference_type; - - const_iterator() {} - // Implicit construction from iterator. - const_iterator(iterator i) : inner_(std::move(i)) {} - - reference operator*() const { return *inner_; } - pointer operator->() const { return inner_.operator->(); } - - const_iterator& operator++() { - ++inner_; - return *this; - } - const_iterator operator++(int) { return inner_++; } - - friend bool operator==(const const_iterator& a, const const_iterator& b) { - return a.inner_ == b.inner_; - } - friend bool operator!=(const const_iterator& a, const const_iterator& b) { - return !(a == b); - } - - private: - const_iterator(const ctrl_t* ctrl, const slot_type* slot) - : inner_(const_cast(ctrl), const_cast(slot)) {} - - iterator inner_; - }; - - using node_type = node_handle, Alloc>; - using insert_return_type = InsertReturnType; - - raw_hash_set() noexcept( - std::is_nothrow_default_constructible::value&& - std::is_nothrow_default_constructible::value&& - std::is_nothrow_default_constructible::value) {} - - explicit raw_hash_set(size_t bucket_count, const hasher& hash = hasher(), - const key_equal& eq = key_equal(), - const allocator_type& alloc = allocator_type()) - : ctrl_(EmptyGroup()), settings_(0, hash, eq, alloc) { - if (bucket_count) { - capacity_ = NormalizeCapacity(bucket_count); - initialize_slots(); - } - } - - raw_hash_set(size_t bucket_count, const hasher& hash, - const allocator_type& alloc) - : raw_hash_set(bucket_count, hash, key_equal(), alloc) {} - - raw_hash_set(size_t bucket_count, const allocator_type& alloc) - : raw_hash_set(bucket_count, hasher(), key_equal(), alloc) {} - - explicit raw_hash_set(const allocator_type& alloc) - : raw_hash_set(0, hasher(), key_equal(), alloc) {} - - template - raw_hash_set(InputIter first, InputIter last, size_t bucket_count = 0, - const hasher& hash = hasher(), const key_equal& eq = key_equal(), - const allocator_type& alloc = allocator_type()) - : raw_hash_set(bucket_count, hash, eq, alloc) { - insert(first, last); - } - - template - raw_hash_set(InputIter first, InputIter last, size_t bucket_count, - const hasher& hash, const allocator_type& alloc) - : raw_hash_set(first, last, bucket_count, hash, key_equal(), alloc) {} - - template - raw_hash_set(InputIter first, InputIter last, size_t bucket_count, - const allocator_type& alloc) - : raw_hash_set(first, last, bucket_count, hasher(), key_equal(), alloc) {} - - template - raw_hash_set(InputIter first, InputIter last, const allocator_type& alloc) - : raw_hash_set(first, last, 0, hasher(), key_equal(), alloc) {} - - // Instead of accepting std::initializer_list as the first - // argument like std::unordered_set does, we have two overloads - // that accept std::initializer_list and std::initializer_list. - // This is advantageous for performance. - // - // // Turns {"abc", "def"} into std::initializer_list, then - // // copies the strings into the set. - // std::unordered_set s = {"abc", "def"}; - // - // // Turns {"abc", "def"} into std::initializer_list, then - // // copies the strings into the set. - // absl::flat_hash_set s = {"abc", "def"}; - // - // The same trick is used in insert(). - // - // The enabler is necessary to prevent this constructor from triggering where - // the copy constructor is meant to be called. - // - // absl::flat_hash_set a, b{a}; - // - // RequiresNotInit is a workaround for gcc prior to 7.1. - template = 0, RequiresInsertable = 0> - raw_hash_set(std::initializer_list init, size_t bucket_count = 0, - const hasher& hash = hasher(), const key_equal& eq = key_equal(), - const allocator_type& alloc = allocator_type()) - : raw_hash_set(init.begin(), init.end(), bucket_count, hash, eq, alloc) {} - - raw_hash_set(std::initializer_list init, size_t bucket_count = 0, - const hasher& hash = hasher(), const key_equal& eq = key_equal(), - const allocator_type& alloc = allocator_type()) - : raw_hash_set(init.begin(), init.end(), bucket_count, hash, eq, alloc) {} - - template = 0, RequiresInsertable = 0> - raw_hash_set(std::initializer_list init, size_t bucket_count, - const hasher& hash, const allocator_type& alloc) - : raw_hash_set(init, bucket_count, hash, key_equal(), alloc) {} - - raw_hash_set(std::initializer_list init, size_t bucket_count, - const hasher& hash, const allocator_type& alloc) - : raw_hash_set(init, bucket_count, hash, key_equal(), alloc) {} - - template = 0, RequiresInsertable = 0> - raw_hash_set(std::initializer_list init, size_t bucket_count, - const allocator_type& alloc) - : raw_hash_set(init, bucket_count, hasher(), key_equal(), alloc) {} - - raw_hash_set(std::initializer_list init, size_t bucket_count, - const allocator_type& alloc) - : raw_hash_set(init, bucket_count, hasher(), key_equal(), alloc) {} - - template = 0, RequiresInsertable = 0> - raw_hash_set(std::initializer_list init, const allocator_type& alloc) - : raw_hash_set(init, 0, hasher(), key_equal(), alloc) {} - - raw_hash_set(std::initializer_list init, - const allocator_type& alloc) - : raw_hash_set(init, 0, hasher(), key_equal(), alloc) {} - - raw_hash_set(const raw_hash_set& that) - : raw_hash_set(that, AllocTraits::select_on_container_copy_construction( - that.alloc_ref())) {} - - raw_hash_set(const raw_hash_set& that, const allocator_type& a) - : raw_hash_set(0, that.hash_ref(), that.eq_ref(), a) { - reserve(that.size()); - // Because the table is guaranteed to be empty, we can do something faster - // than a full `insert`. - for (const auto& v : that) { - const size_t hash = PolicyTraits::apply(HashElement{hash_ref()}, v); - auto target = find_first_non_full(ctrl_, hash, capacity_); - set_ctrl(target.offset, H2(hash)); - emplace_at(target.offset, v); - infoz_.RecordInsert(hash, target.probe_length); - } - size_ = that.size(); - growth_left() -= that.size(); - } - - raw_hash_set(raw_hash_set&& that) noexcept( - std::is_nothrow_copy_constructible::value&& - std::is_nothrow_copy_constructible::value&& - std::is_nothrow_copy_constructible::value) - : ctrl_(absl::exchange(that.ctrl_, EmptyGroup())), - slots_(absl::exchange(that.slots_, nullptr)), - size_(absl::exchange(that.size_, 0)), - capacity_(absl::exchange(that.capacity_, 0)), - infoz_(absl::exchange(that.infoz_, HashtablezInfoHandle())), - // Hash, equality and allocator are copied instead of moved because - // `that` must be left valid. If Hash is std::function, moving it - // would create a nullptr functor that cannot be called. - settings_(that.settings_) { - // growth_left was copied above, reset the one from `that`. - that.growth_left() = 0; - } - - raw_hash_set(raw_hash_set&& that, const allocator_type& a) - : ctrl_(EmptyGroup()), - slots_(nullptr), - size_(0), - capacity_(0), - settings_(0, that.hash_ref(), that.eq_ref(), a) { - if (a == that.alloc_ref()) { - std::swap(ctrl_, that.ctrl_); - std::swap(slots_, that.slots_); - std::swap(size_, that.size_); - std::swap(capacity_, that.capacity_); - std::swap(growth_left(), that.growth_left()); - std::swap(infoz_, that.infoz_); - } else { - reserve(that.size()); - // Note: this will copy elements of dense_set and unordered_set instead of - // moving them. This can be fixed if it ever becomes an issue. - for (auto& elem : that) insert(std::move(elem)); - } - } - - raw_hash_set& operator=(const raw_hash_set& that) { - raw_hash_set tmp(that, - AllocTraits::propagate_on_container_copy_assignment::value - ? that.alloc_ref() - : alloc_ref()); - swap(tmp); - return *this; - } - - raw_hash_set& operator=(raw_hash_set&& that) noexcept( - absl::allocator_traits::is_always_equal::value&& - std::is_nothrow_move_assignable::value&& - std::is_nothrow_move_assignable::value) { - // TODO(sbenza): We should only use the operations from the noexcept clause - // to make sure we actually adhere to that contract. - return move_assign( - std::move(that), - typename AllocTraits::propagate_on_container_move_assignment()); - } - - ~raw_hash_set() { destroy_slots(); } - - iterator begin() { - auto it = iterator_at(0); - it.skip_empty_or_deleted(); - return it; - } - iterator end() { return {}; } - - const_iterator begin() const { - return const_cast(this)->begin(); - } - const_iterator end() const { return {}; } - const_iterator cbegin() const { return begin(); } - const_iterator cend() const { return end(); } - - bool empty() const { return !size(); } - size_t size() const { return size_; } - size_t capacity() const { return capacity_; } - size_t max_size() const { return (std::numeric_limits::max)(); } - - ABSL_ATTRIBUTE_REINITIALIZES void clear() { - // Iterating over this container is O(bucket_count()). When bucket_count() - // is much greater than size(), iteration becomes prohibitively expensive. - // For clear() it is more important to reuse the allocated array when the - // container is small because allocation takes comparatively long time - // compared to destruction of the elements of the container. So we pick the - // largest bucket_count() threshold for which iteration is still fast and - // past that we simply deallocate the array. - if (capacity_ > 127) { - destroy_slots(); - } else if (capacity_) { - for (size_t i = 0; i != capacity_; ++i) { - if (IsFull(ctrl_[i])) { - PolicyTraits::destroy(&alloc_ref(), slots_ + i); - } - } - size_ = 0; - reset_ctrl(); - reset_growth_left(); - } - assert(empty()); - infoz_.RecordStorageChanged(0, capacity_); - } - - // This overload kicks in when the argument is an rvalue of insertable and - // decomposable type other than init_type. - // - // flat_hash_map m; - // m.insert(std::make_pair("abc", 42)); - // TODO(cheshire): A type alias T2 is introduced as a workaround for the nvcc - // bug. - template = 0, - class T2 = T, - typename std::enable_if::value, int>::type = 0, - T* = nullptr> - std::pair insert(T&& value) { - return emplace(std::forward(value)); - } - - // This overload kicks in when the argument is a bitfield or an lvalue of - // insertable and decomposable type. - // - // union { int n : 1; }; - // flat_hash_set s; - // s.insert(n); - // - // flat_hash_set s; - // const char* p = "hello"; - // s.insert(p); - // - // TODO(romanp): Once we stop supporting gcc 5.1 and below, replace - // RequiresInsertable with RequiresInsertable. - // We are hitting this bug: https://godbolt.org/g/1Vht4f. - template < - class T, RequiresInsertable = 0, - typename std::enable_if::value, int>::type = 0> - std::pair insert(const T& value) { - return emplace(value); - } - - // This overload kicks in when the argument is an rvalue of init_type. Its - // purpose is to handle brace-init-list arguments. - // - // flat_hash_map s; - // s.insert({"abc", 42}); - std::pair insert(init_type&& value) { - return emplace(std::move(value)); - } - - // TODO(cheshire): A type alias T2 is introduced as a workaround for the nvcc - // bug. - template = 0, class T2 = T, - typename std::enable_if::value, int>::type = 0, - T* = nullptr> - iterator insert(const_iterator, T&& value) { - return insert(std::forward(value)).first; - } - - // TODO(romanp): Once we stop supporting gcc 5.1 and below, replace - // RequiresInsertable with RequiresInsertable. - // We are hitting this bug: https://godbolt.org/g/1Vht4f. - template < - class T, RequiresInsertable = 0, - typename std::enable_if::value, int>::type = 0> - iterator insert(const_iterator, const T& value) { - return insert(value).first; - } - - iterator insert(const_iterator, init_type&& value) { - return insert(std::move(value)).first; - } - - template - void insert(InputIt first, InputIt last) { - for (; first != last; ++first) emplace(*first); - } - - template = 0, RequiresInsertable = 0> - void insert(std::initializer_list ilist) { - insert(ilist.begin(), ilist.end()); - } - - void insert(std::initializer_list ilist) { - insert(ilist.begin(), ilist.end()); - } - - insert_return_type insert(node_type&& node) { - if (!node) return {end(), false, node_type()}; - const auto& elem = PolicyTraits::element(CommonAccess::GetSlot(node)); - auto res = PolicyTraits::apply( - InsertSlot{*this, std::move(*CommonAccess::GetSlot(node))}, - elem); - if (res.second) { - CommonAccess::Reset(&node); - return {res.first, true, node_type()}; - } else { - return {res.first, false, std::move(node)}; - } - } - - iterator insert(const_iterator, node_type&& node) { - auto res = insert(std::move(node)); - node = std::move(res.node); - return res.position; - } - - // This overload kicks in if we can deduce the key from args. This enables us - // to avoid constructing value_type if an entry with the same key already - // exists. - // - // For example: - // - // flat_hash_map m = {{"abc", "def"}}; - // // Creates no std::string copies and makes no heap allocations. - // m.emplace("abc", "xyz"); - template ::value, int>::type = 0> - std::pair emplace(Args&&... args) { - return PolicyTraits::apply(EmplaceDecomposable{*this}, - std::forward(args)...); - } - - // This overload kicks in if we cannot deduce the key from args. It constructs - // value_type unconditionally and then either moves it into the table or - // destroys. - template ::value, int>::type = 0> - std::pair emplace(Args&&... args) { - alignas(slot_type) unsigned char raw[sizeof(slot_type)]; - slot_type* slot = reinterpret_cast(&raw); - - PolicyTraits::construct(&alloc_ref(), slot, std::forward(args)...); - const auto& elem = PolicyTraits::element(slot); - return PolicyTraits::apply(InsertSlot{*this, std::move(*slot)}, elem); - } - - template - iterator emplace_hint(const_iterator, Args&&... args) { - return emplace(std::forward(args)...).first; - } - - // Extension API: support for lazy emplace. - // - // Looks up key in the table. If found, returns the iterator to the element. - // Otherwise calls `f` with one argument of type `raw_hash_set::constructor`. - // - // `f` must abide by several restrictions: - // - it MUST call `raw_hash_set::constructor` with arguments as if a - // `raw_hash_set::value_type` is constructed, - // - it MUST NOT access the container before the call to - // `raw_hash_set::constructor`, and - // - it MUST NOT erase the lazily emplaced element. - // Doing any of these is undefined behavior. - // - // For example: - // - // std::unordered_set s; - // // Makes ArenaStr even if "abc" is in the map. - // s.insert(ArenaString(&arena, "abc")); - // - // flat_hash_set s; - // // Makes ArenaStr only if "abc" is not in the map. - // s.lazy_emplace("abc", [&](const constructor& ctor) { - // ctor(&arena, "abc"); - // }); - // - // WARNING: This API is currently experimental. If there is a way to implement - // the same thing with the rest of the API, prefer that. - class constructor { - friend class raw_hash_set; - - public: - template - void operator()(Args&&... args) const { - assert(*slot_); - PolicyTraits::construct(alloc_, *slot_, std::forward(args)...); - *slot_ = nullptr; - } - - private: - constructor(allocator_type* a, slot_type** slot) : alloc_(a), slot_(slot) {} - - allocator_type* alloc_; - slot_type** slot_; - }; - - template - iterator lazy_emplace(const key_arg& key, F&& f) { - auto res = find_or_prepare_insert(key); - if (res.second) { - slot_type* slot = slots_ + res.first; - std::forward(f)(constructor(&alloc_ref(), &slot)); - assert(!slot); - } - return iterator_at(res.first); - } - - // Extension API: support for heterogeneous keys. - // - // std::unordered_set s; - // // Turns "abc" into std::string. - // s.erase("abc"); - // - // flat_hash_set s; - // // Uses "abc" directly without copying it into std::string. - // s.erase("abc"); - template - size_type erase(const key_arg& key) { - auto it = find(key); - if (it == end()) return 0; - erase(it); - return 1; - } - - // Erases the element pointed to by `it`. Unlike `std::unordered_set::erase`, - // this method returns void to reduce algorithmic complexity to O(1). The - // iterator is invalidated, so any increment should be done before calling - // erase. In order to erase while iterating across a map, use the following - // idiom (which also works for standard containers): - // - // for (auto it = m.begin(), end = m.end(); it != end;) { - // // `erase()` will invalidate `it`, so advance `it` first. - // auto copy_it = it++; - // if () { - // m.erase(copy_it); - // } - // } - void erase(const_iterator cit) { erase(cit.inner_); } - - // This overload is necessary because otherwise erase(const K&) would be - // a better match if non-const iterator is passed as an argument. - void erase(iterator it) { - AssertIsFull(it.ctrl_); - PolicyTraits::destroy(&alloc_ref(), it.slot_); - erase_meta_only(it); - } - - iterator erase(const_iterator first, const_iterator last) { - while (first != last) { - erase(first++); - } - return last.inner_; - } - - // Moves elements from `src` into `this`. - // If the element already exists in `this`, it is left unmodified in `src`. - template - void merge(raw_hash_set& src) { // NOLINT - assert(this != &src); - for (auto it = src.begin(), e = src.end(); it != e;) { - auto next = std::next(it); - if (PolicyTraits::apply(InsertSlot{*this, std::move(*it.slot_)}, - PolicyTraits::element(it.slot_)) - .second) { - src.erase_meta_only(it); - } - it = next; - } - } - - template - void merge(raw_hash_set&& src) { - merge(src); - } - - node_type extract(const_iterator position) { - AssertIsFull(position.inner_.ctrl_); - auto node = - CommonAccess::Transfer(alloc_ref(), position.inner_.slot_); - erase_meta_only(position); - return node; - } - - template < - class K = key_type, - typename std::enable_if::value, int>::type = 0> - node_type extract(const key_arg& key) { - auto it = find(key); - return it == end() ? node_type() : extract(const_iterator{it}); - } - - void swap(raw_hash_set& that) noexcept( - IsNoThrowSwappable() && IsNoThrowSwappable() && - IsNoThrowSwappable( - typename AllocTraits::propagate_on_container_swap{})) { - using std::swap; - swap(ctrl_, that.ctrl_); - swap(slots_, that.slots_); - swap(size_, that.size_); - swap(capacity_, that.capacity_); - swap(growth_left(), that.growth_left()); - swap(hash_ref(), that.hash_ref()); - swap(eq_ref(), that.eq_ref()); - swap(infoz_, that.infoz_); - SwapAlloc(alloc_ref(), that.alloc_ref(), - typename AllocTraits::propagate_on_container_swap{}); - } - - void rehash(size_t n) { - if (n == 0 && capacity_ == 0) return; - if (n == 0 && size_ == 0) { - destroy_slots(); - infoz_.RecordStorageChanged(0, 0); - return; - } - // bitor is a faster way of doing `max` here. We will round up to the next - // power-of-2-minus-1, so bitor is good enough. - auto m = NormalizeCapacity(n | GrowthToLowerboundCapacity(size())); - // n == 0 unconditionally rehashes as per the standard. - if (n == 0 || m > capacity_) { - resize(m); - } - } - - void reserve(size_t n) { - size_t m = GrowthToLowerboundCapacity(n); - if (m > capacity_) { - resize(NormalizeCapacity(m)); - } - } - - // Extension API: support for heterogeneous keys. - // - // std::unordered_set s; - // // Turns "abc" into std::string. - // s.count("abc"); - // - // ch_set s; - // // Uses "abc" directly without copying it into std::string. - // s.count("abc"); - template - size_t count(const key_arg& key) const { - return find(key) == end() ? 0 : 1; - } - - // Issues CPU prefetch instructions for the memory needed to find or insert - // a key. Like all lookup functions, this support heterogeneous keys. - // - // NOTE: This is a very low level operation and should not be used without - // specific benchmarks indicating its importance. - template - void prefetch(const key_arg& key) const { - (void)key; -#if defined(__GNUC__) - auto seq = probe(ctrl_, hash_ref()(key), capacity_); - __builtin_prefetch(static_cast(ctrl_ + seq.offset())); - __builtin_prefetch(static_cast(slots_ + seq.offset())); -#endif // __GNUC__ - } - - // The API of find() has two extensions. - // - // 1. The hash can be passed by the user. It must be equal to the hash of the - // key. - // - // 2. The type of the key argument doesn't have to be key_type. This is so - // called heterogeneous key support. - template - iterator find(const key_arg& key, size_t hash) { - auto seq = probe(ctrl_, hash, capacity_); - while (true) { - Group g{ctrl_ + seq.offset()}; - for (int i : g.Match(H2(hash))) { - if (ABSL_PREDICT_TRUE(PolicyTraits::apply( - EqualElement{key, eq_ref()}, - PolicyTraits::element(slots_ + seq.offset(i))))) - return iterator_at(seq.offset(i)); - } - if (ABSL_PREDICT_TRUE(g.MatchEmpty())) return end(); - seq.next(); - assert(seq.index() < capacity_ && "full table!"); - } - } - template - iterator find(const key_arg& key) { - return find(key, hash_ref()(key)); - } - - template - const_iterator find(const key_arg& key, size_t hash) const { - return const_cast(this)->find(key, hash); - } - template - const_iterator find(const key_arg& key) const { - return find(key, hash_ref()(key)); - } - - template - bool contains(const key_arg& key) const { - return find(key) != end(); - } - - template - std::pair equal_range(const key_arg& key) { - auto it = find(key); - if (it != end()) return {it, std::next(it)}; - return {it, it}; - } - template - std::pair equal_range( - const key_arg& key) const { - auto it = find(key); - if (it != end()) return {it, std::next(it)}; - return {it, it}; - } - - size_t bucket_count() const { return capacity_; } - float load_factor() const { - return capacity_ ? static_cast(size()) / capacity_ : 0.0; - } - float max_load_factor() const { return 1.0f; } - void max_load_factor(float) { - // Does nothing. - } - - hasher hash_function() const { return hash_ref(); } - key_equal key_eq() const { return eq_ref(); } - allocator_type get_allocator() const { return alloc_ref(); } - - friend bool operator==(const raw_hash_set& a, const raw_hash_set& b) { - if (a.size() != b.size()) return false; - const raw_hash_set* outer = &a; - const raw_hash_set* inner = &b; - if (outer->capacity() > inner->capacity()) std::swap(outer, inner); - for (const value_type& elem : *outer) - if (!inner->has_element(elem)) return false; - return true; - } - - friend bool operator!=(const raw_hash_set& a, const raw_hash_set& b) { - return !(a == b); - } - - friend void swap(raw_hash_set& a, - raw_hash_set& b) noexcept(noexcept(a.swap(b))) { - a.swap(b); - } - - private: - template - friend struct absl::container_internal::hashtable_debug_internal:: - HashtableDebugAccess; - - struct FindElement { - template - const_iterator operator()(const K& key, Args&&...) const { - return s.find(key); - } - const raw_hash_set& s; - }; - - struct HashElement { - template - size_t operator()(const K& key, Args&&...) const { - return h(key); - } - const hasher& h; - }; - - template - struct EqualElement { - template - bool operator()(const K2& lhs, Args&&...) const { - return eq(lhs, rhs); - } - const K1& rhs; - const key_equal& eq; - }; - - struct EmplaceDecomposable { - template - std::pair operator()(const K& key, Args&&... args) const { - auto res = s.find_or_prepare_insert(key); - if (res.second) { - s.emplace_at(res.first, std::forward(args)...); - } - return {s.iterator_at(res.first), res.second}; - } - raw_hash_set& s; - }; - - template - struct InsertSlot { - template - std::pair operator()(const K& key, Args&&...) && { - auto res = s.find_or_prepare_insert(key); - if (res.second) { - PolicyTraits::transfer(&s.alloc_ref(), s.slots_ + res.first, &slot); - } else if (do_destroy) { - PolicyTraits::destroy(&s.alloc_ref(), &slot); - } - return {s.iterator_at(res.first), res.second}; - } - raw_hash_set& s; - // Constructed slot. Either moved into place or destroyed. - slot_type&& slot; - }; - - // "erases" the object from the container, except that it doesn't actually - // destroy the object. It only updates all the metadata of the class. - // This can be used in conjunction with Policy::transfer to move the object to - // another place. - void erase_meta_only(const_iterator it) { - assert(IsFull(*it.inner_.ctrl_) && "erasing a dangling iterator"); - --size_; - const size_t index = it.inner_.ctrl_ - ctrl_; - const size_t index_before = (index - Group::kWidth) & capacity_; - const auto empty_after = Group(it.inner_.ctrl_).MatchEmpty(); - const auto empty_before = Group(ctrl_ + index_before).MatchEmpty(); - - // We count how many consecutive non empties we have to the right and to the - // left of `it`. If the sum is >= kWidth then there is at least one probe - // window that might have seen a full group. - bool was_never_full = - empty_before && empty_after && - static_cast(empty_after.TrailingZeros() + - empty_before.LeadingZeros()) < Group::kWidth; - - set_ctrl(index, was_never_full ? kEmpty : kDeleted); - growth_left() += was_never_full; - infoz_.RecordErase(); - } - - void initialize_slots() { - assert(capacity_); - // Folks with custom allocators often make unwarranted assumptions about the - // behavior of their classes vis-a-vis trivial destructability and what - // calls they will or wont make. Avoid sampling for people with custom - // allocators to get us out of this mess. This is not a hard guarantee but - // a workaround while we plan the exact guarantee we want to provide. - // - // People are often sloppy with the exact type of their allocator (sometimes - // it has an extra const or is missing the pair, but rebinds made it work - // anyway). To avoid the ambiguity, we work off SlotAlloc which we have - // bound more carefully. - if (std::is_same>::value && - slots_ == nullptr) { - infoz_ = Sample(); - } - - auto layout = MakeLayout(capacity_); - char* mem = static_cast( - Allocate(&alloc_ref(), layout.AllocSize())); - ctrl_ = reinterpret_cast(layout.template Pointer<0>(mem)); - slots_ = layout.template Pointer<1>(mem); - reset_ctrl(); - reset_growth_left(); - infoz_.RecordStorageChanged(size_, capacity_); - } - - void destroy_slots() { - if (!capacity_) return; - for (size_t i = 0; i != capacity_; ++i) { - if (IsFull(ctrl_[i])) { - PolicyTraits::destroy(&alloc_ref(), slots_ + i); - } - } - auto layout = MakeLayout(capacity_); - // Unpoison before returning the memory to the allocator. - SanitizerUnpoisonMemoryRegion(slots_, sizeof(slot_type) * capacity_); - Deallocate(&alloc_ref(), ctrl_, layout.AllocSize()); - ctrl_ = EmptyGroup(); - slots_ = nullptr; - size_ = 0; - capacity_ = 0; - growth_left() = 0; - } - - void resize(size_t new_capacity) { - assert(IsValidCapacity(new_capacity)); - auto* old_ctrl = ctrl_; - auto* old_slots = slots_; - const size_t old_capacity = capacity_; - capacity_ = new_capacity; - initialize_slots(); - - size_t total_probe_length = 0; - for (size_t i = 0; i != old_capacity; ++i) { - if (IsFull(old_ctrl[i])) { - size_t hash = PolicyTraits::apply(HashElement{hash_ref()}, - PolicyTraits::element(old_slots + i)); - auto target = find_first_non_full(ctrl_, hash, capacity_); - size_t new_i = target.offset; - total_probe_length += target.probe_length; - set_ctrl(new_i, H2(hash)); - PolicyTraits::transfer(&alloc_ref(), slots_ + new_i, old_slots + i); - } - } - if (old_capacity) { - SanitizerUnpoisonMemoryRegion(old_slots, - sizeof(slot_type) * old_capacity); - auto layout = MakeLayout(old_capacity); - Deallocate(&alloc_ref(), old_ctrl, - layout.AllocSize()); - } - infoz_.RecordRehash(total_probe_length); - } - - void drop_deletes_without_resize() ABSL_ATTRIBUTE_NOINLINE { - assert(IsValidCapacity(capacity_)); - assert(!is_small(capacity_)); - // Algorithm: - // - mark all DELETED slots as EMPTY - // - mark all FULL slots as DELETED - // - for each slot marked as DELETED - // hash = Hash(element) - // target = find_first_non_full(hash) - // if target is in the same group - // mark slot as FULL - // else if target is EMPTY - // transfer element to target - // mark slot as EMPTY - // mark target as FULL - // else if target is DELETED - // swap current element with target element - // mark target as FULL - // repeat procedure for current slot with moved from element (target) - ConvertDeletedToEmptyAndFullToDeleted(ctrl_, capacity_); - alignas(slot_type) unsigned char raw[sizeof(slot_type)]; - size_t total_probe_length = 0; - slot_type* slot = reinterpret_cast(&raw); - for (size_t i = 0; i != capacity_; ++i) { - if (!IsDeleted(ctrl_[i])) continue; - size_t hash = PolicyTraits::apply(HashElement{hash_ref()}, - PolicyTraits::element(slots_ + i)); - auto target = find_first_non_full(ctrl_, hash, capacity_); - size_t new_i = target.offset; - total_probe_length += target.probe_length; - - // Verify if the old and new i fall within the same group wrt the hash. - // If they do, we don't need to move the object as it falls already in the - // best probe we can. - const auto probe_index = [&](size_t pos) { - return ((pos - probe(ctrl_, hash, capacity_).offset()) & capacity_) / - Group::kWidth; - }; - - // Element doesn't move. - if (ABSL_PREDICT_TRUE(probe_index(new_i) == probe_index(i))) { - set_ctrl(i, H2(hash)); - continue; - } - if (IsEmpty(ctrl_[new_i])) { - // Transfer element to the empty spot. - // set_ctrl poisons/unpoisons the slots so we have to call it at the - // right time. - set_ctrl(new_i, H2(hash)); - PolicyTraits::transfer(&alloc_ref(), slots_ + new_i, slots_ + i); - set_ctrl(i, kEmpty); - } else { - assert(IsDeleted(ctrl_[new_i])); - set_ctrl(new_i, H2(hash)); - // Until we are done rehashing, DELETED marks previously FULL slots. - // Swap i and new_i elements. - PolicyTraits::transfer(&alloc_ref(), slot, slots_ + i); - PolicyTraits::transfer(&alloc_ref(), slots_ + i, slots_ + new_i); - PolicyTraits::transfer(&alloc_ref(), slots_ + new_i, slot); - --i; // repeat - } - } - reset_growth_left(); - infoz_.RecordRehash(total_probe_length); - } - - void rehash_and_grow_if_necessary() { - if (capacity_ == 0) { - resize(1); - } else if (size() <= CapacityToGrowth(capacity()) / 2) { - // Squash DELETED without growing if there is enough capacity. - drop_deletes_without_resize(); - } else { - // Otherwise grow the container. - resize(capacity_ * 2 + 1); - } - } - - bool has_element(const value_type& elem) const { - size_t hash = PolicyTraits::apply(HashElement{hash_ref()}, elem); - auto seq = probe(ctrl_, hash, capacity_); - while (true) { - Group g{ctrl_ + seq.offset()}; - for (int i : g.Match(H2(hash))) { - if (ABSL_PREDICT_TRUE(PolicyTraits::element(slots_ + seq.offset(i)) == - elem)) - return true; - } - if (ABSL_PREDICT_TRUE(g.MatchEmpty())) return false; - seq.next(); - assert(seq.index() < capacity_ && "full table!"); - } - return false; - } - - // TODO(alkis): Optimize this assuming *this and that don't overlap. - raw_hash_set& move_assign(raw_hash_set&& that, std::true_type) { - raw_hash_set tmp(std::move(that)); - swap(tmp); - return *this; - } - raw_hash_set& move_assign(raw_hash_set&& that, std::false_type) { - raw_hash_set tmp(std::move(that), alloc_ref()); - swap(tmp); - return *this; - } - - protected: - template - std::pair find_or_prepare_insert(const K& key) { - auto hash = hash_ref()(key); - auto seq = probe(ctrl_, hash, capacity_); - while (true) { - Group g{ctrl_ + seq.offset()}; - for (int i : g.Match(H2(hash))) { - if (ABSL_PREDICT_TRUE(PolicyTraits::apply( - EqualElement{key, eq_ref()}, - PolicyTraits::element(slots_ + seq.offset(i))))) - return {seq.offset(i), false}; - } - if (ABSL_PREDICT_TRUE(g.MatchEmpty())) break; - seq.next(); - assert(seq.index() < capacity_ && "full table!"); - } - return {prepare_insert(hash), true}; - } - - size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE { - auto target = find_first_non_full(ctrl_, hash, capacity_); - if (ABSL_PREDICT_FALSE(growth_left() == 0 && - !IsDeleted(ctrl_[target.offset]))) { - rehash_and_grow_if_necessary(); - target = find_first_non_full(ctrl_, hash, capacity_); - } - ++size_; - growth_left() -= IsEmpty(ctrl_[target.offset]); - set_ctrl(target.offset, H2(hash)); - infoz_.RecordInsert(hash, target.probe_length); - return target.offset; - } - - // Constructs the value in the space pointed by the iterator. This only works - // after an unsuccessful find_or_prepare_insert() and before any other - // modifications happen in the raw_hash_set. - // - // PRECONDITION: i is an index returned from find_or_prepare_insert(k), where - // k is the key decomposed from `forward(args)...`, and the bool - // returned by find_or_prepare_insert(k) was true. - // POSTCONDITION: *m.iterator_at(i) == value_type(forward(args)...). - template - void emplace_at(size_t i, Args&&... args) { - PolicyTraits::construct(&alloc_ref(), slots_ + i, - std::forward(args)...); - - assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) == - iterator_at(i) && - "constructed value does not match the lookup key"); - } - - iterator iterator_at(size_t i) { return {ctrl_ + i, slots_ + i}; } - const_iterator iterator_at(size_t i) const { return {ctrl_ + i, slots_ + i}; } - - private: - friend struct RawHashSetTestOnlyAccess; - - // Reset all ctrl bytes back to kEmpty, except the sentinel. - void reset_ctrl() { - std::memset(ctrl_, kEmpty, capacity_ + Group::kWidth); - ctrl_[capacity_] = kSentinel; - SanitizerPoisonMemoryRegion(slots_, sizeof(slot_type) * capacity_); - } - - void reset_growth_left() { - growth_left() = CapacityToGrowth(capacity()) - size_; - } - - // Sets the control byte, and if `i < Group::kWidth`, set the cloned byte at - // the end too. - void set_ctrl(size_t i, ctrl_t h) { - assert(i < capacity_); - - if (IsFull(h)) { - SanitizerUnpoisonObject(slots_ + i); - } else { - SanitizerPoisonObject(slots_ + i); - } - - ctrl_[i] = h; - ctrl_[((i - Group::kWidth) & capacity_) + 1 + - ((Group::kWidth - 1) & capacity_)] = h; - } - - size_t& growth_left() { return settings_.template get<0>(); } - - hasher& hash_ref() { return settings_.template get<1>(); } - const hasher& hash_ref() const { return settings_.template get<1>(); } - key_equal& eq_ref() { return settings_.template get<2>(); } - const key_equal& eq_ref() const { return settings_.template get<2>(); } - allocator_type& alloc_ref() { return settings_.template get<3>(); } - const allocator_type& alloc_ref() const { - return settings_.template get<3>(); - } - - // TODO(alkis): Investigate removing some of these fields: - // - ctrl/slots can be derived from each other - // - size can be moved into the slot array - ctrl_t* ctrl_ = EmptyGroup(); // [(capacity + 1) * ctrl_t] - slot_type* slots_ = nullptr; // [capacity * slot_type] - size_t size_ = 0; // number of full slots - size_t capacity_ = 0; // total number of slots - HashtablezInfoHandle infoz_; - absl::container_internal::CompressedTuple - settings_{0, hasher{}, key_equal{}, allocator_type{}}; -}; - -// Erases all elements that satisfy the predicate `pred` from the container `c`. -template -void EraseIf(Predicate pred, raw_hash_set* c) { - for (auto it = c->begin(), last = c->end(); it != last;) { - auto copy_it = it++; - if (pred(*copy_it)) { - c->erase(copy_it); - } - } -} - -namespace hashtable_debug_internal { -template -struct HashtableDebugAccess> { - using Traits = typename Set::PolicyTraits; - using Slot = typename Traits::slot_type; - - static size_t GetNumProbes(const Set& set, - const typename Set::key_type& key) { - size_t num_probes = 0; - size_t hash = set.hash_ref()(key); - auto seq = probe(set.ctrl_, hash, set.capacity_); - while (true) { - container_internal::Group g{set.ctrl_ + seq.offset()}; - for (int i : g.Match(container_internal::H2(hash))) { - if (Traits::apply( - typename Set::template EqualElement{ - key, set.eq_ref()}, - Traits::element(set.slots_ + seq.offset(i)))) - return num_probes; - ++num_probes; - } - if (g.MatchEmpty()) return num_probes; - seq.next(); - ++num_probes; - } - } - - static size_t AllocatedByteSize(const Set& c) { - size_t capacity = c.capacity_; - if (capacity == 0) return 0; - auto layout = Set::MakeLayout(capacity); - size_t m = layout.AllocSize(); - - size_t per_slot = Traits::space_used(static_cast(nullptr)); - if (per_slot != ~size_t{}) { - m += per_slot * c.size(); - } else { - for (size_t i = 0; i != capacity; ++i) { - if (container_internal::IsFull(c.ctrl_[i])) { - m += Traits::space_used(c.slots_ + i); - } - } - } - return m; - } - - static size_t LowerBoundAllocatedByteSize(size_t size) { - size_t capacity = GrowthToLowerboundCapacity(size); - if (capacity == 0) return 0; - auto layout = Set::MakeLayout(NormalizeCapacity(capacity)); - size_t m = layout.AllocSize(); - size_t per_slot = Traits::space_used(static_cast(nullptr)); - if (per_slot != ~size_t{}) { - m += per_slot * size; - } - return m; - } -}; - -} // namespace hashtable_debug_internal -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/test_instance_tracker.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/test_instance_tracker.h deleted file mode 100644 index 5ff6fd7..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/test_instance_tracker.h +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_TEST_INSTANCE_TRACKER_H_ -#define ABSL_CONTAINER_INTERNAL_TEST_INSTANCE_TRACKER_H_ - -#include -#include - -#include "absl/types/compare.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace test_internal { - -// A type that counts number of occurrences of the type, the live occurrences of -// the type, as well as the number of copies, moves, swaps, and comparisons that -// have occurred on the type. This is used as a base class for the copyable, -// copyable+movable, and movable types below that are used in actual tests. Use -// InstanceTracker in tests to track the number of instances. -class BaseCountedInstance { - public: - explicit BaseCountedInstance(int x) : value_(x) { - ++num_instances_; - ++num_live_instances_; - } - BaseCountedInstance(const BaseCountedInstance& x) - : value_(x.value_), is_live_(x.is_live_) { - ++num_instances_; - if (is_live_) ++num_live_instances_; - ++num_copies_; - } - BaseCountedInstance(BaseCountedInstance&& x) - : value_(x.value_), is_live_(x.is_live_) { - x.is_live_ = false; - ++num_instances_; - ++num_moves_; - } - ~BaseCountedInstance() { - --num_instances_; - if (is_live_) --num_live_instances_; - } - - BaseCountedInstance& operator=(const BaseCountedInstance& x) { - value_ = x.value_; - if (is_live_) --num_live_instances_; - is_live_ = x.is_live_; - if (is_live_) ++num_live_instances_; - ++num_copies_; - return *this; - } - BaseCountedInstance& operator=(BaseCountedInstance&& x) { - value_ = x.value_; - if (is_live_) --num_live_instances_; - is_live_ = x.is_live_; - x.is_live_ = false; - ++num_moves_; - return *this; - } - - bool operator==(const BaseCountedInstance& x) const { - ++num_comparisons_; - return value_ == x.value_; - } - - bool operator!=(const BaseCountedInstance& x) const { - ++num_comparisons_; - return value_ != x.value_; - } - - bool operator<(const BaseCountedInstance& x) const { - ++num_comparisons_; - return value_ < x.value_; - } - - bool operator>(const BaseCountedInstance& x) const { - ++num_comparisons_; - return value_ > x.value_; - } - - bool operator<=(const BaseCountedInstance& x) const { - ++num_comparisons_; - return value_ <= x.value_; - } - - bool operator>=(const BaseCountedInstance& x) const { - ++num_comparisons_; - return value_ >= x.value_; - } - - absl::weak_ordering compare(const BaseCountedInstance& x) const { - ++num_comparisons_; - return value_ < x.value_ - ? absl::weak_ordering::less - : value_ == x.value_ ? absl::weak_ordering::equivalent - : absl::weak_ordering::greater; - } - - int value() const { - if (!is_live_) std::abort(); - return value_; - } - - friend std::ostream& operator<<(std::ostream& o, - const BaseCountedInstance& v) { - return o << "[value:" << v.value() << "]"; - } - - // Implementation of efficient swap() that counts swaps. - static void SwapImpl( - BaseCountedInstance& lhs, // NOLINT(runtime/references) - BaseCountedInstance& rhs) { // NOLINT(runtime/references) - using std::swap; - swap(lhs.value_, rhs.value_); - swap(lhs.is_live_, rhs.is_live_); - ++BaseCountedInstance::num_swaps_; - } - - private: - friend class InstanceTracker; - - int value_; - - // Indicates if the value is live, ie it hasn't been moved away from. - bool is_live_ = true; - - // Number of instances. - static int num_instances_; - - // Number of live instances (those that have not been moved away from.) - static int num_live_instances_; - - // Number of times that BaseCountedInstance objects were moved. - static int num_moves_; - - // Number of times that BaseCountedInstance objects were copied. - static int num_copies_; - - // Number of times that BaseCountedInstance objects were swapped. - static int num_swaps_; - - // Number of times that BaseCountedInstance objects were compared. - static int num_comparisons_; -}; - -// Helper to track the BaseCountedInstance instance counters. Expects that the -// number of instances and live_instances are the same when it is constructed -// and when it is destructed. -class InstanceTracker { - public: - InstanceTracker() - : start_instances_(BaseCountedInstance::num_instances_), - start_live_instances_(BaseCountedInstance::num_live_instances_) { - ResetCopiesMovesSwaps(); - } - ~InstanceTracker() { - if (instances() != 0) std::abort(); - if (live_instances() != 0) std::abort(); - } - - // Returns the number of BaseCountedInstance instances both containing valid - // values and those moved away from compared to when the InstanceTracker was - // constructed - int instances() const { - return BaseCountedInstance::num_instances_ - start_instances_; - } - - // Returns the number of live BaseCountedInstance instances compared to when - // the InstanceTracker was constructed - int live_instances() const { - return BaseCountedInstance::num_live_instances_ - start_live_instances_; - } - - // Returns the number of moves on BaseCountedInstance objects since - // construction or since the last call to ResetCopiesMovesSwaps(). - int moves() const { return BaseCountedInstance::num_moves_ - start_moves_; } - - // Returns the number of copies on BaseCountedInstance objects since - // construction or the last call to ResetCopiesMovesSwaps(). - int copies() const { - return BaseCountedInstance::num_copies_ - start_copies_; - } - - // Returns the number of swaps on BaseCountedInstance objects since - // construction or the last call to ResetCopiesMovesSwaps(). - int swaps() const { return BaseCountedInstance::num_swaps_ - start_swaps_; } - - // Returns the number of comparisons on BaseCountedInstance objects since - // construction or the last call to ResetCopiesMovesSwaps(). - int comparisons() const { - return BaseCountedInstance::num_comparisons_ - start_comparisons_; - } - - // Resets the base values for moves, copies, comparisons, and swaps to the - // current values, so that subsequent Get*() calls for moves, copies, - // comparisons, and swaps will compare to the situation at the point of this - // call. - void ResetCopiesMovesSwaps() { - start_moves_ = BaseCountedInstance::num_moves_; - start_copies_ = BaseCountedInstance::num_copies_; - start_swaps_ = BaseCountedInstance::num_swaps_; - start_comparisons_ = BaseCountedInstance::num_comparisons_; - } - - private: - int start_instances_; - int start_live_instances_; - int start_moves_; - int start_copies_; - int start_swaps_; - int start_comparisons_; -}; - -// Copyable, not movable. -class CopyableOnlyInstance : public BaseCountedInstance { - public: - explicit CopyableOnlyInstance(int x) : BaseCountedInstance(x) {} - CopyableOnlyInstance(const CopyableOnlyInstance& rhs) = default; - CopyableOnlyInstance& operator=(const CopyableOnlyInstance& rhs) = default; - - friend void swap(CopyableOnlyInstance& lhs, CopyableOnlyInstance& rhs) { - BaseCountedInstance::SwapImpl(lhs, rhs); - } - - static bool supports_move() { return false; } -}; - -// Copyable and movable. -class CopyableMovableInstance : public BaseCountedInstance { - public: - explicit CopyableMovableInstance(int x) : BaseCountedInstance(x) {} - CopyableMovableInstance(const CopyableMovableInstance& rhs) = default; - CopyableMovableInstance(CopyableMovableInstance&& rhs) = default; - CopyableMovableInstance& operator=(const CopyableMovableInstance& rhs) = - default; - CopyableMovableInstance& operator=(CopyableMovableInstance&& rhs) = default; - - friend void swap(CopyableMovableInstance& lhs, CopyableMovableInstance& rhs) { - BaseCountedInstance::SwapImpl(lhs, rhs); - } - - static bool supports_move() { return true; } -}; - -// Only movable, not default-constructible. -class MovableOnlyInstance : public BaseCountedInstance { - public: - explicit MovableOnlyInstance(int x) : BaseCountedInstance(x) {} - MovableOnlyInstance(MovableOnlyInstance&& other) = default; - MovableOnlyInstance& operator=(MovableOnlyInstance&& other) = default; - - friend void swap(MovableOnlyInstance& lhs, MovableOnlyInstance& rhs) { - BaseCountedInstance::SwapImpl(lhs, rhs); - } - - static bool supports_move() { return true; } -}; - -} // namespace test_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_TEST_INSTANCE_TRACKER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/tracked.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/tracked.h deleted file mode 100644 index 29f5829..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/tracked.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_TRACKED_H_ -#define ABSL_CONTAINER_INTERNAL_TRACKED_H_ - -#include - -#include -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -// A class that tracks its copies and moves so that it can be queried in tests. -template -class Tracked { - public: - Tracked() {} - // NOLINTNEXTLINE(runtime/explicit) - Tracked(const T& val) : val_(val) {} - Tracked(const Tracked& that) - : val_(that.val_), - num_moves_(that.num_moves_), - num_copies_(that.num_copies_) { - ++(*num_copies_); - } - Tracked(Tracked&& that) - : val_(std::move(that.val_)), - num_moves_(std::move(that.num_moves_)), - num_copies_(std::move(that.num_copies_)) { - ++(*num_moves_); - } - Tracked& operator=(const Tracked& that) { - val_ = that.val_; - num_moves_ = that.num_moves_; - num_copies_ = that.num_copies_; - ++(*num_copies_); - } - Tracked& operator=(Tracked&& that) { - val_ = std::move(that.val_); - num_moves_ = std::move(that.num_moves_); - num_copies_ = std::move(that.num_copies_); - ++(*num_moves_); - } - - const T& val() const { return val_; } - - friend bool operator==(const Tracked& a, const Tracked& b) { - return a.val_ == b.val_; - } - friend bool operator!=(const Tracked& a, const Tracked& b) { - return !(a == b); - } - - size_t num_copies() { return *num_copies_; } - size_t num_moves() { return *num_moves_; } - - private: - T val_; - std::shared_ptr num_moves_ = std::make_shared(0); - std::shared_ptr num_copies_ = std::make_shared(0); -}; - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_TRACKED_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_constructor_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_constructor_test.h deleted file mode 100644 index 3f90ad7..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_constructor_test.h +++ /dev/null @@ -1,490 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_CONSTRUCTOR_TEST_H_ -#define ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_CONSTRUCTOR_TEST_H_ - -#include -#include -#include - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/container/internal/hash_generator_testing.h" -#include "absl/container/internal/hash_policy_testing.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class ConstructorTest : public ::testing::Test {}; - -TYPED_TEST_SUITE_P(ConstructorTest); - -TYPED_TEST_P(ConstructorTest, NoArgs) { - TypeParam m; - EXPECT_TRUE(m.empty()); - EXPECT_THAT(m, ::testing::UnorderedElementsAre()); -} - -TYPED_TEST_P(ConstructorTest, BucketCount) { - TypeParam m(123); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(m, ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountHash) { - using H = typename TypeParam::hasher; - H hasher; - TypeParam m(123, hasher); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(m, ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountHashEqual) { - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - H hasher; - E equal; - TypeParam m(123, hasher, equal); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.key_eq(), equal); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(m, ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountHashEqualAlloc) { - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.key_eq(), equal); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(m, ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -template -struct is_std_unordered_map : std::false_type {}; - -template -struct is_std_unordered_map> : std::true_type {}; - -#if defined(UNORDERED_MAP_CXX14) || defined(UNORDERED_MAP_CXX17) -using has_cxx14_std_apis = std::true_type; -#else -using has_cxx14_std_apis = std::false_type; -#endif - -template -using expect_cxx14_apis = - absl::disjunction>, - has_cxx14_std_apis>; - -template -void BucketCountAllocTest(std::false_type) {} - -template -void BucketCountAllocTest(std::true_type) { - using A = typename TypeParam::allocator_type; - A alloc(0); - TypeParam m(123, alloc); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(m, ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountAlloc) { - BucketCountAllocTest(expect_cxx14_apis()); -} - -template -void BucketCountHashAllocTest(std::false_type) {} - -template -void BucketCountHashAllocTest(std::true_type) { - using H = typename TypeParam::hasher; - using A = typename TypeParam::allocator_type; - H hasher; - A alloc(0); - TypeParam m(123, hasher, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(m, ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountHashAlloc) { - BucketCountHashAllocTest(expect_cxx14_apis()); -} - -#if ABSL_UNORDERED_SUPPORTS_ALLOC_CTORS -using has_alloc_std_constructors = std::true_type; -#else -using has_alloc_std_constructors = std::false_type; -#endif - -template -using expect_alloc_constructors = - absl::disjunction>, - has_alloc_std_constructors>; - -template -void AllocTest(std::false_type) {} - -template -void AllocTest(std::true_type) { - using A = typename TypeParam::allocator_type; - A alloc(0); - TypeParam m(alloc); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(m, ::testing::UnorderedElementsAre()); -} - -TYPED_TEST_P(ConstructorTest, Alloc) { - AllocTest(expect_alloc_constructors()); -} - -TYPED_TEST_P(ConstructorTest, InputIteratorBucketHashEqualAlloc) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end(), 123, hasher, equal, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.key_eq(), equal); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -template -void InputIteratorBucketAllocTest(std::false_type) {} - -template -void InputIteratorBucketAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using A = typename TypeParam::allocator_type; - A alloc(0); - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end(), 123, alloc); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, InputIteratorBucketAlloc) { - InputIteratorBucketAllocTest(expect_cxx14_apis()); -} - -template -void InputIteratorBucketHashAllocTest(std::false_type) {} - -template -void InputIteratorBucketHashAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using A = typename TypeParam::allocator_type; - H hasher; - A alloc(0); - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end(), 123, hasher, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, InputIteratorBucketHashAlloc) { - InputIteratorBucketHashAllocTest(expect_cxx14_apis()); -} - -TYPED_TEST_P(ConstructorTest, CopyConstructor) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator()()); - TypeParam n(m); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_EQ(m.get_allocator(), n.get_allocator()); - EXPECT_EQ(m, n); -} - -template -void CopyConstructorAllocTest(std::false_type) {} - -template -void CopyConstructorAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator()()); - TypeParam n(m, A(11)); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_NE(m.get_allocator(), n.get_allocator()); - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, CopyConstructorAlloc) { - CopyConstructorAllocTest(expect_alloc_constructors()); -} - -// TODO(alkis): Test non-propagating allocators on copy constructors. - -TYPED_TEST_P(ConstructorTest, MoveConstructor) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator()()); - TypeParam t(m); - TypeParam n(std::move(t)); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_EQ(m.get_allocator(), n.get_allocator()); - EXPECT_EQ(m, n); -} - -template -void MoveConstructorAllocTest(std::false_type) {} - -template -void MoveConstructorAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator()()); - TypeParam t(m); - TypeParam n(std::move(t), A(1)); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_NE(m.get_allocator(), n.get_allocator()); - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, MoveConstructorAlloc) { - MoveConstructorAllocTest(expect_alloc_constructors()); -} - -// TODO(alkis): Test non-propagating allocators on move constructors. - -TYPED_TEST_P(ConstructorTest, InitializerListBucketHashEqualAlloc) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(values, 123, hasher, equal, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.key_eq(), equal); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -template -void InitializerListBucketAllocTest(std::false_type) {} - -template -void InitializerListBucketAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using A = typename TypeParam::allocator_type; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - A alloc(0); - TypeParam m(values, 123, alloc); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, InitializerListBucketAlloc) { - InitializerListBucketAllocTest(expect_cxx14_apis()); -} - -template -void InitializerListBucketHashAllocTest(std::false_type) {} - -template -void InitializerListBucketHashAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using A = typename TypeParam::allocator_type; - H hasher; - A alloc(0); - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - TypeParam m(values, 123, hasher, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, InitializerListBucketHashAlloc) { - InitializerListBucketHashAllocTest(expect_cxx14_apis()); -} - -TYPED_TEST_P(ConstructorTest, Assignment) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - hash_internal::Generator gen; - TypeParam m({gen(), gen(), gen()}, 123, hasher, equal, alloc); - TypeParam n; - n = m; - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_EQ(m, n); -} - -// TODO(alkis): Test [non-]propagating allocators on move/copy assignments -// (it depends on traits). - -TYPED_TEST_P(ConstructorTest, MoveAssignment) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - hash_internal::Generator gen; - TypeParam m({gen(), gen(), gen()}, 123, hasher, equal, alloc); - TypeParam t(m); - TypeParam n; - n = std::move(t); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, AssignmentFromInitializerList) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - TypeParam m; - m = values; - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); -} - -TYPED_TEST_P(ConstructorTest, AssignmentOverwritesExisting) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - TypeParam m({gen(), gen(), gen()}); - TypeParam n({gen()}); - n = m; - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, MoveAssignmentOverwritesExisting) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - TypeParam m({gen(), gen(), gen()}); - TypeParam t(m); - TypeParam n({gen()}); - n = std::move(t); - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, AssignmentFromInitializerListOverwritesExisting) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - TypeParam m; - m = values; - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); -} - -TYPED_TEST_P(ConstructorTest, AssignmentOnSelf) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - TypeParam m(values); - m = *&m; // Avoid -Wself-assign - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); -} - -// We cannot test self move as standard states that it leaves standard -// containers in unspecified state (and in practice in causes memory-leak -// according to heap-checker!). - -REGISTER_TYPED_TEST_CASE_P( - ConstructorTest, NoArgs, BucketCount, BucketCountHash, BucketCountHashEqual, - BucketCountHashEqualAlloc, BucketCountAlloc, BucketCountHashAlloc, Alloc, - InputIteratorBucketHashEqualAlloc, InputIteratorBucketAlloc, - InputIteratorBucketHashAlloc, CopyConstructor, CopyConstructorAlloc, - MoveConstructor, MoveConstructorAlloc, InitializerListBucketHashEqualAlloc, - InitializerListBucketAlloc, InitializerListBucketHashAlloc, Assignment, - MoveAssignment, AssignmentFromInitializerList, AssignmentOverwritesExisting, - MoveAssignmentOverwritesExisting, - AssignmentFromInitializerListOverwritesExisting, AssignmentOnSelf); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_CONSTRUCTOR_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_lookup_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_lookup_test.h deleted file mode 100644 index e76421e..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_lookup_test.h +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_LOOKUP_TEST_H_ -#define ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_LOOKUP_TEST_H_ - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/container/internal/hash_generator_testing.h" -#include "absl/container/internal/hash_policy_testing.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class LookupTest : public ::testing::Test {}; - -TYPED_TEST_SUITE_P(LookupTest); - -TYPED_TEST_P(LookupTest, At) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - for (const auto& p : values) { - const auto& val = m.at(p.first); - EXPECT_EQ(p.second, val) << ::testing::PrintToString(p.first); - } -} - -TYPED_TEST_P(LookupTest, OperatorBracket) { - using T = hash_internal::GeneratedType; - using V = typename TypeParam::mapped_type; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - for (const auto& p : values) { - auto& val = m[p.first]; - EXPECT_EQ(V(), val) << ::testing::PrintToString(p.first); - val = p.second; - } - for (const auto& p : values) - EXPECT_EQ(p.second, m[p.first]) << ::testing::PrintToString(p.first); -} - -TYPED_TEST_P(LookupTest, Count) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - for (const auto& p : values) - EXPECT_EQ(0, m.count(p.first)) << ::testing::PrintToString(p.first); - m.insert(values.begin(), values.end()); - for (const auto& p : values) - EXPECT_EQ(1, m.count(p.first)) << ::testing::PrintToString(p.first); -} - -TYPED_TEST_P(LookupTest, Find) { - using std::get; - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - for (const auto& p : values) - EXPECT_TRUE(m.end() == m.find(p.first)) - << ::testing::PrintToString(p.first); - m.insert(values.begin(), values.end()); - for (const auto& p : values) { - auto it = m.find(p.first); - EXPECT_TRUE(m.end() != it) << ::testing::PrintToString(p.first); - EXPECT_EQ(p.second, get<1>(*it)) << ::testing::PrintToString(p.first); - } -} - -TYPED_TEST_P(LookupTest, EqualRange) { - using std::get; - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - for (const auto& p : values) { - auto r = m.equal_range(p.first); - ASSERT_EQ(0, std::distance(r.first, r.second)); - } - m.insert(values.begin(), values.end()); - for (const auto& p : values) { - auto r = m.equal_range(p.first); - ASSERT_EQ(1, std::distance(r.first, r.second)); - EXPECT_EQ(p.second, get<1>(*r.first)) << ::testing::PrintToString(p.first); - } -} - -REGISTER_TYPED_TEST_CASE_P(LookupTest, At, OperatorBracket, Count, Find, - EqualRange); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_LOOKUP_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_members_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_members_test.h deleted file mode 100644 index 7d48cdb..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_members_test.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_MEMBERS_TEST_H_ -#define ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_MEMBERS_TEST_H_ - -#include -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class MembersTest : public ::testing::Test {}; - -TYPED_TEST_SUITE_P(MembersTest); - -template -void UseType() {} - -TYPED_TEST_P(MembersTest, Typedefs) { - EXPECT_TRUE((std::is_same, - typename TypeParam::value_type>())); - EXPECT_TRUE((absl::conjunction< - absl::negation>, - std::is_integral>())); - EXPECT_TRUE((absl::conjunction< - std::is_signed, - std::is_integral>())); - EXPECT_TRUE((std::is_convertible< - decltype(std::declval()( - std::declval())), - size_t>())); - EXPECT_TRUE((std::is_convertible< - decltype(std::declval()( - std::declval(), - std::declval())), - bool>())); - EXPECT_TRUE((std::is_same())); - EXPECT_TRUE((std::is_same())); - EXPECT_TRUE((std::is_same())); - EXPECT_TRUE((std::is_same::pointer, - typename TypeParam::pointer>())); - EXPECT_TRUE( - (std::is_same::const_pointer, - typename TypeParam::const_pointer>())); -} - -TYPED_TEST_P(MembersTest, SimpleFunctions) { - EXPECT_GT(TypeParam().max_size(), 0); -} - -TYPED_TEST_P(MembersTest, BeginEnd) { - TypeParam t = {typename TypeParam::value_type{}}; - EXPECT_EQ(t.begin(), t.cbegin()); - EXPECT_EQ(t.end(), t.cend()); - EXPECT_NE(t.begin(), t.end()); - EXPECT_NE(t.cbegin(), t.cend()); -} - -REGISTER_TYPED_TEST_SUITE_P(MembersTest, Typedefs, SimpleFunctions, BeginEnd); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_MEMBERS_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_modifiers_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_modifiers_test.h deleted file mode 100644 index 8c9ca77..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_map_modifiers_test.h +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_MODIFIERS_TEST_H_ -#define ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_MODIFIERS_TEST_H_ - -#include - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/container/internal/hash_generator_testing.h" -#include "absl/container/internal/hash_policy_testing.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class ModifiersTest : public ::testing::Test {}; - -TYPED_TEST_SUITE_P(ModifiersTest); - -TYPED_TEST_P(ModifiersTest, Clear) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - ASSERT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - m.clear(); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAre()); - EXPECT_TRUE(m.empty()); -} - -TYPED_TEST_P(ModifiersTest, Insert) { - using T = hash_internal::GeneratedType; - using V = typename TypeParam::mapped_type; - T val = hash_internal::Generator()(); - TypeParam m; - auto p = m.insert(val); - EXPECT_TRUE(p.second); - EXPECT_EQ(val, *p.first); - T val2 = {val.first, hash_internal::Generator()()}; - p = m.insert(val2); - EXPECT_FALSE(p.second); - EXPECT_EQ(val, *p.first); -} - -TYPED_TEST_P(ModifiersTest, InsertHint) { - using T = hash_internal::GeneratedType; - using V = typename TypeParam::mapped_type; - T val = hash_internal::Generator()(); - TypeParam m; - auto it = m.insert(m.end(), val); - EXPECT_TRUE(it != m.end()); - EXPECT_EQ(val, *it); - T val2 = {val.first, hash_internal::Generator()()}; - it = m.insert(it, val2); - EXPECT_TRUE(it != m.end()); - EXPECT_EQ(val, *it); -} - -TYPED_TEST_P(ModifiersTest, InsertRange) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - m.insert(values.begin(), values.end()); - ASSERT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); -} - -TYPED_TEST_P(ModifiersTest, InsertOrAssign) { -#ifdef UNORDERED_MAP_CXX17 - using std::get; - using K = typename TypeParam::key_type; - using V = typename TypeParam::mapped_type; - K k = hash_internal::Generator()(); - V val = hash_internal::Generator()(); - TypeParam m; - auto p = m.insert_or_assign(k, val); - EXPECT_TRUE(p.second); - EXPECT_EQ(k, get<0>(*p.first)); - EXPECT_EQ(val, get<1>(*p.first)); - V val2 = hash_internal::Generator()(); - p = m.insert_or_assign(k, val2); - EXPECT_FALSE(p.second); - EXPECT_EQ(k, get<0>(*p.first)); - EXPECT_EQ(val2, get<1>(*p.first)); -#endif -} - -TYPED_TEST_P(ModifiersTest, InsertOrAssignHint) { -#ifdef UNORDERED_MAP_CXX17 - using std::get; - using K = typename TypeParam::key_type; - using V = typename TypeParam::mapped_type; - K k = hash_internal::Generator()(); - V val = hash_internal::Generator()(); - TypeParam m; - auto it = m.insert_or_assign(m.end(), k, val); - EXPECT_TRUE(it != m.end()); - EXPECT_EQ(k, get<0>(*it)); - EXPECT_EQ(val, get<1>(*it)); - V val2 = hash_internal::Generator()(); - it = m.insert_or_assign(it, k, val2); - EXPECT_EQ(k, get<0>(*it)); - EXPECT_EQ(val2, get<1>(*it)); -#endif -} - -TYPED_TEST_P(ModifiersTest, Emplace) { - using T = hash_internal::GeneratedType; - using V = typename TypeParam::mapped_type; - T val = hash_internal::Generator()(); - TypeParam m; - // TODO(alkis): We need a way to run emplace in a more meaningful way. Perhaps - // with test traits/policy. - auto p = m.emplace(val); - EXPECT_TRUE(p.second); - EXPECT_EQ(val, *p.first); - T val2 = {val.first, hash_internal::Generator()()}; - p = m.emplace(val2); - EXPECT_FALSE(p.second); - EXPECT_EQ(val, *p.first); -} - -TYPED_TEST_P(ModifiersTest, EmplaceHint) { - using T = hash_internal::GeneratedType; - using V = typename TypeParam::mapped_type; - T val = hash_internal::Generator()(); - TypeParam m; - // TODO(alkis): We need a way to run emplace in a more meaningful way. Perhaps - // with test traits/policy. - auto it = m.emplace_hint(m.end(), val); - EXPECT_EQ(val, *it); - T val2 = {val.first, hash_internal::Generator()()}; - it = m.emplace_hint(it, val2); - EXPECT_EQ(val, *it); -} - -TYPED_TEST_P(ModifiersTest, TryEmplace) { -#ifdef UNORDERED_MAP_CXX17 - using T = hash_internal::GeneratedType; - using V = typename TypeParam::mapped_type; - T val = hash_internal::Generator()(); - TypeParam m; - // TODO(alkis): We need a way to run emplace in a more meaningful way. Perhaps - // with test traits/policy. - auto p = m.try_emplace(val.first, val.second); - EXPECT_TRUE(p.second); - EXPECT_EQ(val, *p.first); - T val2 = {val.first, hash_internal::Generator()()}; - p = m.try_emplace(val2.first, val2.second); - EXPECT_FALSE(p.second); - EXPECT_EQ(val, *p.first); -#endif -} - -TYPED_TEST_P(ModifiersTest, TryEmplaceHint) { -#ifdef UNORDERED_MAP_CXX17 - using T = hash_internal::GeneratedType; - using V = typename TypeParam::mapped_type; - T val = hash_internal::Generator()(); - TypeParam m; - // TODO(alkis): We need a way to run emplace in a more meaningful way. Perhaps - // with test traits/policy. - auto it = m.try_emplace(m.end(), val.first, val.second); - EXPECT_EQ(val, *it); - T val2 = {val.first, hash_internal::Generator()()}; - it = m.try_emplace(it, val2.first, val2.second); - EXPECT_EQ(val, *it); -#endif -} - -template -using IfNotVoid = typename std::enable_if::value, V>::type; - -// In openmap we chose not to return the iterator from erase because that's -// more expensive. As such we adapt erase to return an iterator here. -struct EraseFirst { - template - auto operator()(Map* m, int) const - -> IfNotVoiderase(m->begin()))> { - return m->erase(m->begin()); - } - template - typename Map::iterator operator()(Map* m, ...) const { - auto it = m->begin(); - m->erase(it++); - return it; - } -}; - -TYPED_TEST_P(ModifiersTest, Erase) { - using T = hash_internal::GeneratedType; - using std::get; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - ASSERT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - auto& first = *m.begin(); - std::vector values2; - for (const auto& val : values) - if (get<0>(val) != get<0>(first)) values2.push_back(val); - auto it = EraseFirst()(&m, 0); - ASSERT_TRUE(it != m.end()); - EXPECT_EQ(1, std::count(values2.begin(), values2.end(), *it)); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values2.begin(), - values2.end())); -} - -TYPED_TEST_P(ModifiersTest, EraseRange) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - ASSERT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - auto it = m.erase(m.begin(), m.end()); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAre()); - EXPECT_TRUE(it == m.end()); -} - -TYPED_TEST_P(ModifiersTest, EraseKey) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - ASSERT_THAT(items(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_EQ(1, m.erase(values[0].first)); - EXPECT_EQ(0, std::count(m.begin(), m.end(), values[0])); - EXPECT_THAT(items(m), ::testing::UnorderedElementsAreArray(values.begin() + 1, - values.end())); -} - -TYPED_TEST_P(ModifiersTest, Swap) { - using T = hash_internal::GeneratedType; - std::vector v1; - std::vector v2; - std::generate_n(std::back_inserter(v1), 5, hash_internal::Generator()); - std::generate_n(std::back_inserter(v2), 5, hash_internal::Generator()); - TypeParam m1(v1.begin(), v1.end()); - TypeParam m2(v2.begin(), v2.end()); - EXPECT_THAT(items(m1), ::testing::UnorderedElementsAreArray(v1)); - EXPECT_THAT(items(m2), ::testing::UnorderedElementsAreArray(v2)); - m1.swap(m2); - EXPECT_THAT(items(m1), ::testing::UnorderedElementsAreArray(v2)); - EXPECT_THAT(items(m2), ::testing::UnorderedElementsAreArray(v1)); -} - -// TODO(alkis): Write tests for extract. -// TODO(alkis): Write tests for merge. - -REGISTER_TYPED_TEST_CASE_P(ModifiersTest, Clear, Insert, InsertHint, - InsertRange, InsertOrAssign, InsertOrAssignHint, - Emplace, EmplaceHint, TryEmplace, TryEmplaceHint, - Erase, EraseRange, EraseKey, Swap); - -template -struct is_unique_ptr : std::false_type {}; - -template -struct is_unique_ptr> : std::true_type {}; - -template -class UniquePtrModifiersTest : public ::testing::Test { - protected: - UniquePtrModifiersTest() { - static_assert(is_unique_ptr::value, - "UniquePtrModifiersTyest may only be called with a " - "std::unique_ptr value type."); - } -}; - -GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(UniquePtrModifiersTest); - -TYPED_TEST_SUITE_P(UniquePtrModifiersTest); - -// Test that we do not move from rvalue arguments if an insertion does not -// happen. -TYPED_TEST_P(UniquePtrModifiersTest, TryEmplace) { -#ifdef UNORDERED_MAP_CXX17 - using T = hash_internal::GeneratedType; - using V = typename TypeParam::mapped_type; - T val = hash_internal::Generator()(); - TypeParam m; - auto p = m.try_emplace(val.first, std::move(val.second)); - EXPECT_TRUE(p.second); - // A moved from std::unique_ptr is guaranteed to be nullptr. - EXPECT_EQ(val.second, nullptr); - T val2 = {val.first, hash_internal::Generator()()}; - p = m.try_emplace(val2.first, std::move(val2.second)); - EXPECT_FALSE(p.second); - EXPECT_NE(val2.second, nullptr); -#endif -} - -REGISTER_TYPED_TEST_SUITE_P(UniquePtrModifiersTest, TryEmplace); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_MODIFIERS_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_constructor_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_constructor_test.h deleted file mode 100644 index 41165b0..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_constructor_test.h +++ /dev/null @@ -1,496 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_SET_CONSTRUCTOR_TEST_H_ -#define ABSL_CONTAINER_INTERNAL_UNORDERED_SET_CONSTRUCTOR_TEST_H_ - -#include -#include -#include - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/container/internal/hash_generator_testing.h" -#include "absl/container/internal/hash_policy_testing.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class ConstructorTest : public ::testing::Test {}; - -TYPED_TEST_SUITE_P(ConstructorTest); - -TYPED_TEST_P(ConstructorTest, NoArgs) { - TypeParam m; - EXPECT_TRUE(m.empty()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); -} - -TYPED_TEST_P(ConstructorTest, BucketCount) { - TypeParam m(123); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountHash) { - using H = typename TypeParam::hasher; - H hasher; - TypeParam m(123, hasher); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountHashEqual) { - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - H hasher; - E equal; - TypeParam m(123, hasher, equal); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.key_eq(), equal); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountHashEqualAlloc) { - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.key_eq(), equal); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); - - const auto& cm = m; - EXPECT_EQ(cm.hash_function(), hasher); - EXPECT_EQ(cm.key_eq(), equal); - EXPECT_EQ(cm.get_allocator(), alloc); - EXPECT_TRUE(cm.empty()); - EXPECT_THAT(keys(cm), ::testing::UnorderedElementsAre()); - EXPECT_GE(cm.bucket_count(), 123); -} - -template -struct is_std_unordered_set : std::false_type {}; - -template -struct is_std_unordered_set> : std::true_type {}; - -#if defined(UNORDERED_SET_CXX14) || defined(UNORDERED_SET_CXX17) -using has_cxx14_std_apis = std::true_type; -#else -using has_cxx14_std_apis = std::false_type; -#endif - -template -using expect_cxx14_apis = - absl::disjunction>, - has_cxx14_std_apis>; - -template -void BucketCountAllocTest(std::false_type) {} - -template -void BucketCountAllocTest(std::true_type) { - using A = typename TypeParam::allocator_type; - A alloc(0); - TypeParam m(123, alloc); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountAlloc) { - BucketCountAllocTest(expect_cxx14_apis()); -} - -template -void BucketCountHashAllocTest(std::false_type) {} - -template -void BucketCountHashAllocTest(std::true_type) { - using H = typename TypeParam::hasher; - using A = typename TypeParam::allocator_type; - H hasher; - A alloc(0); - TypeParam m(123, hasher, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, BucketCountHashAlloc) { - BucketCountHashAllocTest(expect_cxx14_apis()); -} - -#if ABSL_UNORDERED_SUPPORTS_ALLOC_CTORS -using has_alloc_std_constructors = std::true_type; -#else -using has_alloc_std_constructors = std::false_type; -#endif - -template -using expect_alloc_constructors = - absl::disjunction>, - has_alloc_std_constructors>; - -template -void AllocTest(std::false_type) {} - -template -void AllocTest(std::true_type) { - using A = typename TypeParam::allocator_type; - A alloc(0); - TypeParam m(alloc); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_TRUE(m.empty()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); -} - -TYPED_TEST_P(ConstructorTest, Alloc) { - AllocTest(expect_alloc_constructors()); -} - -TYPED_TEST_P(ConstructorTest, InputIteratorBucketHashEqualAlloc) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - std::vector values; - for (size_t i = 0; i != 10; ++i) - values.push_back(hash_internal::Generator()()); - TypeParam m(values.begin(), values.end(), 123, hasher, equal, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.key_eq(), equal); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -template -void InputIteratorBucketAllocTest(std::false_type) {} - -template -void InputIteratorBucketAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using A = typename TypeParam::allocator_type; - A alloc(0); - std::vector values; - for (size_t i = 0; i != 10; ++i) - values.push_back(hash_internal::Generator()()); - TypeParam m(values.begin(), values.end(), 123, alloc); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, InputIteratorBucketAlloc) { - InputIteratorBucketAllocTest(expect_cxx14_apis()); -} - -template -void InputIteratorBucketHashAllocTest(std::false_type) {} - -template -void InputIteratorBucketHashAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using A = typename TypeParam::allocator_type; - H hasher; - A alloc(0); - std::vector values; - for (size_t i = 0; i != 10; ++i) - values.push_back(hash_internal::Generator()()); - TypeParam m(values.begin(), values.end(), 123, hasher, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, InputIteratorBucketHashAlloc) { - InputIteratorBucketHashAllocTest(expect_cxx14_apis()); -} - -TYPED_TEST_P(ConstructorTest, CopyConstructor) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator()()); - TypeParam n(m); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_EQ(m.get_allocator(), n.get_allocator()); - EXPECT_EQ(m, n); - EXPECT_NE(TypeParam(0, hasher, equal, alloc), n); -} - -template -void CopyConstructorAllocTest(std::false_type) {} - -template -void CopyConstructorAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator()()); - TypeParam n(m, A(11)); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_NE(m.get_allocator(), n.get_allocator()); - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, CopyConstructorAlloc) { - CopyConstructorAllocTest(expect_alloc_constructors()); -} - -// TODO(alkis): Test non-propagating allocators on copy constructors. - -TYPED_TEST_P(ConstructorTest, MoveConstructor) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator()()); - TypeParam t(m); - TypeParam n(std::move(t)); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_EQ(m.get_allocator(), n.get_allocator()); - EXPECT_EQ(m, n); -} - -template -void MoveConstructorAllocTest(std::false_type) {} - -template -void MoveConstructorAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(123, hasher, equal, alloc); - for (size_t i = 0; i != 10; ++i) m.insert(hash_internal::Generator()()); - TypeParam t(m); - TypeParam n(std::move(t), A(1)); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_NE(m.get_allocator(), n.get_allocator()); - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, MoveConstructorAlloc) { - MoveConstructorAllocTest(expect_alloc_constructors()); -} - -// TODO(alkis): Test non-propagating allocators on move constructors. - -TYPED_TEST_P(ConstructorTest, InitializerListBucketHashEqualAlloc) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - TypeParam m(values, 123, hasher, equal, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.key_eq(), equal); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -template -void InitializerListBucketAllocTest(std::false_type) {} - -template -void InitializerListBucketAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using A = typename TypeParam::allocator_type; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - A alloc(0); - TypeParam m(values, 123, alloc); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, InitializerListBucketAlloc) { - InitializerListBucketAllocTest(expect_cxx14_apis()); -} - -template -void InitializerListBucketHashAllocTest(std::false_type) {} - -template -void InitializerListBucketHashAllocTest(std::true_type) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using A = typename TypeParam::allocator_type; - H hasher; - A alloc(0); - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - TypeParam m(values, 123, hasher, alloc); - EXPECT_EQ(m.hash_function(), hasher); - EXPECT_EQ(m.get_allocator(), alloc); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_GE(m.bucket_count(), 123); -} - -TYPED_TEST_P(ConstructorTest, InitializerListBucketHashAlloc) { - InitializerListBucketHashAllocTest(expect_cxx14_apis()); -} - -TYPED_TEST_P(ConstructorTest, CopyAssignment) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - hash_internal::Generator gen; - TypeParam m({gen(), gen(), gen()}, 123, hasher, equal, alloc); - TypeParam n; - n = m; - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_EQ(m, n); -} - -// TODO(alkis): Test [non-]propagating allocators on move/copy assignments -// (it depends on traits). - -TYPED_TEST_P(ConstructorTest, MoveAssignment) { - using T = hash_internal::GeneratedType; - using H = typename TypeParam::hasher; - using E = typename TypeParam::key_equal; - using A = typename TypeParam::allocator_type; - H hasher; - E equal; - A alloc(0); - hash_internal::Generator gen; - TypeParam m({gen(), gen(), gen()}, 123, hasher, equal, alloc); - TypeParam t(m); - TypeParam n; - n = std::move(t); - EXPECT_EQ(m.hash_function(), n.hash_function()); - EXPECT_EQ(m.key_eq(), n.key_eq()); - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, AssignmentFromInitializerList) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - TypeParam m; - m = values; - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); -} - -TYPED_TEST_P(ConstructorTest, AssignmentOverwritesExisting) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - TypeParam m({gen(), gen(), gen()}); - TypeParam n({gen()}); - n = m; - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, MoveAssignmentOverwritesExisting) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - TypeParam m({gen(), gen(), gen()}); - TypeParam t(m); - TypeParam n({gen()}); - n = std::move(t); - EXPECT_EQ(m, n); -} - -TYPED_TEST_P(ConstructorTest, AssignmentFromInitializerListOverwritesExisting) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - TypeParam m; - m = values; - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); -} - -TYPED_TEST_P(ConstructorTest, AssignmentOnSelf) { - using T = hash_internal::GeneratedType; - hash_internal::Generator gen; - std::initializer_list values = {gen(), gen(), gen(), gen(), gen()}; - TypeParam m(values); - m = *&m; // Avoid -Wself-assign. - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); -} - -REGISTER_TYPED_TEST_CASE_P( - ConstructorTest, NoArgs, BucketCount, BucketCountHash, BucketCountHashEqual, - BucketCountHashEqualAlloc, BucketCountAlloc, BucketCountHashAlloc, Alloc, - InputIteratorBucketHashEqualAlloc, InputIteratorBucketAlloc, - InputIteratorBucketHashAlloc, CopyConstructor, CopyConstructorAlloc, - MoveConstructor, MoveConstructorAlloc, InitializerListBucketHashEqualAlloc, - InitializerListBucketAlloc, InitializerListBucketHashAlloc, CopyAssignment, - MoveAssignment, AssignmentFromInitializerList, AssignmentOverwritesExisting, - MoveAssignmentOverwritesExisting, - AssignmentFromInitializerListOverwritesExisting, AssignmentOnSelf); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_UNORDERED_SET_CONSTRUCTOR_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_lookup_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_lookup_test.h deleted file mode 100644 index 8f2f4b2..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_lookup_test.h +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_SET_LOOKUP_TEST_H_ -#define ABSL_CONTAINER_INTERNAL_UNORDERED_SET_LOOKUP_TEST_H_ - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/container/internal/hash_generator_testing.h" -#include "absl/container/internal/hash_policy_testing.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class LookupTest : public ::testing::Test {}; - -TYPED_TEST_SUITE_P(LookupTest); - -TYPED_TEST_P(LookupTest, Count) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - for (const auto& v : values) - EXPECT_EQ(0, m.count(v)) << ::testing::PrintToString(v); - m.insert(values.begin(), values.end()); - for (const auto& v : values) - EXPECT_EQ(1, m.count(v)) << ::testing::PrintToString(v); -} - -TYPED_TEST_P(LookupTest, Find) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - for (const auto& v : values) - EXPECT_TRUE(m.end() == m.find(v)) << ::testing::PrintToString(v); - m.insert(values.begin(), values.end()); - for (const auto& v : values) { - typename TypeParam::iterator it = m.find(v); - static_assert(std::is_same::value, - ""); - static_assert(std::is_same())>::value, - ""); - EXPECT_TRUE(m.end() != it) << ::testing::PrintToString(v); - EXPECT_EQ(v, *it) << ::testing::PrintToString(v); - } -} - -TYPED_TEST_P(LookupTest, EqualRange) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - for (const auto& v : values) { - auto r = m.equal_range(v); - ASSERT_EQ(0, std::distance(r.first, r.second)); - } - m.insert(values.begin(), values.end()); - for (const auto& v : values) { - auto r = m.equal_range(v); - ASSERT_EQ(1, std::distance(r.first, r.second)); - EXPECT_EQ(v, *r.first); - } -} - -REGISTER_TYPED_TEST_CASE_P(LookupTest, Count, Find, EqualRange); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_UNORDERED_SET_LOOKUP_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_members_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_members_test.h deleted file mode 100644 index 4c5e104..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_members_test.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_SET_MEMBERS_TEST_H_ -#define ABSL_CONTAINER_INTERNAL_UNORDERED_SET_MEMBERS_TEST_H_ - -#include -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class MembersTest : public ::testing::Test {}; - -TYPED_TEST_SUITE_P(MembersTest); - -template -void UseType() {} - -TYPED_TEST_P(MembersTest, Typedefs) { - EXPECT_TRUE((std::is_same())); - EXPECT_TRUE((absl::conjunction< - absl::negation>, - std::is_integral>())); - EXPECT_TRUE((absl::conjunction< - std::is_signed, - std::is_integral>())); - EXPECT_TRUE((std::is_convertible< - decltype(std::declval()( - std::declval())), - size_t>())); - EXPECT_TRUE((std::is_convertible< - decltype(std::declval()( - std::declval(), - std::declval())), - bool>())); - EXPECT_TRUE((std::is_same())); - EXPECT_TRUE((std::is_same())); - EXPECT_TRUE((std::is_same())); - EXPECT_TRUE((std::is_same::pointer, - typename TypeParam::pointer>())); - EXPECT_TRUE( - (std::is_same::const_pointer, - typename TypeParam::const_pointer>())); -} - -TYPED_TEST_P(MembersTest, SimpleFunctions) { - EXPECT_GT(TypeParam().max_size(), 0); -} - -TYPED_TEST_P(MembersTest, BeginEnd) { - TypeParam t = {typename TypeParam::value_type{}}; - EXPECT_EQ(t.begin(), t.cbegin()); - EXPECT_EQ(t.end(), t.cend()); - EXPECT_NE(t.begin(), t.end()); - EXPECT_NE(t.cbegin(), t.cend()); -} - -REGISTER_TYPED_TEST_SUITE_P(MembersTest, Typedefs, SimpleFunctions, BeginEnd); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_UNORDERED_SET_MEMBERS_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_modifiers_test.h b/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_modifiers_test.h deleted file mode 100644 index 26be58d..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/internal/unordered_set_modifiers_test.h +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_SET_MODIFIERS_TEST_H_ -#define ABSL_CONTAINER_INTERNAL_UNORDERED_SET_MODIFIERS_TEST_H_ - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/container/internal/hash_generator_testing.h" -#include "absl/container/internal/hash_policy_testing.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { - -template -class ModifiersTest : public ::testing::Test {}; - -TYPED_TEST_SUITE_P(ModifiersTest); - -TYPED_TEST_P(ModifiersTest, Clear) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - ASSERT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - m.clear(); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); - EXPECT_TRUE(m.empty()); -} - -TYPED_TEST_P(ModifiersTest, Insert) { - using T = hash_internal::GeneratedType; - T val = hash_internal::Generator()(); - TypeParam m; - auto p = m.insert(val); - EXPECT_TRUE(p.second); - EXPECT_EQ(val, *p.first); - p = m.insert(val); - EXPECT_FALSE(p.second); -} - -TYPED_TEST_P(ModifiersTest, InsertHint) { - using T = hash_internal::GeneratedType; - T val = hash_internal::Generator()(); - TypeParam m; - auto it = m.insert(m.end(), val); - EXPECT_TRUE(it != m.end()); - EXPECT_EQ(val, *it); - it = m.insert(it, val); - EXPECT_TRUE(it != m.end()); - EXPECT_EQ(val, *it); -} - -TYPED_TEST_P(ModifiersTest, InsertRange) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m; - m.insert(values.begin(), values.end()); - ASSERT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); -} - -TYPED_TEST_P(ModifiersTest, Emplace) { - using T = hash_internal::GeneratedType; - T val = hash_internal::Generator()(); - TypeParam m; - // TODO(alkis): We need a way to run emplace in a more meaningful way. Perhaps - // with test traits/policy. - auto p = m.emplace(val); - EXPECT_TRUE(p.second); - EXPECT_EQ(val, *p.first); - p = m.emplace(val); - EXPECT_FALSE(p.second); - EXPECT_EQ(val, *p.first); -} - -TYPED_TEST_P(ModifiersTest, EmplaceHint) { - using T = hash_internal::GeneratedType; - T val = hash_internal::Generator()(); - TypeParam m; - // TODO(alkis): We need a way to run emplace in a more meaningful way. Perhaps - // with test traits/policy. - auto it = m.emplace_hint(m.end(), val); - EXPECT_EQ(val, *it); - it = m.emplace_hint(it, val); - EXPECT_EQ(val, *it); -} - -template -using IfNotVoid = typename std::enable_if::value, V>::type; - -// In openmap we chose not to return the iterator from erase because that's -// more expensive. As such we adapt erase to return an iterator here. -struct EraseFirst { - template - auto operator()(Map* m, int) const - -> IfNotVoiderase(m->begin()))> { - return m->erase(m->begin()); - } - template - typename Map::iterator operator()(Map* m, ...) const { - auto it = m->begin(); - m->erase(it++); - return it; - } -}; - -TYPED_TEST_P(ModifiersTest, Erase) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - ASSERT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - std::vector values2; - for (const auto& val : values) - if (val != *m.begin()) values2.push_back(val); - auto it = EraseFirst()(&m, 0); - ASSERT_TRUE(it != m.end()); - EXPECT_EQ(1, std::count(values2.begin(), values2.end(), *it)); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values2.begin(), - values2.end())); -} - -TYPED_TEST_P(ModifiersTest, EraseRange) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - ASSERT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - auto it = m.erase(m.begin(), m.end()); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAre()); - EXPECT_TRUE(it == m.end()); -} - -TYPED_TEST_P(ModifiersTest, EraseKey) { - using T = hash_internal::GeneratedType; - std::vector values; - std::generate_n(std::back_inserter(values), 10, - hash_internal::Generator()); - TypeParam m(values.begin(), values.end()); - ASSERT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values)); - EXPECT_EQ(1, m.erase(values[0])); - EXPECT_EQ(0, std::count(m.begin(), m.end(), values[0])); - EXPECT_THAT(keys(m), ::testing::UnorderedElementsAreArray(values.begin() + 1, - values.end())); -} - -TYPED_TEST_P(ModifiersTest, Swap) { - using T = hash_internal::GeneratedType; - std::vector v1; - std::vector v2; - std::generate_n(std::back_inserter(v1), 5, hash_internal::Generator()); - std::generate_n(std::back_inserter(v2), 5, hash_internal::Generator()); - TypeParam m1(v1.begin(), v1.end()); - TypeParam m2(v2.begin(), v2.end()); - EXPECT_THAT(keys(m1), ::testing::UnorderedElementsAreArray(v1)); - EXPECT_THAT(keys(m2), ::testing::UnorderedElementsAreArray(v2)); - m1.swap(m2); - EXPECT_THAT(keys(m1), ::testing::UnorderedElementsAreArray(v2)); - EXPECT_THAT(keys(m2), ::testing::UnorderedElementsAreArray(v1)); -} - -// TODO(alkis): Write tests for extract. -// TODO(alkis): Write tests for merge. - -REGISTER_TYPED_TEST_CASE_P(ModifiersTest, Clear, Insert, InsertHint, - InsertRange, Emplace, EmplaceHint, Erase, EraseRange, - EraseKey, Swap); - -} // namespace container_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_INTERNAL_UNORDERED_SET_MODIFIERS_TEST_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/node_hash_map.h b/client/webrtc/webrtc_demo/third/include/absl/container/node_hash_map.h deleted file mode 100644 index 7a39f62..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/node_hash_map.h +++ /dev/null @@ -1,597 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: node_hash_map.h -// ----------------------------------------------------------------------------- -// -// An `absl::node_hash_map` is an unordered associative container of -// unique keys and associated values designed to be a more efficient replacement -// for `std::unordered_map`. Like `unordered_map`, search, insertion, and -// deletion of map elements can be done as an `O(1)` operation. However, -// `node_hash_map` (and other unordered associative containers known as the -// collection of Abseil "Swiss tables") contain other optimizations that result -// in both memory and computation advantages. -// -// In most cases, your default choice for a hash map should be a map of type -// `flat_hash_map`. However, if you need pointer stability and cannot store -// a `flat_hash_map` with `unique_ptr` elements, a `node_hash_map` may be a -// valid alternative. As well, if you are migrating your code from using -// `std::unordered_map`, a `node_hash_map` provides a more straightforward -// migration, because it guarantees pointer stability. Consider migrating to -// `node_hash_map` and perhaps converting to a more efficient `flat_hash_map` -// upon further review. - -#ifndef ABSL_CONTAINER_NODE_HASH_MAP_H_ -#define ABSL_CONTAINER_NODE_HASH_MAP_H_ - -#include -#include -#include - -#include "absl/algorithm/container.h" -#include "absl/container/internal/container_memory.h" -#include "absl/container/internal/hash_function_defaults.h" // IWYU pragma: export -#include "absl/container/internal/node_hash_policy.h" -#include "absl/container/internal/raw_hash_map.h" // IWYU pragma: export -#include "absl/memory/memory.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { -template -class NodeHashMapPolicy; -} // namespace container_internal - -// ----------------------------------------------------------------------------- -// absl::node_hash_map -// ----------------------------------------------------------------------------- -// -// An `absl::node_hash_map` is an unordered associative container which -// has been optimized for both speed and memory footprint in most common use -// cases. Its interface is similar to that of `std::unordered_map` with -// the following notable differences: -// -// * Supports heterogeneous lookup, through `find()`, `operator[]()` and -// `insert()`, provided that the map is provided a compatible heterogeneous -// hashing function and equality operator. -// * Contains a `capacity()` member function indicating the number of element -// slots (open, deleted, and empty) within the hash map. -// * Returns `void` from the `erase(iterator)` overload. -// -// By default, `node_hash_map` uses the `absl::Hash` hashing framework. -// All fundamental and Abseil types that support the `absl::Hash` framework have -// a compatible equality operator for comparing insertions into `node_hash_map`. -// If your type is not yet supported by the `absl::Hash` framework, see -// absl/hash/hash.h for information on extending Abseil hashing to user-defined -// types. -// -// Example: -// -// // Create a node hash map of three strings (that map to strings) -// absl::node_hash_map ducks = -// {{"a", "huey"}, {"b", "dewey"}, {"c", "louie"}}; -// -// // Insert a new element into the node hash map -// ducks.insert({"d", "donald"}}; -// -// // Force a rehash of the node hash map -// ducks.rehash(0); -// -// // Find the element with the key "b" -// std::string search_key = "b"; -// auto result = ducks.find(search_key); -// if (result != ducks.end()) { -// std::cout << "Result: " << result->second << std::endl; -// } -template , - class Eq = absl::container_internal::hash_default_eq, - class Alloc = std::allocator>> -class node_hash_map - : public absl::container_internal::raw_hash_map< - absl::container_internal::NodeHashMapPolicy, Hash, Eq, - Alloc> { - using Base = typename node_hash_map::raw_hash_map; - - public: - // Constructors and Assignment Operators - // - // A node_hash_map supports the same overload set as `std::unordered_map` - // for construction and assignment: - // - // * Default constructor - // - // // No allocation for the table's elements is made. - // absl::node_hash_map map1; - // - // * Initializer List constructor - // - // absl::node_hash_map map2 = - // {{1, "huey"}, {2, "dewey"}, {3, "louie"},}; - // - // * Copy constructor - // - // absl::node_hash_map map3(map2); - // - // * Copy assignment operator - // - // // Hash functor and Comparator are copied as well - // absl::node_hash_map map4; - // map4 = map3; - // - // * Move constructor - // - // // Move is guaranteed efficient - // absl::node_hash_map map5(std::move(map4)); - // - // * Move assignment operator - // - // // May be efficient if allocators are compatible - // absl::node_hash_map map6; - // map6 = std::move(map5); - // - // * Range constructor - // - // std::vector> v = {{1, "a"}, {2, "b"}}; - // absl::node_hash_map map7(v.begin(), v.end()); - node_hash_map() {} - using Base::Base; - - // node_hash_map::begin() - // - // Returns an iterator to the beginning of the `node_hash_map`. - using Base::begin; - - // node_hash_map::cbegin() - // - // Returns a const iterator to the beginning of the `node_hash_map`. - using Base::cbegin; - - // node_hash_map::cend() - // - // Returns a const iterator to the end of the `node_hash_map`. - using Base::cend; - - // node_hash_map::end() - // - // Returns an iterator to the end of the `node_hash_map`. - using Base::end; - - // node_hash_map::capacity() - // - // Returns the number of element slots (assigned, deleted, and empty) - // available within the `node_hash_map`. - // - // NOTE: this member function is particular to `absl::node_hash_map` and is - // not provided in the `std::unordered_map` API. - using Base::capacity; - - // node_hash_map::empty() - // - // Returns whether or not the `node_hash_map` is empty. - using Base::empty; - - // node_hash_map::max_size() - // - // Returns the largest theoretical possible number of elements within a - // `node_hash_map` under current memory constraints. This value can be thought - // of as the largest value of `std::distance(begin(), end())` for a - // `node_hash_map`. - using Base::max_size; - - // node_hash_map::size() - // - // Returns the number of elements currently within the `node_hash_map`. - using Base::size; - - // node_hash_map::clear() - // - // Removes all elements from the `node_hash_map`. Invalidates any references, - // pointers, or iterators referring to contained elements. - // - // NOTE: this operation may shrink the underlying buffer. To avoid shrinking - // the underlying buffer call `erase(begin(), end())`. - using Base::clear; - - // node_hash_map::erase() - // - // Erases elements within the `node_hash_map`. Erasing does not trigger a - // rehash. Overloads are listed below. - // - // void erase(const_iterator pos): - // - // Erases the element at `position` of the `node_hash_map`, returning - // `void`. - // - // NOTE: this return behavior is different than that of STL containers in - // general and `std::unordered_map` in particular. - // - // iterator erase(const_iterator first, const_iterator last): - // - // Erases the elements in the open interval [`first`, `last`), returning an - // iterator pointing to `last`. - // - // size_type erase(const key_type& key): - // - // Erases the element with the matching key, if it exists, returning the - // number of elements erased (0 or 1). - using Base::erase; - - // node_hash_map::insert() - // - // Inserts an element of the specified value into the `node_hash_map`, - // returning an iterator pointing to the newly inserted element, provided that - // an element with the given key does not already exist. If rehashing occurs - // due to the insertion, all iterators are invalidated. Overloads are listed - // below. - // - // std::pair insert(const init_type& value): - // - // Inserts a value into the `node_hash_map`. Returns a pair consisting of an - // iterator to the inserted element (or to the element that prevented the - // insertion) and a `bool` denoting whether the insertion took place. - // - // std::pair insert(T&& value): - // std::pair insert(init_type&& value): - // - // Inserts a moveable value into the `node_hash_map`. Returns a `std::pair` - // consisting of an iterator to the inserted element (or to the element that - // prevented the insertion) and a `bool` denoting whether the insertion took - // place. - // - // iterator insert(const_iterator hint, const init_type& value): - // iterator insert(const_iterator hint, T&& value): - // iterator insert(const_iterator hint, init_type&& value); - // - // Inserts a value, using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. Returns an iterator to the - // inserted element, or to the existing element that prevented the - // insertion. - // - // void insert(InputIterator first, InputIterator last): - // - // Inserts a range of values [`first`, `last`). - // - // NOTE: Although the STL does not specify which element may be inserted if - // multiple keys compare equivalently, for `node_hash_map` we guarantee the - // first match is inserted. - // - // void insert(std::initializer_list ilist): - // - // Inserts the elements within the initializer list `ilist`. - // - // NOTE: Although the STL does not specify which element may be inserted if - // multiple keys compare equivalently within the initializer list, for - // `node_hash_map` we guarantee the first match is inserted. - using Base::insert; - - // node_hash_map::insert_or_assign() - // - // Inserts an element of the specified value into the `node_hash_map` provided - // that a value with the given key does not already exist, or replaces it with - // the element value if a key for that value already exists, returning an - // iterator pointing to the newly inserted element. If rehashing occurs due to - // the insertion, all iterators are invalidated. Overloads are listed - // below. - // - // std::pair insert_or_assign(const init_type& k, T&& obj): - // std::pair insert_or_assign(init_type&& k, T&& obj): - // - // Inserts/Assigns (or moves) the element of the specified key into the - // `node_hash_map`. - // - // iterator insert_or_assign(const_iterator hint, - // const init_type& k, T&& obj): - // iterator insert_or_assign(const_iterator hint, init_type&& k, T&& obj): - // - // Inserts/Assigns (or moves) the element of the specified key into the - // `node_hash_map` using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. - using Base::insert_or_assign; - - // node_hash_map::emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `node_hash_map`, provided that no element with the given key - // already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. Prefer `try_emplace()` unless your key is not - // copyable or moveable. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - using Base::emplace; - - // node_hash_map::emplace_hint() - // - // Inserts an element of the specified value by constructing it in-place - // within the `node_hash_map`, using the position of `hint` as a non-binding - // suggestion for where to begin the insertion search, and only inserts - // provided that no element with the given key already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. Prefer `try_emplace()` unless your key is not - // copyable or moveable. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - using Base::emplace_hint; - - // node_hash_map::try_emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `node_hash_map`, provided that no element with the given key - // already exists. Unlike `emplace()`, if an element with the given key - // already exists, we guarantee that no element is constructed. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - // Overloads are listed below. - // - // std::pair try_emplace(const key_type& k, Args&&... args): - // std::pair try_emplace(key_type&& k, Args&&... args): - // - // Inserts (via copy or move) the element of the specified key into the - // `node_hash_map`. - // - // iterator try_emplace(const_iterator hint, - // const init_type& k, Args&&... args): - // iterator try_emplace(const_iterator hint, init_type&& k, Args&&... args): - // - // Inserts (via copy or move) the element of the specified key into the - // `node_hash_map` using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. - // - // All `try_emplace()` overloads make the same guarantees regarding rvalue - // arguments as `std::unordered_map::try_emplace()`, namely that these - // functions will not move from rvalue arguments if insertions do not happen. - using Base::try_emplace; - - // node_hash_map::extract() - // - // Extracts the indicated element, erasing it in the process, and returns it - // as a C++17-compatible node handle. Overloads are listed below. - // - // node_type extract(const_iterator position): - // - // Extracts the key,value pair of the element at the indicated position and - // returns a node handle owning that extracted data. - // - // node_type extract(const key_type& x): - // - // Extracts the key,value pair of the element with a key matching the passed - // key value and returns a node handle owning that extracted data. If the - // `node_hash_map` does not contain an element with a matching key, this - // function returns an empty node handle. - // - // NOTE: when compiled in an earlier version of C++ than C++17, - // `node_type::key()` returns a const reference to the key instead of a - // mutable reference. We cannot safely return a mutable reference without - // std::launder (which is not available before C++17). - using Base::extract; - - // node_hash_map::merge() - // - // Extracts elements from a given `source` node hash map into this - // `node_hash_map`. If the destination `node_hash_map` already contains an - // element with an equivalent key, that element is not extracted. - using Base::merge; - - // node_hash_map::swap(node_hash_map& other) - // - // Exchanges the contents of this `node_hash_map` with those of the `other` - // node hash map, avoiding invocation of any move, copy, or swap operations on - // individual elements. - // - // All iterators and references on the `node_hash_map` remain valid, excepting - // for the past-the-end iterator, which is invalidated. - // - // `swap()` requires that the node hash map's hashing and key equivalence - // functions be Swappable, and are exchaged using unqualified calls to - // non-member `swap()`. If the map's allocator has - // `std::allocator_traits::propagate_on_container_swap::value` - // set to `true`, the allocators are also exchanged using an unqualified call - // to non-member `swap()`; otherwise, the allocators are not swapped. - using Base::swap; - - // node_hash_map::rehash(count) - // - // Rehashes the `node_hash_map`, setting the number of slots to be at least - // the passed value. If the new number of slots increases the load factor more - // than the current maximum load factor - // (`count` < `size()` / `max_load_factor()`), then the new number of slots - // will be at least `size()` / `max_load_factor()`. - // - // To force a rehash, pass rehash(0). - using Base::rehash; - - // node_hash_map::reserve(count) - // - // Sets the number of slots in the `node_hash_map` to the number needed to - // accommodate at least `count` total elements without exceeding the current - // maximum load factor, and may rehash the container if needed. - using Base::reserve; - - // node_hash_map::at() - // - // Returns a reference to the mapped value of the element with key equivalent - // to the passed key. - using Base::at; - - // node_hash_map::contains() - // - // Determines whether an element with a key comparing equal to the given `key` - // exists within the `node_hash_map`, returning `true` if so or `false` - // otherwise. - using Base::contains; - - // node_hash_map::count(const Key& key) const - // - // Returns the number of elements with a key comparing equal to the given - // `key` within the `node_hash_map`. note that this function will return - // either `1` or `0` since duplicate keys are not allowed within a - // `node_hash_map`. - using Base::count; - - // node_hash_map::equal_range() - // - // Returns a closed range [first, last], defined by a `std::pair` of two - // iterators, containing all elements with the passed key in the - // `node_hash_map`. - using Base::equal_range; - - // node_hash_map::find() - // - // Finds an element with the passed `key` within the `node_hash_map`. - using Base::find; - - // node_hash_map::operator[]() - // - // Returns a reference to the value mapped to the passed key within the - // `node_hash_map`, performing an `insert()` if the key does not already - // exist. If an insertion occurs and results in a rehashing of the container, - // all iterators are invalidated. Otherwise iterators are not affected and - // references are not invalidated. Overloads are listed below. - // - // T& operator[](const Key& key): - // - // Inserts an init_type object constructed in-place if the element with the - // given key does not exist. - // - // T& operator[](Key&& key): - // - // Inserts an init_type object constructed in-place provided that an element - // with the given key does not exist. - using Base::operator[]; - - // node_hash_map::bucket_count() - // - // Returns the number of "buckets" within the `node_hash_map`. - using Base::bucket_count; - - // node_hash_map::load_factor() - // - // Returns the current load factor of the `node_hash_map` (the average number - // of slots occupied with a value within the hash map). - using Base::load_factor; - - // node_hash_map::max_load_factor() - // - // Manages the maximum load factor of the `node_hash_map`. Overloads are - // listed below. - // - // float node_hash_map::max_load_factor() - // - // Returns the current maximum load factor of the `node_hash_map`. - // - // void node_hash_map::max_load_factor(float ml) - // - // Sets the maximum load factor of the `node_hash_map` to the passed value. - // - // NOTE: This overload is provided only for API compatibility with the STL; - // `node_hash_map` will ignore any set load factor and manage its rehashing - // internally as an implementation detail. - using Base::max_load_factor; - - // node_hash_map::get_allocator() - // - // Returns the allocator function associated with this `node_hash_map`. - using Base::get_allocator; - - // node_hash_map::hash_function() - // - // Returns the hashing function used to hash the keys within this - // `node_hash_map`. - using Base::hash_function; - - // node_hash_map::key_eq() - // - // Returns the function used for comparing keys equality. - using Base::key_eq; -}; - -// erase_if(node_hash_map<>, Pred) -// -// Erases all elements that satisfy the predicate `pred` from the container `c`. -template -void erase_if(node_hash_map& c, Predicate pred) { - container_internal::EraseIf(pred, &c); -} - -namespace container_internal { - -template -class NodeHashMapPolicy - : public absl::container_internal::node_hash_policy< - std::pair&, NodeHashMapPolicy> { - using value_type = std::pair; - - public: - using key_type = Key; - using mapped_type = Value; - using init_type = std::pair; - - template - static value_type* new_element(Allocator* alloc, Args&&... args) { - using PairAlloc = typename absl::allocator_traits< - Allocator>::template rebind_alloc; - PairAlloc pair_alloc(*alloc); - value_type* res = - absl::allocator_traits::allocate(pair_alloc, 1); - absl::allocator_traits::construct(pair_alloc, res, - std::forward(args)...); - return res; - } - - template - static void delete_element(Allocator* alloc, value_type* pair) { - using PairAlloc = typename absl::allocator_traits< - Allocator>::template rebind_alloc; - PairAlloc pair_alloc(*alloc); - absl::allocator_traits::destroy(pair_alloc, pair); - absl::allocator_traits::deallocate(pair_alloc, pair, 1); - } - - template - static decltype(absl::container_internal::DecomposePair( - std::declval(), std::declval()...)) - apply(F&& f, Args&&... args) { - return absl::container_internal::DecomposePair(std::forward(f), - std::forward(args)...); - } - - static size_t element_space_used(const value_type*) { - return sizeof(value_type); - } - - static Value& value(value_type* elem) { return elem->second; } - static const Value& value(const value_type* elem) { return elem->second; } -}; -} // namespace container_internal - -namespace container_algorithm_internal { - -// Specialization of trait in absl/algorithm/container.h -template -struct IsUnorderedContainer< - absl::node_hash_map> : std::true_type {}; - -} // namespace container_algorithm_internal - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_NODE_HASH_MAP_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/container/node_hash_set.h b/client/webrtc/webrtc_demo/third/include/absl/container/node_hash_set.h deleted file mode 100644 index 93b15f4..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/container/node_hash_set.h +++ /dev/null @@ -1,493 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: node_hash_set.h -// ----------------------------------------------------------------------------- -// -// An `absl::node_hash_set` is an unordered associative container designed to -// be a more efficient replacement for `std::unordered_set`. Like -// `unordered_set`, search, insertion, and deletion of set elements can be done -// as an `O(1)` operation. However, `node_hash_set` (and other unordered -// associative containers known as the collection of Abseil "Swiss tables") -// contain other optimizations that result in both memory and computation -// advantages. -// -// In most cases, your default choice for a hash table should be a map of type -// `flat_hash_map` or a set of type `flat_hash_set`. However, if you need -// pointer stability, a `node_hash_set` should be your preferred choice. As -// well, if you are migrating your code from using `std::unordered_set`, a -// `node_hash_set` should be an easy migration. Consider migrating to -// `node_hash_set` and perhaps converting to a more efficient `flat_hash_set` -// upon further review. - -#ifndef ABSL_CONTAINER_NODE_HASH_SET_H_ -#define ABSL_CONTAINER_NODE_HASH_SET_H_ - -#include - -#include "absl/algorithm/container.h" -#include "absl/container/internal/hash_function_defaults.h" // IWYU pragma: export -#include "absl/container/internal/node_hash_policy.h" -#include "absl/container/internal/raw_hash_set.h" // IWYU pragma: export -#include "absl/memory/memory.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace container_internal { -template -struct NodeHashSetPolicy; -} // namespace container_internal - -// ----------------------------------------------------------------------------- -// absl::node_hash_set -// ----------------------------------------------------------------------------- -// -// An `absl::node_hash_set` is an unordered associative container which -// has been optimized for both speed and memory footprint in most common use -// cases. Its interface is similar to that of `std::unordered_set` with the -// following notable differences: -// -// * Supports heterogeneous lookup, through `find()`, `operator[]()` and -// `insert()`, provided that the set is provided a compatible heterogeneous -// hashing function and equality operator. -// * Contains a `capacity()` member function indicating the number of element -// slots (open, deleted, and empty) within the hash set. -// * Returns `void` from the `erase(iterator)` overload. -// -// By default, `node_hash_set` uses the `absl::Hash` hashing framework. -// All fundamental and Abseil types that support the `absl::Hash` framework have -// a compatible equality operator for comparing insertions into `node_hash_set`. -// If your type is not yet supported by the `absl::Hash` framework, see -// absl/hash/hash.h for information on extending Abseil hashing to user-defined -// types. -// -// Example: -// -// // Create a node hash set of three strings -// absl::node_hash_set ducks = -// {"huey", "dewey", "louie"}; -// -// // Insert a new element into the node hash set -// ducks.insert("donald"); -// -// // Force a rehash of the node hash set -// ducks.rehash(0); -// -// // See if "dewey" is present -// if (ducks.contains("dewey")) { -// std::cout << "We found dewey!" << std::endl; -// } -template , - class Eq = absl::container_internal::hash_default_eq, - class Alloc = std::allocator> -class node_hash_set - : public absl::container_internal::raw_hash_set< - absl::container_internal::NodeHashSetPolicy, Hash, Eq, Alloc> { - using Base = typename node_hash_set::raw_hash_set; - - public: - // Constructors and Assignment Operators - // - // A node_hash_set supports the same overload set as `std::unordered_set` - // for construction and assignment: - // - // * Default constructor - // - // // No allocation for the table's elements is made. - // absl::node_hash_set set1; - // - // * Initializer List constructor - // - // absl::node_hash_set set2 = - // {{"huey"}, {"dewey"}, {"louie"}}; - // - // * Copy constructor - // - // absl::node_hash_set set3(set2); - // - // * Copy assignment operator - // - // // Hash functor and Comparator are copied as well - // absl::node_hash_set set4; - // set4 = set3; - // - // * Move constructor - // - // // Move is guaranteed efficient - // absl::node_hash_set set5(std::move(set4)); - // - // * Move assignment operator - // - // // May be efficient if allocators are compatible - // absl::node_hash_set set6; - // set6 = std::move(set5); - // - // * Range constructor - // - // std::vector v = {"a", "b"}; - // absl::node_hash_set set7(v.begin(), v.end()); - node_hash_set() {} - using Base::Base; - - // node_hash_set::begin() - // - // Returns an iterator to the beginning of the `node_hash_set`. - using Base::begin; - - // node_hash_set::cbegin() - // - // Returns a const iterator to the beginning of the `node_hash_set`. - using Base::cbegin; - - // node_hash_set::cend() - // - // Returns a const iterator to the end of the `node_hash_set`. - using Base::cend; - - // node_hash_set::end() - // - // Returns an iterator to the end of the `node_hash_set`. - using Base::end; - - // node_hash_set::capacity() - // - // Returns the number of element slots (assigned, deleted, and empty) - // available within the `node_hash_set`. - // - // NOTE: this member function is particular to `absl::node_hash_set` and is - // not provided in the `std::unordered_set` API. - using Base::capacity; - - // node_hash_set::empty() - // - // Returns whether or not the `node_hash_set` is empty. - using Base::empty; - - // node_hash_set::max_size() - // - // Returns the largest theoretical possible number of elements within a - // `node_hash_set` under current memory constraints. This value can be thought - // of the largest value of `std::distance(begin(), end())` for a - // `node_hash_set`. - using Base::max_size; - - // node_hash_set::size() - // - // Returns the number of elements currently within the `node_hash_set`. - using Base::size; - - // node_hash_set::clear() - // - // Removes all elements from the `node_hash_set`. Invalidates any references, - // pointers, or iterators referring to contained elements. - // - // NOTE: this operation may shrink the underlying buffer. To avoid shrinking - // the underlying buffer call `erase(begin(), end())`. - using Base::clear; - - // node_hash_set::erase() - // - // Erases elements within the `node_hash_set`. Erasing does not trigger a - // rehash. Overloads are listed below. - // - // void erase(const_iterator pos): - // - // Erases the element at `position` of the `node_hash_set`, returning - // `void`. - // - // NOTE: this return behavior is different than that of STL containers in - // general and `std::unordered_set` in particular. - // - // iterator erase(const_iterator first, const_iterator last): - // - // Erases the elements in the open interval [`first`, `last`), returning an - // iterator pointing to `last`. - // - // size_type erase(const key_type& key): - // - // Erases the element with the matching key, if it exists, returning the - // number of elements erased (0 or 1). - using Base::erase; - - // node_hash_set::insert() - // - // Inserts an element of the specified value into the `node_hash_set`, - // returning an iterator pointing to the newly inserted element, provided that - // an element with the given key does not already exist. If rehashing occurs - // due to the insertion, all iterators are invalidated. Overloads are listed - // below. - // - // std::pair insert(const T& value): - // - // Inserts a value into the `node_hash_set`. Returns a pair consisting of an - // iterator to the inserted element (or to the element that prevented the - // insertion) and a bool denoting whether the insertion took place. - // - // std::pair insert(T&& value): - // - // Inserts a moveable value into the `node_hash_set`. Returns a pair - // consisting of an iterator to the inserted element (or to the element that - // prevented the insertion) and a bool denoting whether the insertion took - // place. - // - // iterator insert(const_iterator hint, const T& value): - // iterator insert(const_iterator hint, T&& value): - // - // Inserts a value, using the position of `hint` as a non-binding suggestion - // for where to begin the insertion search. Returns an iterator to the - // inserted element, or to the existing element that prevented the - // insertion. - // - // void insert(InputIterator first, InputIterator last): - // - // Inserts a range of values [`first`, `last`). - // - // NOTE: Although the STL does not specify which element may be inserted if - // multiple keys compare equivalently, for `node_hash_set` we guarantee the - // first match is inserted. - // - // void insert(std::initializer_list ilist): - // - // Inserts the elements within the initializer list `ilist`. - // - // NOTE: Although the STL does not specify which element may be inserted if - // multiple keys compare equivalently within the initializer list, for - // `node_hash_set` we guarantee the first match is inserted. - using Base::insert; - - // node_hash_set::emplace() - // - // Inserts an element of the specified value by constructing it in-place - // within the `node_hash_set`, provided that no element with the given key - // already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - using Base::emplace; - - // node_hash_set::emplace_hint() - // - // Inserts an element of the specified value by constructing it in-place - // within the `node_hash_set`, using the position of `hint` as a non-binding - // suggestion for where to begin the insertion search, and only inserts - // provided that no element with the given key already exists. - // - // The element may be constructed even if there already is an element with the - // key in the container, in which case the newly constructed element will be - // destroyed immediately. - // - // If rehashing occurs due to the insertion, all iterators are invalidated. - using Base::emplace_hint; - - // node_hash_set::extract() - // - // Extracts the indicated element, erasing it in the process, and returns it - // as a C++17-compatible node handle. Overloads are listed below. - // - // node_type extract(const_iterator position): - // - // Extracts the element at the indicated position and returns a node handle - // owning that extracted data. - // - // node_type extract(const key_type& x): - // - // Extracts the element with the key matching the passed key value and - // returns a node handle owning that extracted data. If the `node_hash_set` - // does not contain an element with a matching key, this function returns an - // empty node handle. - using Base::extract; - - // node_hash_set::merge() - // - // Extracts elements from a given `source` node hash set into this - // `node_hash_set`. If the destination `node_hash_set` already contains an - // element with an equivalent key, that element is not extracted. - using Base::merge; - - // node_hash_set::swap(node_hash_set& other) - // - // Exchanges the contents of this `node_hash_set` with those of the `other` - // node hash set, avoiding invocation of any move, copy, or swap operations on - // individual elements. - // - // All iterators and references on the `node_hash_set` remain valid, excepting - // for the past-the-end iterator, which is invalidated. - // - // `swap()` requires that the node hash set's hashing and key equivalence - // functions be Swappable, and are exchaged using unqualified calls to - // non-member `swap()`. If the set's allocator has - // `std::allocator_traits::propagate_on_container_swap::value` - // set to `true`, the allocators are also exchanged using an unqualified call - // to non-member `swap()`; otherwise, the allocators are not swapped. - using Base::swap; - - // node_hash_set::rehash(count) - // - // Rehashes the `node_hash_set`, setting the number of slots to be at least - // the passed value. If the new number of slots increases the load factor more - // than the current maximum load factor - // (`count` < `size()` / `max_load_factor()`), then the new number of slots - // will be at least `size()` / `max_load_factor()`. - // - // To force a rehash, pass rehash(0). - // - // NOTE: unlike behavior in `std::unordered_set`, references are also - // invalidated upon a `rehash()`. - using Base::rehash; - - // node_hash_set::reserve(count) - // - // Sets the number of slots in the `node_hash_set` to the number needed to - // accommodate at least `count` total elements without exceeding the current - // maximum load factor, and may rehash the container if needed. - using Base::reserve; - - // node_hash_set::contains() - // - // Determines whether an element comparing equal to the given `key` exists - // within the `node_hash_set`, returning `true` if so or `false` otherwise. - using Base::contains; - - // node_hash_set::count(const Key& key) const - // - // Returns the number of elements comparing equal to the given `key` within - // the `node_hash_set`. note that this function will return either `1` or `0` - // since duplicate elements are not allowed within a `node_hash_set`. - using Base::count; - - // node_hash_set::equal_range() - // - // Returns a closed range [first, last], defined by a `std::pair` of two - // iterators, containing all elements with the passed key in the - // `node_hash_set`. - using Base::equal_range; - - // node_hash_set::find() - // - // Finds an element with the passed `key` within the `node_hash_set`. - using Base::find; - - // node_hash_set::bucket_count() - // - // Returns the number of "buckets" within the `node_hash_set`. Note that - // because a node hash set contains all elements within its internal storage, - // this value simply equals the current capacity of the `node_hash_set`. - using Base::bucket_count; - - // node_hash_set::load_factor() - // - // Returns the current load factor of the `node_hash_set` (the average number - // of slots occupied with a value within the hash set). - using Base::load_factor; - - // node_hash_set::max_load_factor() - // - // Manages the maximum load factor of the `node_hash_set`. Overloads are - // listed below. - // - // float node_hash_set::max_load_factor() - // - // Returns the current maximum load factor of the `node_hash_set`. - // - // void node_hash_set::max_load_factor(float ml) - // - // Sets the maximum load factor of the `node_hash_set` to the passed value. - // - // NOTE: This overload is provided only for API compatibility with the STL; - // `node_hash_set` will ignore any set load factor and manage its rehashing - // internally as an implementation detail. - using Base::max_load_factor; - - // node_hash_set::get_allocator() - // - // Returns the allocator function associated with this `node_hash_set`. - using Base::get_allocator; - - // node_hash_set::hash_function() - // - // Returns the hashing function used to hash the keys within this - // `node_hash_set`. - using Base::hash_function; - - // node_hash_set::key_eq() - // - // Returns the function used for comparing keys equality. - using Base::key_eq; -}; - -// erase_if(node_hash_set<>, Pred) -// -// Erases all elements that satisfy the predicate `pred` from the container `c`. -template -void erase_if(node_hash_set& c, Predicate pred) { - container_internal::EraseIf(pred, &c); -} - -namespace container_internal { - -template -struct NodeHashSetPolicy - : absl::container_internal::node_hash_policy> { - using key_type = T; - using init_type = T; - using constant_iterators = std::true_type; - - template - static T* new_element(Allocator* alloc, Args&&... args) { - using ValueAlloc = - typename absl::allocator_traits::template rebind_alloc; - ValueAlloc value_alloc(*alloc); - T* res = absl::allocator_traits::allocate(value_alloc, 1); - absl::allocator_traits::construct(value_alloc, res, - std::forward(args)...); - return res; - } - - template - static void delete_element(Allocator* alloc, T* elem) { - using ValueAlloc = - typename absl::allocator_traits::template rebind_alloc; - ValueAlloc value_alloc(*alloc); - absl::allocator_traits::destroy(value_alloc, elem); - absl::allocator_traits::deallocate(value_alloc, elem, 1); - } - - template - static decltype(absl::container_internal::DecomposeValue( - std::declval(), std::declval()...)) - apply(F&& f, Args&&... args) { - return absl::container_internal::DecomposeValue( - std::forward(f), std::forward(args)...); - } - - static size_t element_space_used(const T*) { return sizeof(T); } -}; -} // namespace container_internal - -namespace container_algorithm_internal { - -// Specialization of trait in absl/algorithm/container.h -template -struct IsUnorderedContainer> - : std::true_type {}; - -} // namespace container_algorithm_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_CONTAINER_NODE_HASH_SET_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/failure_signal_handler.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/failure_signal_handler.h deleted file mode 100644 index 0c0f585..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/failure_signal_handler.h +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: failure_signal_handler.h -// ----------------------------------------------------------------------------- -// -// This file configures the Abseil *failure signal handler* to capture and dump -// useful debugging information (such as a stacktrace) upon program failure. -// -// To use the failure signal handler, call `absl::InstallFailureSignalHandler()` -// very early in your program, usually in the first few lines of main(): -// -// int main(int argc, char** argv) { -// // Initialize the symbolizer to get a human-readable stack trace -// absl::InitializeSymbolizer(argv[0]); -// -// absl::FailureSignalHandlerOptions options; -// absl::InstallFailureSignalHandler(options); -// DoSomethingInteresting(); -// return 0; -// } -// -// Any program that raises a fatal signal (such as `SIGSEGV`, `SIGILL`, -// `SIGFPE`, `SIGABRT`, `SIGTERM`, `SIGBUG`, and `SIGTRAP`) will call the -// installed failure signal handler and provide debugging information to stderr. -// -// Note that you should *not* install the Abseil failure signal handler more -// than once. You may, of course, have another (non-Abseil) failure signal -// handler installed (which would be triggered if Abseil's failure signal -// handler sets `call_previous_handler` to `true`). - -#ifndef ABSL_DEBUGGING_FAILURE_SIGNAL_HANDLER_H_ -#define ABSL_DEBUGGING_FAILURE_SIGNAL_HANDLER_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// FailureSignalHandlerOptions -// -// Struct for holding `absl::InstallFailureSignalHandler()` configuration -// options. -struct FailureSignalHandlerOptions { - // If true, try to symbolize the stacktrace emitted on failure, provided that - // you have initialized a symbolizer for that purpose. (See symbolize.h for - // more information.) - bool symbolize_stacktrace = true; - - // If true, try to run signal handlers on an alternate stack (if supported on - // the given platform). An alternate stack is useful for program crashes due - // to a stack overflow; by running on a alternate stack, the signal handler - // may run even when normal stack space has been exausted. The downside of - // using an alternate stack is that extra memory for the alternate stack needs - // to be pre-allocated. - bool use_alternate_stack = true; - - // If positive, indicates the number of seconds after which the failure signal - // handler is invoked to abort the program. Setting such an alarm is useful in - // cases where the failure signal handler itself may become hung or - // deadlocked. - int alarm_on_failure_secs = 3; - - // If true, call the previously registered signal handler for the signal that - // was received (if one was registered) after the existing signal handler - // runs. This mechanism can be used to chain signal handlers together. - // - // If false, the signal is raised to the default handler for that signal - // (which normally terminates the program). - // - // IMPORTANT: If true, the chained fatal signal handlers must not try to - // recover from the fatal signal. Instead, they should terminate the program - // via some mechanism, like raising the default handler for the signal, or by - // calling `_exit()`. Note that the failure signal handler may put parts of - // the Abseil library into a state from which they cannot recover. - bool call_previous_handler = false; - - // If non-null, indicates a pointer to a callback function that will be called - // upon failure, with a string argument containing failure data. This function - // may be used as a hook to write failure data to a secondary location, such - // as a log file. This function may also be called with null data, as a hint - // to flush any buffered data before the program may be terminated. Consider - // flushing any buffered data in all calls to this function. - // - // Since this function runs within a signal handler, it should be - // async-signal-safe if possible. - // See http://man7.org/linux/man-pages/man7/signal-safety.7.html - void (*writerfn)(const char*) = nullptr; -}; - -// InstallFailureSignalHandler() -// -// Installs a signal handler for the common failure signals `SIGSEGV`, `SIGILL`, -// `SIGFPE`, `SIGABRT`, `SIGTERM`, `SIGBUG`, and `SIGTRAP` (provided they exist -// on the given platform). The failure signal handler dumps program failure data -// useful for debugging in an unspecified format to stderr. This data may -// include the program counter, a stacktrace, and register information on some -// systems; do not rely on an exact format for the output, as it is subject to -// change. -void InstallFailureSignalHandler(const FailureSignalHandlerOptions& options); - -namespace debugging_internal { -const char* FailureSignalToString(int signo); -} // namespace debugging_internal - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_FAILURE_SIGNAL_HANDLER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/address_is_readable.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/address_is_readable.h deleted file mode 100644 index 4bbaf4d..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/address_is_readable.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_DEBUGGING_INTERNAL_ADDRESS_IS_READABLE_H_ -#define ABSL_DEBUGGING_INTERNAL_ADDRESS_IS_READABLE_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { - -// Return whether the byte at *addr is readable, without faulting. -// Save and restores errno. -bool AddressIsReadable(const void *addr); - -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_ADDRESS_IS_READABLE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/demangle.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/demangle.h deleted file mode 100644 index c314d9b..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/demangle.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// An async-signal-safe and thread-safe demangler for Itanium C++ ABI -// (aka G++ V3 ABI). -// -// The demangler is implemented to be used in async signal handlers to -// symbolize stack traces. We cannot use libstdc++'s -// abi::__cxa_demangle() in such signal handlers since it's not async -// signal safe (it uses malloc() internally). -// -// Note that this demangler doesn't support full demangling. More -// specifically, it doesn't print types of function parameters and -// types of template arguments. It just skips them. However, it's -// still very useful to extract basic information such as class, -// function, constructor, destructor, and operator names. -// -// See the implementation note in demangle.cc if you are interested. -// -// Example: -// -// | Mangled Name | The Demangler | abi::__cxa_demangle() -// |---------------|---------------|----------------------- -// | _Z1fv | f() | f() -// | _Z1fi | f() | f(int) -// | _Z3foo3bar | foo() | foo(bar) -// | _Z1fIiEvi | f<>() | void f(int) -// | _ZN1N1fE | N::f | N::f -// | _ZN3Foo3BarEv | Foo::Bar() | Foo::Bar() -// | _Zrm1XS_" | operator%() | operator%(X, X) -// | _ZN3FooC1Ev | Foo::Foo() | Foo::Foo() -// | _Z1fSs | f() | f(std::basic_string, -// | | | std::allocator >) -// -// See the unit test for more examples. -// -// Note: we might want to write demanglers for ABIs other than Itanium -// C++ ABI in the future. -// - -#ifndef ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_ -#define ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { - -// Demangle `mangled`. On success, return true and write the -// demangled symbol name to `out`. Otherwise, return false. -// `out` is modified even if demangling is unsuccessful. -bool Demangle(const char *mangled, char *out, int out_size); - -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_DEMANGLE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/elf_mem_image.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/elf_mem_image.h deleted file mode 100644 index 46bfade..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/elf_mem_image.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2017 The Abseil Authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Allow dynamic symbol lookup for in-memory Elf images. - -#ifndef ABSL_DEBUGGING_INTERNAL_ELF_MEM_IMAGE_H_ -#define ABSL_DEBUGGING_INTERNAL_ELF_MEM_IMAGE_H_ - -// Including this will define the __GLIBC__ macro if glibc is being -// used. -#include - -#include "absl/base/config.h" - -// Maybe one day we can rewrite this file not to require the elf -// symbol extensions in glibc, but for right now we need them. -#ifdef ABSL_HAVE_ELF_MEM_IMAGE -#error ABSL_HAVE_ELF_MEM_IMAGE cannot be directly set -#endif - -#if defined(__ELF__) && defined(__GLIBC__) && !defined(__native_client__) && \ - !defined(__asmjs__) && !defined(__wasm__) -#define ABSL_HAVE_ELF_MEM_IMAGE 1 -#endif - -#ifdef ABSL_HAVE_ELF_MEM_IMAGE - -#include // for ElfW - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { - -// An in-memory ELF image (may not exist on disk). -class ElfMemImage { - private: - // Sentinel: there could never be an elf image at &kInvalidBaseSentinel. - static const int kInvalidBaseSentinel; - - public: - // Sentinel: there could never be an elf image at this address. - static constexpr const void *const kInvalidBase = - static_cast(&kInvalidBaseSentinel); - - // Information about a single vdso symbol. - // All pointers are into .dynsym, .dynstr, or .text of the VDSO. - // Do not free() them or modify through them. - struct SymbolInfo { - const char *name; // E.g. "__vdso_getcpu" - const char *version; // E.g. "LINUX_2.6", could be "" - // for unversioned symbol. - const void *address; // Relocated symbol address. - const ElfW(Sym) *symbol; // Symbol in the dynamic symbol table. - }; - - // Supports iteration over all dynamic symbols. - class SymbolIterator { - public: - friend class ElfMemImage; - const SymbolInfo *operator->() const; - const SymbolInfo &operator*() const; - SymbolIterator& operator++(); - bool operator!=(const SymbolIterator &rhs) const; - bool operator==(const SymbolIterator &rhs) const; - private: - SymbolIterator(const void *const image, int index); - void Update(int incr); - SymbolInfo info_; - int index_; - const void *const image_; - }; - - - explicit ElfMemImage(const void *base); - void Init(const void *base); - bool IsPresent() const { return ehdr_ != nullptr; } - const ElfW(Phdr)* GetPhdr(int index) const; - const ElfW(Sym)* GetDynsym(int index) const; - const ElfW(Versym)* GetVersym(int index) const; - const ElfW(Verdef)* GetVerdef(int index) const; - const ElfW(Verdaux)* GetVerdefAux(const ElfW(Verdef) *verdef) const; - const char* GetDynstr(ElfW(Word) offset) const; - const void* GetSymAddr(const ElfW(Sym) *sym) const; - const char* GetVerstr(ElfW(Word) offset) const; - int GetNumSymbols() const; - - SymbolIterator begin() const; - SymbolIterator end() const; - - // Look up versioned dynamic symbol in the image. - // Returns false if image is not present, or doesn't contain given - // symbol/version/type combination. - // If info_out is non-null, additional details are filled in. - bool LookupSymbol(const char *name, const char *version, - int symbol_type, SymbolInfo *info_out) const; - - // Find info about symbol (if any) which overlaps given address. - // Returns true if symbol was found; false if image isn't present - // or doesn't have a symbol overlapping given address. - // If info_out is non-null, additional details are filled in. - bool LookupSymbolByAddress(const void *address, SymbolInfo *info_out) const; - - private: - const ElfW(Ehdr) *ehdr_; - const ElfW(Sym) *dynsym_; - const ElfW(Versym) *versym_; - const ElfW(Verdef) *verdef_; - const ElfW(Word) *hash_; - const char *dynstr_; - size_t strsize_; - size_t verdefnum_; - ElfW(Addr) link_base_; // Link-time base (p_vaddr of first PT_LOAD). -}; - -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_HAVE_ELF_MEM_IMAGE - -#endif // ABSL_DEBUGGING_INTERNAL_ELF_MEM_IMAGE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/examine_stack.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/examine_stack.h deleted file mode 100644 index 3933691..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/examine_stack.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ABSL_DEBUGGING_INTERNAL_EXAMINE_STACK_H_ -#define ABSL_DEBUGGING_INTERNAL_EXAMINE_STACK_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { - -// Returns the program counter from signal context, or nullptr if -// unknown. `vuc` is a ucontext_t*. We use void* to avoid the use of -// ucontext_t on non-POSIX systems. -void* GetProgramCounter(void* vuc); - -// Uses `writerfn` to dump the program counter, stack trace, and stack -// frame sizes. -void DumpPCAndFrameSizesAndStackTrace( - void* pc, void* const stack[], int frame_sizes[], int depth, - int min_dropped_frames, bool symbolize_stacktrace, - void (*writerfn)(const char*, void*), void* writerfn_arg); - -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_EXAMINE_STACK_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stack_consumption.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stack_consumption.h deleted file mode 100644 index 2b5e715..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stack_consumption.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Helper function for measuring stack consumption of signal handlers. - -#ifndef ABSL_DEBUGGING_INTERNAL_STACK_CONSUMPTION_H_ -#define ABSL_DEBUGGING_INTERNAL_STACK_CONSUMPTION_H_ - -#include "absl/base/config.h" - -// The code in this module is not portable. -// Use this feature test macro to detect its availability. -#ifdef ABSL_INTERNAL_HAVE_DEBUGGING_STACK_CONSUMPTION -#error ABSL_INTERNAL_HAVE_DEBUGGING_STACK_CONSUMPTION cannot be set directly -#elif !defined(__APPLE__) && !defined(_WIN32) && \ - (defined(__i386__) || defined(__x86_64__) || defined(__ppc__) || \ - defined(__aarch64__)) -#define ABSL_INTERNAL_HAVE_DEBUGGING_STACK_CONSUMPTION 1 - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { - -// Returns the stack consumption in bytes for the code exercised by -// signal_handler. To measure stack consumption, signal_handler is registered -// as a signal handler, so the code that it exercises must be async-signal -// safe. The argument of signal_handler is an implementation detail of signal -// handlers and should ignored by the code for signal_handler. Use global -// variables to pass information between your test code and signal_handler. -int GetSignalHandlerStackConsumption(void (*signal_handler)(int)); - -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_INTERNAL_HAVE_DEBUGGING_STACK_CONSUMPTION - -#endif // ABSL_DEBUGGING_INTERNAL_STACK_CONSUMPTION_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_aarch64-inl.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_aarch64-inl.inc deleted file mode 100644 index f4859d7..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_aarch64-inl.inc +++ /dev/null @@ -1,199 +0,0 @@ -#ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_AARCH64_INL_H_ -#define ABSL_DEBUGGING_INTERNAL_STACKTRACE_AARCH64_INL_H_ - -// Generate stack tracer for aarch64 - -#if defined(__linux__) -#include -#include -#include -#endif - -#include -#include -#include -#include - -#include "absl/base/attributes.h" -#include "absl/debugging/internal/address_is_readable.h" -#include "absl/debugging/internal/vdso_support.h" // a no-op on non-elf or non-glibc systems -#include "absl/debugging/stacktrace.h" - -static const uintptr_t kUnknownFrameSize = 0; - -#if defined(__linux__) -// Returns the address of the VDSO __kernel_rt_sigreturn function, if present. -static const unsigned char* GetKernelRtSigreturnAddress() { - constexpr uintptr_t kImpossibleAddress = 1; - ABSL_CONST_INIT static std::atomic memoized{kImpossibleAddress}; - uintptr_t address = memoized.load(std::memory_order_relaxed); - if (address != kImpossibleAddress) { - return reinterpret_cast(address); - } - - address = reinterpret_cast(nullptr); - -#ifdef ABSL_HAVE_VDSO_SUPPORT - absl::debugging_internal::VDSOSupport vdso; - if (vdso.IsPresent()) { - absl::debugging_internal::VDSOSupport::SymbolInfo symbol_info; - auto lookup = [&](int type) { - return vdso.LookupSymbol("__kernel_rt_sigreturn", "LINUX_2.6.39", type, - &symbol_info); - }; - if ((!lookup(STT_FUNC) && !lookup(STT_NOTYPE)) || - symbol_info.address == nullptr) { - // Unexpected: VDSO is present, yet the expected symbol is missing - // or null. - assert(false && "VDSO is present, but doesn't have expected symbol"); - } else { - if (reinterpret_cast(symbol_info.address) != - kImpossibleAddress) { - address = reinterpret_cast(symbol_info.address); - } else { - assert(false && "VDSO returned invalid address"); - } - } - } -#endif - - memoized.store(address, std::memory_order_relaxed); - return reinterpret_cast(address); -} -#endif // __linux__ - -// Compute the size of a stack frame in [low..high). We assume that -// low < high. Return size of kUnknownFrameSize. -template -static inline uintptr_t ComputeStackFrameSize(const T* low, - const T* high) { - const char* low_char_ptr = reinterpret_cast(low); - const char* high_char_ptr = reinterpret_cast(high); - return low < high ? high_char_ptr - low_char_ptr : kUnknownFrameSize; -} - -// Given a pointer to a stack frame, locate and return the calling -// stackframe, or return null if no stackframe can be found. Perform sanity -// checks (the strictness of which is controlled by the boolean parameter -// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. -template -ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack. -ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack. -static void **NextStackFrame(void **old_frame_pointer, const void *uc) { - void **new_frame_pointer = reinterpret_cast(*old_frame_pointer); - bool check_frame_size = true; - -#if defined(__linux__) - if (WITH_CONTEXT && uc != nullptr) { - // Check to see if next frame's return address is __kernel_rt_sigreturn. - if (old_frame_pointer[1] == GetKernelRtSigreturnAddress()) { - const ucontext_t *ucv = static_cast(uc); - // old_frame_pointer[0] is not suitable for unwinding, look at - // ucontext to discover frame pointer before signal. - void **const pre_signal_frame_pointer = - reinterpret_cast(ucv->uc_mcontext.regs[29]); - - // Check that alleged frame pointer is actually readable. This is to - // prevent "double fault" in case we hit the first fault due to e.g. - // stack corruption. - if (!absl::debugging_internal::AddressIsReadable( - pre_signal_frame_pointer)) - return nullptr; - - // Alleged frame pointer is readable, use it for further unwinding. - new_frame_pointer = pre_signal_frame_pointer; - - // Skip frame size check if we return from a signal. We may be using a - // an alternate stack for signals. - check_frame_size = false; - } - } -#endif - - // aarch64 ABI requires stack pointer to be 16-byte-aligned. - if ((reinterpret_cast(new_frame_pointer) & 15) != 0) - return nullptr; - - // Check frame size. In strict mode, we assume frames to be under - // 100,000 bytes. In non-strict mode, we relax the limit to 1MB. - if (check_frame_size) { - const uintptr_t max_size = STRICT_UNWINDING ? 100000 : 1000000; - const uintptr_t frame_size = - ComputeStackFrameSize(old_frame_pointer, new_frame_pointer); - if (frame_size == kUnknownFrameSize || frame_size > max_size) - return nullptr; - } - - return new_frame_pointer; -} - -template -ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack. -ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack. -static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count, - const void *ucp, int *min_dropped_frames) { -#ifdef __GNUC__ - void **frame_pointer = reinterpret_cast(__builtin_frame_address(0)); -#else -# error reading stack point not yet supported on this platform. -#endif - - skip_count++; // Skip the frame for this function. - int n = 0; - - // The frame pointer points to low address of a frame. The first 64-bit - // word of a frame points to the next frame up the call chain, which normally - // is just after the high address of the current frame. The second word of - // a frame contains return adress of to the caller. To find a pc value - // associated with the current frame, we need to go down a level in the call - // chain. So we remember return the address of the last frame seen. This - // does not work for the first stack frame, which belongs to UnwindImp() but - // we skip the frame for UnwindImp() anyway. - void* prev_return_address = nullptr; - - while (frame_pointer && n < max_depth) { - // The absl::GetStackFrames routine is called when we are in some - // informational context (the failure signal handler for example). - // Use the non-strict unwinding rules to produce a stack trace - // that is as complete as possible (even if it contains a few bogus - // entries in some rare cases). - void **next_frame_pointer = - NextStackFrame(frame_pointer, ucp); - - if (skip_count > 0) { - skip_count--; - } else { - result[n] = prev_return_address; - if (IS_STACK_FRAMES) { - sizes[n] = ComputeStackFrameSize(frame_pointer, next_frame_pointer); - } - n++; - } - prev_return_address = frame_pointer[1]; - frame_pointer = next_frame_pointer; - } - if (min_dropped_frames != nullptr) { - // Implementation detail: we clamp the max of frames we are willing to - // count, so as not to spend too much time in the loop below. - const int kMaxUnwind = 200; - int j = 0; - for (; frame_pointer != nullptr && j < kMaxUnwind; j++) { - frame_pointer = - NextStackFrame(frame_pointer, ucp); - } - *min_dropped_frames = j; - } - return n; -} - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { -bool StackTraceWorksForTest() { - return true; -} -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_AARCH64_INL_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_arm-inl.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_arm-inl.inc deleted file mode 100644 index 2a1bf2e..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_arm-inl.inc +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This is inspired by Craig Silverstein's PowerPC stacktrace code. - -#ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_ARM_INL_H_ -#define ABSL_DEBUGGING_INTERNAL_STACKTRACE_ARM_INL_H_ - -#include - -#include "absl/debugging/stacktrace.h" - -// WARNING: -// This only works if all your code is in either ARM or THUMB mode. With -// interworking, the frame pointer of the caller can either be in r11 (ARM -// mode) or r7 (THUMB mode). A callee only saves the frame pointer of its -// mode in a fixed location on its stack frame. If the caller is a different -// mode, there is no easy way to find the frame pointer. It can either be -// still in the designated register or saved on stack along with other callee -// saved registers. - -// Given a pointer to a stack frame, locate and return the calling -// stackframe, or return nullptr if no stackframe can be found. Perform sanity -// checks (the strictness of which is controlled by the boolean parameter -// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. -template -static void **NextStackFrame(void **old_sp) { - void **new_sp = (void**) old_sp[-1]; - - // Check that the transition from frame pointer old_sp to frame - // pointer new_sp isn't clearly bogus - if (STRICT_UNWINDING) { - // With the stack growing downwards, older stack frame must be - // at a greater address that the current one. - if (new_sp <= old_sp) return nullptr; - // Assume stack frames larger than 100,000 bytes are bogus. - if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return nullptr; - } else { - // In the non-strict mode, allow discontiguous stack frames. - // (alternate-signal-stacks for example). - if (new_sp == old_sp) return nullptr; - // And allow frames upto about 1MB. - if ((new_sp > old_sp) - && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return nullptr; - } - if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return nullptr; - return new_sp; -} - -// This ensures that absl::GetStackTrace sets up the Link Register properly. -#ifdef __GNUC__ -void StacktraceArmDummyFunction() __attribute__((noinline)); -void StacktraceArmDummyFunction() { __asm__ volatile(""); } -#else -# error StacktraceArmDummyFunction() needs to be ported to this platform. -#endif - -template -static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count, - const void * /* ucp */, int *min_dropped_frames) { -#ifdef __GNUC__ - void **sp = reinterpret_cast(__builtin_frame_address(0)); -#else -# error reading stack point not yet supported on this platform. -#endif - - // On ARM, the return address is stored in the link register (r14). - // This is not saved on the stack frame of a leaf function. To - // simplify code that reads return addresses, we call a dummy - // function so that the return address of this function is also - // stored in the stack frame. This works at least for gcc. - StacktraceArmDummyFunction(); - - int n = 0; - while (sp && n < max_depth) { - // The absl::GetStackFrames routine is called when we are in some - // informational context (the failure signal handler for example). - // Use the non-strict unwinding rules to produce a stack trace - // that is as complete as possible (even if it contains a few bogus - // entries in some rare cases). - void **next_sp = NextStackFrame(sp); - - if (skip_count > 0) { - skip_count--; - } else { - result[n] = *sp; - - if (IS_STACK_FRAMES) { - if (next_sp > sp) { - sizes[n] = (uintptr_t)next_sp - (uintptr_t)sp; - } else { - // A frame-size of 0 is used to indicate unknown frame size. - sizes[n] = 0; - } - } - n++; - } - sp = next_sp; - } - if (min_dropped_frames != nullptr) { - // Implementation detail: we clamp the max of frames we are willing to - // count, so as not to spend too much time in the loop below. - const int kMaxUnwind = 200; - int j = 0; - for (; sp != nullptr && j < kMaxUnwind; j++) { - sp = NextStackFrame(sp); - } - *min_dropped_frames = j; - } - return n; -} - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { -bool StackTraceWorksForTest() { - return false; -} -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_ARM_INL_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_config.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_config.h deleted file mode 100644 index cca410d..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_config.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2017 The Abseil Authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - - * Defines ABSL_STACKTRACE_INL_HEADER to the *-inl.h containing - * actual unwinder implementation. - * This header is "private" to stacktrace.cc. - * DO NOT include it into any other files. -*/ -#ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_ -#define ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_ - -#include "absl/base/config.h" - -#if defined(ABSL_STACKTRACE_INL_HEADER) -#error ABSL_STACKTRACE_INL_HEADER cannot be directly set - -#elif defined(_WIN32) -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_win32-inl.inc" - -#elif defined(__APPLE__) -#ifdef ABSL_HAVE_THREAD_LOCAL -// Thread local support required for UnwindImpl. -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_generic-inl.inc" -#endif - -#elif defined(__linux__) && !defined(__ANDROID__) - -#if defined(NO_FRAME_POINTER) && \ - (defined(__i386__) || defined(__x86_64__) || defined(__aarch64__)) -// Note: The libunwind-based implementation is not available to open-source -// users. -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_libunwind-inl.inc" -#define STACKTRACE_USES_LIBUNWIND 1 -#elif defined(NO_FRAME_POINTER) && defined(__has_include) -#if __has_include() -// Note: When using glibc this may require -funwind-tables to function properly. -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_generic-inl.inc" -#endif -#elif defined(__i386__) || defined(__x86_64__) -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_x86-inl.inc" -#elif defined(__ppc__) || defined(__PPC__) -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_powerpc-inl.inc" -#elif defined(__aarch64__) -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_aarch64-inl.inc" -#elif defined(__has_include) -#if __has_include() -// Note: When using glibc this may require -funwind-tables to function properly. -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_generic-inl.inc" -#endif -#endif - -#endif - -// Fallback to the empty implementation. -#if !defined(ABSL_STACKTRACE_INL_HEADER) -#define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_unimplemented-inl.inc" -#endif - -#endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_CONFIG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_generic-inl.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_generic-inl.inc deleted file mode 100644 index b94c612..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_generic-inl.inc +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Portable implementation - just use glibc -// -// Note: The glibc implementation may cause a call to malloc. -// This can cause a deadlock in HeapProfiler. - -#ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_GENERIC_INL_H_ -#define ABSL_DEBUGGING_INTERNAL_STACKTRACE_GENERIC_INL_H_ - -#include -#include -#include - -#include "absl/debugging/stacktrace.h" -#include "absl/base/attributes.h" - -// Sometimes, we can try to get a stack trace from within a stack -// trace, because we don't block signals inside this code (which would be too -// expensive: the two extra system calls per stack trace do matter here). -// That can cause a self-deadlock. -// Protect against such reentrant call by failing to get a stack trace. -// -// We use __thread here because the code here is extremely low level -- it is -// called while collecting stack traces from within malloc and mmap, and thus -// can not call anything which might call malloc or mmap itself. -static __thread int recursive = 0; - -// The stack trace function might be invoked very early in the program's -// execution (e.g. from the very first malloc if using tcmalloc). Also, the -// glibc implementation itself will trigger malloc the first time it is called. -// As such, we suppress usage of backtrace during this early stage of execution. -static std::atomic disable_stacktraces(true); // Disabled until healthy. - -template -static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count, - const void *ucp, int *min_dropped_frames) { - if (recursive || disable_stacktraces.load(std::memory_order_relaxed)) { - return 0; - } - ++recursive; - - static_cast(ucp); // Unused. - static const int kStackLength = 64; - void * stack[kStackLength]; - int size; - - size = backtrace(stack, kStackLength); - skip_count++; // we want to skip the current frame as well - int result_count = size - skip_count; - if (result_count < 0) - result_count = 0; - if (result_count > max_depth) - result_count = max_depth; - for (int i = 0; i < result_count; i++) - result[i] = stack[i + skip_count]; - - if (IS_STACK_FRAMES) { - // No implementation for finding out the stack frame sizes yet. - memset(sizes, 0, sizeof(*sizes) * result_count); - } - if (min_dropped_frames != nullptr) { - if (size - skip_count - max_depth > 0) { - *min_dropped_frames = size - skip_count - max_depth; - } else { - *min_dropped_frames = 0; - } - } - - --recursive; - - return result_count; -} - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { -bool StackTraceWorksForTest() { - return false; -} -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_GENERIC_INL_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_powerpc-inl.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_powerpc-inl.inc deleted file mode 100644 index cf8c051..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_powerpc-inl.inc +++ /dev/null @@ -1,253 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Produce stack trace. I'm guessing (hoping!) the code is much like -// for x86. For apple machines, at least, it seems to be; see -// https://developer.apple.com/documentation/mac/runtimehtml/RTArch-59.html -// https://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK -// Linux has similar code: http://patchwork.ozlabs.org/linuxppc/patch?id=8882 - -#ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_POWERPC_INL_H_ -#define ABSL_DEBUGGING_INTERNAL_STACKTRACE_POWERPC_INL_H_ - -#if defined(__linux__) -#include // for PT_NIP. -#include // for ucontext_t -#endif - -#include -#include -#include -#include - -#include "absl/base/attributes.h" -#include "absl/base/optimization.h" -#include "absl/base/port.h" -#include "absl/debugging/stacktrace.h" -#include "absl/debugging/internal/address_is_readable.h" -#include "absl/debugging/internal/vdso_support.h" // a no-op on non-elf or non-glibc systems - -// Given a stack pointer, return the saved link register value. -// Note that this is the link register for a callee. -static inline void *StacktracePowerPCGetLR(void **sp) { - // PowerPC has 3 main ABIs, which say where in the stack the - // Link Register is. For DARWIN and AIX (used by apple and - // linux ppc64), it's in sp[2]. For SYSV (used by linux ppc), - // it's in sp[1]. -#if defined(_CALL_AIX) || defined(_CALL_DARWIN) - return *(sp+2); -#elif defined(_CALL_SYSV) - return *(sp+1); -#elif defined(__APPLE__) || defined(__FreeBSD__) || \ - (defined(__linux__) && defined(__PPC64__)) - // This check is in case the compiler doesn't define _CALL_AIX/etc. - return *(sp+2); -#elif defined(__linux) - // This check is in case the compiler doesn't define _CALL_SYSV. - return *(sp+1); -#else -#error Need to specify the PPC ABI for your archiecture. -#endif -} - -// Given a pointer to a stack frame, locate and return the calling -// stackframe, or return null if no stackframe can be found. Perform sanity -// checks (the strictness of which is controlled by the boolean parameter -// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. -template -ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack. -ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack. -static void **NextStackFrame(void **old_sp, const void *uc) { - void **new_sp = (void **) *old_sp; - enum { kStackAlignment = 16 }; - - // Check that the transition from frame pointer old_sp to frame - // pointer new_sp isn't clearly bogus - if (STRICT_UNWINDING) { - // With the stack growing downwards, older stack frame must be - // at a greater address that the current one. - if (new_sp <= old_sp) return nullptr; - // Assume stack frames larger than 100,000 bytes are bogus. - if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return nullptr; - } else { - // In the non-strict mode, allow discontiguous stack frames. - // (alternate-signal-stacks for example). - if (new_sp == old_sp) return nullptr; - // And allow frames upto about 1MB. - if ((new_sp > old_sp) - && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return nullptr; - } - if ((uintptr_t)new_sp % kStackAlignment != 0) return nullptr; - -#if defined(__linux__) - enum StackTraceKernelSymbolStatus { - kNotInitialized = 0, kAddressValid, kAddressInvalid }; - - if (IS_WITH_CONTEXT && uc != nullptr) { - static StackTraceKernelSymbolStatus kernel_symbol_status = - kNotInitialized; // Sentinel: not computed yet. - // Initialize with sentinel value: __kernel_rt_sigtramp_rt64 can not - // possibly be there. - static const unsigned char *kernel_sigtramp_rt64_address = nullptr; - if (kernel_symbol_status == kNotInitialized) { - absl::debugging_internal::VDSOSupport vdso; - if (vdso.IsPresent()) { - absl::debugging_internal::VDSOSupport::SymbolInfo - sigtramp_rt64_symbol_info; - if (!vdso.LookupSymbol( - "__kernel_sigtramp_rt64", "LINUX_2.6.15", - absl::debugging_internal::VDSOSupport::kVDSOSymbolType, - &sigtramp_rt64_symbol_info) || - sigtramp_rt64_symbol_info.address == nullptr) { - // Unexpected: VDSO is present, yet the expected symbol is missing - // or null. - assert(false && "VDSO is present, but doesn't have expected symbol"); - kernel_symbol_status = kAddressInvalid; - } else { - kernel_sigtramp_rt64_address = - reinterpret_cast( - sigtramp_rt64_symbol_info.address); - kernel_symbol_status = kAddressValid; - } - } else { - kernel_symbol_status = kAddressInvalid; - } - } - - if (new_sp != nullptr && - kernel_symbol_status == kAddressValid && - StacktracePowerPCGetLR(new_sp) == kernel_sigtramp_rt64_address) { - const ucontext_t* signal_context = - reinterpret_cast(uc); - void **const sp_before_signal = -#if defined(__PPC64__) - reinterpret_cast(signal_context->uc_mcontext.gp_regs[PT_R1]); -#else - reinterpret_cast( - signal_context->uc_mcontext.uc_regs->gregs[PT_R1]); -#endif - // Check that alleged sp before signal is nonnull and is reasonably - // aligned. - if (sp_before_signal != nullptr && - ((uintptr_t)sp_before_signal % kStackAlignment) == 0) { - // Check that alleged stack pointer is actually readable. This is to - // prevent a "double fault" in case we hit the first fault due to e.g. - // a stack corruption. - if (absl::debugging_internal::AddressIsReadable(sp_before_signal)) { - // Alleged stack pointer is readable, use it for further unwinding. - new_sp = sp_before_signal; - } - } - } - } -#endif - - return new_sp; -} - -// This ensures that absl::GetStackTrace sets up the Link Register properly. -ABSL_ATTRIBUTE_NOINLINE static void AbslStacktracePowerPCDummyFunction() { - ABSL_BLOCK_TAIL_CALL_OPTIMIZATION(); -} - -template -ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack. -ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack. -static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count, - const void *ucp, int *min_dropped_frames) { - void **sp; - // Apple macOS uses an old version of gnu as -- both Darwin 7.9.0 (Panther) - // and Darwin 8.8.1 (Tiger) use as 1.38. This means we have to use a - // different asm syntax. I don't know quite the best way to discriminate - // systems using the old as from the new one; I've gone with __APPLE__. -#ifdef __APPLE__ - __asm__ volatile ("mr %0,r1" : "=r" (sp)); -#else - __asm__ volatile ("mr %0,1" : "=r" (sp)); -#endif - - // On PowerPC, the "Link Register" or "Link Record" (LR), is a stack - // entry that holds the return address of the subroutine call (what - // instruction we run after our function finishes). This is the - // same as the stack-pointer of our parent routine, which is what we - // want here. While the compiler will always(?) set up LR for - // subroutine calls, it may not for leaf functions (such as this one). - // This routine forces the compiler (at least gcc) to push it anyway. - AbslStacktracePowerPCDummyFunction(); - - // The LR save area is used by the callee, so the top entry is bogus. - skip_count++; - - int n = 0; - - // Unlike ABIs of X86 and ARM, PowerPC ABIs say that return address (in - // the link register) of a function call is stored in the caller's stack - // frame instead of the callee's. When we look for the return address - // associated with a stack frame, we need to make sure that there is a - // caller frame before it. So we call NextStackFrame before entering the - // loop below and check next_sp instead of sp for loop termination. - // The outermost frame is set up by runtimes and it does not have a - // caller frame, so it is skipped. - - // The absl::GetStackFrames routine is called when we are in some - // informational context (the failure signal handler for example). - // Use the non-strict unwinding rules to produce a stack trace - // that is as complete as possible (even if it contains a few - // bogus entries in some rare cases). - void **next_sp = NextStackFrame(sp, ucp); - - while (next_sp && n < max_depth) { - if (skip_count > 0) { - skip_count--; - } else { - result[n] = StacktracePowerPCGetLR(sp); - if (IS_STACK_FRAMES) { - if (next_sp > sp) { - sizes[n] = (uintptr_t)next_sp - (uintptr_t)sp; - } else { - // A frame-size of 0 is used to indicate unknown frame size. - sizes[n] = 0; - } - } - n++; - } - - sp = next_sp; - next_sp = NextStackFrame(sp, ucp); - } - - if (min_dropped_frames != nullptr) { - // Implementation detail: we clamp the max of frames we are willing to - // count, so as not to spend too much time in the loop below. - const int kMaxUnwind = 1000; - int j = 0; - for (; next_sp != nullptr && j < kMaxUnwind; j++) { - next_sp = NextStackFrame(next_sp, ucp); - } - *min_dropped_frames = j; - } - return n; -} - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { -bool StackTraceWorksForTest() { - return true; -} -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_POWERPC_INL_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_unimplemented-inl.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_unimplemented-inl.inc deleted file mode 100644 index 5b8fb19..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_unimplemented-inl.inc +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_UNIMPLEMENTED_INL_H_ -#define ABSL_DEBUGGING_INTERNAL_STACKTRACE_UNIMPLEMENTED_INL_H_ - -template -static int UnwindImpl(void** /* result */, int* /* sizes */, - int /* max_depth */, int /* skip_count */, - const void* /* ucp */, int *min_dropped_frames) { - if (min_dropped_frames != nullptr) { - *min_dropped_frames = 0; - } - return 0; -} - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { -bool StackTraceWorksForTest() { - return false; -} -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_UNIMPLEMENTED_INL_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_win32-inl.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_win32-inl.inc deleted file mode 100644 index 1c666c8..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_win32-inl.inc +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Produces a stack trace for Windows. Normally, one could use -// stacktrace_x86-inl.h or stacktrace_x86_64-inl.h -- and indeed, that -// should work for binaries compiled using MSVC in "debug" mode. -// However, in "release" mode, Windows uses frame-pointer -// optimization, which makes getting a stack trace very difficult. -// -// There are several approaches one can take. One is to use Windows -// intrinsics like StackWalk64. These can work, but have restrictions -// on how successful they can be. Another attempt is to write a -// version of stacktrace_x86-inl.h that has heuristic support for -// dealing with FPO, similar to what WinDbg does (see -// http://www.nynaeve.net/?p=97). There are (non-working) examples of -// these approaches, complete with TODOs, in stacktrace_win32-inl.h#1 -// -// The solution we've ended up doing is to call the undocumented -// windows function RtlCaptureStackBackTrace, which probably doesn't -// work with FPO but at least is fast, and doesn't require a symbol -// server. -// -// This code is inspired by a patch from David Vitek: -// https://code.google.com/p/google-perftools/issues/detail?id=83 - -#ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_WIN32_INL_H_ -#define ABSL_DEBUGGING_INTERNAL_STACKTRACE_WIN32_INL_H_ - -#include // for GetProcAddress and GetModuleHandle -#include - -typedef USHORT NTAPI RtlCaptureStackBackTrace_Function( - IN ULONG frames_to_skip, - IN ULONG frames_to_capture, - OUT PVOID *backtrace, - OUT PULONG backtrace_hash); - -// It is not possible to load RtlCaptureStackBackTrace at static init time in -// UWP. CaptureStackBackTrace is the public version of RtlCaptureStackBackTrace -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \ - !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) -static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn = - &::CaptureStackBackTrace; -#else -// Load the function we need at static init time, where we don't have -// to worry about someone else holding the loader's lock. -static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn = - (RtlCaptureStackBackTrace_Function*)GetProcAddress( - GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace"); -#endif // WINAPI_PARTITION_APP && !WINAPI_PARTITION_DESKTOP - -template -static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count, - const void*, int* min_dropped_frames) { - int n = 0; - if (!RtlCaptureStackBackTrace_fn) { - // can't find a stacktrace with no function to call - } else { - n = (int)RtlCaptureStackBackTrace_fn(skip_count + 2, max_depth, result, 0); - } - if (IS_STACK_FRAMES) { - // No implementation for finding out the stack frame sizes yet. - memset(sizes, 0, sizeof(*sizes) * n); - } - if (min_dropped_frames != nullptr) { - // Not implemented. - *min_dropped_frames = 0; - } - return n; -} - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { -bool StackTraceWorksForTest() { - return false; -} -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_WIN32_INL_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_x86-inl.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_x86-inl.inc deleted file mode 100644 index bc320ff..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/stacktrace_x86-inl.inc +++ /dev/null @@ -1,346 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Produce stack trace - -#ifndef ABSL_DEBUGGING_INTERNAL_STACKTRACE_X86_INL_INC_ -#define ABSL_DEBUGGING_INTERNAL_STACKTRACE_X86_INL_INC_ - -#if defined(__linux__) && (defined(__i386__) || defined(__x86_64__)) -#include // for ucontext_t -#endif - -#if !defined(_WIN32) -#include -#endif - -#include -#include - -#include "absl/base/macros.h" -#include "absl/base/port.h" -#include "absl/debugging/internal/address_is_readable.h" -#include "absl/debugging/internal/vdso_support.h" // a no-op on non-elf or non-glibc systems -#include "absl/debugging/stacktrace.h" - -#include "absl/base/internal/raw_logging.h" - -using absl::debugging_internal::AddressIsReadable; - -#if defined(__linux__) && defined(__i386__) -// Count "push %reg" instructions in VDSO __kernel_vsyscall(), -// preceeding "syscall" or "sysenter". -// If __kernel_vsyscall uses frame pointer, answer 0. -// -// kMaxBytes tells how many instruction bytes of __kernel_vsyscall -// to analyze before giving up. Up to kMaxBytes+1 bytes of -// instructions could be accessed. -// -// Here are known __kernel_vsyscall instruction sequences: -// -// SYSENTER (linux-2.6.26/arch/x86/vdso/vdso32/sysenter.S). -// Used on Intel. -// 0xffffe400 <__kernel_vsyscall+0>: push %ecx -// 0xffffe401 <__kernel_vsyscall+1>: push %edx -// 0xffffe402 <__kernel_vsyscall+2>: push %ebp -// 0xffffe403 <__kernel_vsyscall+3>: mov %esp,%ebp -// 0xffffe405 <__kernel_vsyscall+5>: sysenter -// -// SYSCALL (see linux-2.6.26/arch/x86/vdso/vdso32/syscall.S). -// Used on AMD. -// 0xffffe400 <__kernel_vsyscall+0>: push %ebp -// 0xffffe401 <__kernel_vsyscall+1>: mov %ecx,%ebp -// 0xffffe403 <__kernel_vsyscall+3>: syscall -// - -// The sequence below isn't actually expected in Google fleet, -// here only for completeness. Remove this comment from OSS release. - -// i386 (see linux-2.6.26/arch/x86/vdso/vdso32/int80.S) -// 0xffffe400 <__kernel_vsyscall+0>: int $0x80 -// 0xffffe401 <__kernel_vsyscall+1>: ret -// -static const int kMaxBytes = 10; - -// We use assert()s instead of DCHECK()s -- this is too low level -// for DCHECK(). - -static int CountPushInstructions(const unsigned char *const addr) { - int result = 0; - for (int i = 0; i < kMaxBytes; ++i) { - if (addr[i] == 0x89) { - // "mov reg,reg" - if (addr[i + 1] == 0xE5) { - // Found "mov %esp,%ebp". - return 0; - } - ++i; // Skip register encoding byte. - } else if (addr[i] == 0x0F && - (addr[i + 1] == 0x34 || addr[i + 1] == 0x05)) { - // Found "sysenter" or "syscall". - return result; - } else if ((addr[i] & 0xF0) == 0x50) { - // Found "push %reg". - ++result; - } else if (addr[i] == 0xCD && addr[i + 1] == 0x80) { - // Found "int $0x80" - assert(result == 0); - return 0; - } else { - // Unexpected instruction. - assert(false && "unexpected instruction in __kernel_vsyscall"); - return 0; - } - } - // Unexpected: didn't find SYSENTER or SYSCALL in - // [__kernel_vsyscall, __kernel_vsyscall + kMaxBytes) interval. - assert(false && "did not find SYSENTER or SYSCALL in __kernel_vsyscall"); - return 0; -} -#endif - -// Assume stack frames larger than 100,000 bytes are bogus. -static const int kMaxFrameBytes = 100000; - -// Returns the stack frame pointer from signal context, 0 if unknown. -// vuc is a ucontext_t *. We use void* to avoid the use -// of ucontext_t on non-POSIX systems. -static uintptr_t GetFP(const void *vuc) { -#if !defined(__linux__) - static_cast(vuc); // Avoid an unused argument compiler warning. -#else - if (vuc != nullptr) { - auto *uc = reinterpret_cast(vuc); -#if defined(__i386__) - const auto bp = uc->uc_mcontext.gregs[REG_EBP]; - const auto sp = uc->uc_mcontext.gregs[REG_ESP]; -#elif defined(__x86_64__) - const auto bp = uc->uc_mcontext.gregs[REG_RBP]; - const auto sp = uc->uc_mcontext.gregs[REG_RSP]; -#else - const uintptr_t bp = 0; - const uintptr_t sp = 0; -#endif - // Sanity-check that the base pointer is valid. It should be as long as - // SHRINK_WRAP_FRAME_POINTER is not set, but it's possible that some code in - // the process is compiled with --copt=-fomit-frame-pointer or - // --copt=-momit-leaf-frame-pointer. - // - // TODO(bcmills): -momit-leaf-frame-pointer is currently the default - // behavior when building with clang. Talk to the C++ toolchain team about - // fixing that. - if (bp >= sp && bp - sp <= kMaxFrameBytes) return bp; - - // If bp isn't a plausible frame pointer, return the stack pointer instead. - // If we're lucky, it points to the start of a stack frame; otherwise, we'll - // get one frame of garbage in the stack trace and fail the sanity check on - // the next iteration. - return sp; - } -#endif - return 0; -} - -// Given a pointer to a stack frame, locate and return the calling -// stackframe, or return null if no stackframe can be found. Perform sanity -// checks (the strictness of which is controlled by the boolean parameter -// "STRICT_UNWINDING") to reduce the chance that a bad pointer is returned. -template -ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack. -ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack. -static void **NextStackFrame(void **old_fp, const void *uc) { - void **new_fp = (void **)*old_fp; - -#if defined(__linux__) && defined(__i386__) - if (WITH_CONTEXT && uc != nullptr) { - // How many "push %reg" instructions are there at __kernel_vsyscall? - // This is constant for a given kernel and processor, so compute - // it only once. - static int num_push_instructions = -1; // Sentinel: not computed yet. - // Initialize with sentinel value: __kernel_rt_sigreturn can not possibly - // be there. - static const unsigned char *kernel_rt_sigreturn_address = nullptr; - static const unsigned char *kernel_vsyscall_address = nullptr; - if (num_push_instructions == -1) { -#ifdef ABSL_HAVE_VDSO_SUPPORT - absl::debugging_internal::VDSOSupport vdso; - if (vdso.IsPresent()) { - absl::debugging_internal::VDSOSupport::SymbolInfo - rt_sigreturn_symbol_info; - absl::debugging_internal::VDSOSupport::SymbolInfo vsyscall_symbol_info; - if (!vdso.LookupSymbol("__kernel_rt_sigreturn", "LINUX_2.5", STT_FUNC, - &rt_sigreturn_symbol_info) || - !vdso.LookupSymbol("__kernel_vsyscall", "LINUX_2.5", STT_FUNC, - &vsyscall_symbol_info) || - rt_sigreturn_symbol_info.address == nullptr || - vsyscall_symbol_info.address == nullptr) { - // Unexpected: 32-bit VDSO is present, yet one of the expected - // symbols is missing or null. - assert(false && "VDSO is present, but doesn't have expected symbols"); - num_push_instructions = 0; - } else { - kernel_rt_sigreturn_address = - reinterpret_cast( - rt_sigreturn_symbol_info.address); - kernel_vsyscall_address = - reinterpret_cast( - vsyscall_symbol_info.address); - num_push_instructions = - CountPushInstructions(kernel_vsyscall_address); - } - } else { - num_push_instructions = 0; - } -#else // ABSL_HAVE_VDSO_SUPPORT - num_push_instructions = 0; -#endif // ABSL_HAVE_VDSO_SUPPORT - } - if (num_push_instructions != 0 && kernel_rt_sigreturn_address != nullptr && - old_fp[1] == kernel_rt_sigreturn_address) { - const ucontext_t *ucv = static_cast(uc); - // This kernel does not use frame pointer in its VDSO code, - // and so %ebp is not suitable for unwinding. - void **const reg_ebp = - reinterpret_cast(ucv->uc_mcontext.gregs[REG_EBP]); - const unsigned char *const reg_eip = - reinterpret_cast(ucv->uc_mcontext.gregs[REG_EIP]); - if (new_fp == reg_ebp && kernel_vsyscall_address <= reg_eip && - reg_eip - kernel_vsyscall_address < kMaxBytes) { - // We "stepped up" to __kernel_vsyscall, but %ebp is not usable. - // Restore from 'ucv' instead. - void **const reg_esp = - reinterpret_cast(ucv->uc_mcontext.gregs[REG_ESP]); - // Check that alleged %esp is not null and is reasonably aligned. - if (reg_esp && - ((uintptr_t)reg_esp & (sizeof(reg_esp) - 1)) == 0) { - // Check that alleged %esp is actually readable. This is to prevent - // "double fault" in case we hit the first fault due to e.g. stack - // corruption. - void *const reg_esp2 = reg_esp[num_push_instructions - 1]; - if (AddressIsReadable(reg_esp2)) { - // Alleged %esp is readable, use it for further unwinding. - new_fp = reinterpret_cast(reg_esp2); - } - } - } - } - } -#endif - - const uintptr_t old_fp_u = reinterpret_cast(old_fp); - const uintptr_t new_fp_u = reinterpret_cast(new_fp); - - // Check that the transition from frame pointer old_fp to frame - // pointer new_fp isn't clearly bogus. Skip the checks if new_fp - // matches the signal context, so that we don't skip out early when - // using an alternate signal stack. - // - // TODO(bcmills): The GetFP call should be completely unnecessary when - // SHRINK_WRAP_FRAME_POINTER is set (because we should be back in the thread's - // stack by this point), but it is empirically still needed (e.g. when the - // stack includes a call to abort). unw_get_reg returns UNW_EBADREG for some - // frames. Figure out why GetValidFrameAddr and/or libunwind isn't doing what - // it's supposed to. - if (STRICT_UNWINDING && - (!WITH_CONTEXT || uc == nullptr || new_fp_u != GetFP(uc))) { - // With the stack growing downwards, older stack frame must be - // at a greater address that the current one. - if (new_fp_u <= old_fp_u) return nullptr; - if (new_fp_u - old_fp_u > kMaxFrameBytes) return nullptr; - } else { - if (new_fp == nullptr) return nullptr; // skip AddressIsReadable() below - // In the non-strict mode, allow discontiguous stack frames. - // (alternate-signal-stacks for example). - if (new_fp == old_fp) return nullptr; - } - - if (new_fp_u & (sizeof(void *) - 1)) return nullptr; -#ifdef __i386__ - // On 32-bit machines, the stack pointer can be very close to - // 0xffffffff, so we explicitly check for a pointer into the - // last two pages in the address space - if (new_fp_u >= 0xffffe000) return nullptr; -#endif -#if !defined(_WIN32) - if (!STRICT_UNWINDING) { - // Lax sanity checks cause a crash in 32-bit tcmalloc/crash_reason_test - // on AMD-based machines with VDSO-enabled kernels. - // Make an extra sanity check to insure new_fp is readable. - // Note: NextStackFrame() is only called while the program - // is already on its last leg, so it's ok to be slow here. - - if (!AddressIsReadable(new_fp)) { - return nullptr; - } - } -#endif - return new_fp; -} - -template -ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack. -ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack. -ABSL_ATTRIBUTE_NOINLINE -static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count, - const void *ucp, int *min_dropped_frames) { - int n = 0; - void **fp = reinterpret_cast(__builtin_frame_address(0)); - - while (fp && n < max_depth) { - if (*(fp + 1) == reinterpret_cast(0)) { - // In 64-bit code, we often see a frame that - // points to itself and has a return address of 0. - break; - } - void **next_fp = NextStackFrame(fp, ucp); - if (skip_count > 0) { - skip_count--; - } else { - result[n] = *(fp + 1); - if (IS_STACK_FRAMES) { - if (next_fp > fp) { - sizes[n] = (uintptr_t)next_fp - (uintptr_t)fp; - } else { - // A frame-size of 0 is used to indicate unknown frame size. - sizes[n] = 0; - } - } - n++; - } - fp = next_fp; - } - if (min_dropped_frames != nullptr) { - // Implementation detail: we clamp the max of frames we are willing to - // count, so as not to spend too much time in the loop below. - const int kMaxUnwind = 1000; - int j = 0; - for (; fp != nullptr && j < kMaxUnwind; j++) { - fp = NextStackFrame(fp, ucp); - } - *min_dropped_frames = j; - } - return n; -} - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { -bool StackTraceWorksForTest() { - return true; -} -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_INTERNAL_STACKTRACE_X86_INL_INC_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/symbolize.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/symbolize.h deleted file mode 100644 index 4f26130..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/symbolize.h +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// This file contains internal parts of the Abseil symbolizer. -// Do not depend on the anything in this file, it may change at anytime. - -#ifndef ABSL_DEBUGGING_INTERNAL_SYMBOLIZE_H_ -#define ABSL_DEBUGGING_INTERNAL_SYMBOLIZE_H_ - -#ifdef __cplusplus - -#include -#include - -#include "absl/base/config.h" -#include "absl/strings/string_view.h" - -#ifdef ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE -#error ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE cannot be directly set -#elif defined(__ELF__) && defined(__GLIBC__) && !defined(__native_client__) && \ - !defined(__asmjs__) && !defined(__wasm__) -#define ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE 1 - -#include -#include // For ElfW() macro. -#include -#include - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { - -// Iterates over all sections, invoking callback on each with the section name -// and the section header. -// -// Returns true on success; otherwise returns false in case of errors. -// -// This is not async-signal-safe. -bool ForEachSection(int fd, - const std::function& callback); - -// Gets the section header for the given name, if it exists. Returns true on -// success. Otherwise, returns false. -bool GetSectionHeaderByName(int fd, const char *name, size_t name_len, - ElfW(Shdr) *out); - -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE - -#ifdef ABSL_INTERNAL_HAVE_DARWIN_SYMBOLIZE -#error ABSL_INTERNAL_HAVE_DARWIN_SYMBOLIZE cannot be directly set -#elif defined(__APPLE__) -#define ABSL_INTERNAL_HAVE_DARWIN_SYMBOLIZE 1 -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { - -struct SymbolDecoratorArgs { - // The program counter we are getting symbolic name for. - const void *pc; - // 0 for main executable, load address for shared libraries. - ptrdiff_t relocation; - // Read-only file descriptor for ELF image covering "pc", - // or -1 if no such ELF image exists in /proc/self/maps. - int fd; - // Output buffer, size. - // Note: the buffer may not be empty -- default symbolizer may have already - // produced some output, and earlier decorators may have adorned it in - // some way. You are free to replace or augment the contents (within the - // symbol_buf_size limit). - char *const symbol_buf; - size_t symbol_buf_size; - // Temporary scratch space, size. - // Use that space in preference to allocating your own stack buffer to - // conserve stack. - char *const tmp_buf; - size_t tmp_buf_size; - // User-provided argument - void* arg; -}; -using SymbolDecorator = void (*)(const SymbolDecoratorArgs *); - -// Installs a function-pointer as a decorator. Returns a value less than zero -// if the system cannot install the decorator. Otherwise, returns a unique -// identifier corresponding to the decorator. This identifier can be used to -// uninstall the decorator - See RemoveSymbolDecorator() below. -int InstallSymbolDecorator(SymbolDecorator decorator, void* arg); - -// Removes a previously installed function-pointer decorator. Parameter "ticket" -// is the return-value from calling InstallSymbolDecorator(). -bool RemoveSymbolDecorator(int ticket); - -// Remove all installed decorators. Returns true if successful, false if -// symbolization is currently in progress. -bool RemoveAllSymbolDecorators(void); - -// Registers an address range to a file mapping. -// -// Preconditions: -// start <= end -// filename != nullptr -// -// Returns true if the file was successfully registered. -bool RegisterFileMappingHint(const void* start, const void* end, - uint64_t offset, const char* filename); - -// Looks up the file mapping registered by RegisterFileMappingHint for an -// address range. If there is one, the file name is stored in *filename and -// *start and *end are modified to reflect the registered mapping. Returns -// whether any hint was found. -bool GetFileMappingHint(const void** start, const void** end, uint64_t* offset, - const char** filename); - -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // __cplusplus - -#include - -#ifdef __cplusplus -extern "C" -#endif // __cplusplus - - bool - AbslInternalGetFileMappingHint(const void** start, const void** end, - uint64_t* offset, const char** filename); - -#endif // ABSL_DEBUGGING_INTERNAL_SYMBOLIZE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/vdso_support.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/vdso_support.h deleted file mode 100644 index 6562c6c..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/internal/vdso_support.h +++ /dev/null @@ -1,158 +0,0 @@ -// -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// Allow dynamic symbol lookup in the kernel VDSO page. -// -// VDSO stands for "Virtual Dynamic Shared Object" -- a page of -// executable code, which looks like a shared library, but doesn't -// necessarily exist anywhere on disk, and which gets mmap()ed into -// every process by kernels which support VDSO, such as 2.6.x for 32-bit -// executables, and 2.6.24 and above for 64-bit executables. -// -// More details could be found here: -// http://www.trilithium.com/johan/2005/08/linux-gate/ -// -// VDSOSupport -- a class representing kernel VDSO (if present). -// -// Example usage: -// VDSOSupport vdso; -// VDSOSupport::SymbolInfo info; -// typedef (*FN)(unsigned *, void *, void *); -// FN fn = nullptr; -// if (vdso.LookupSymbol("__vdso_getcpu", "LINUX_2.6", STT_FUNC, &info)) { -// fn = reinterpret_cast(info.address); -// } - -#ifndef ABSL_DEBUGGING_INTERNAL_VDSO_SUPPORT_H_ -#define ABSL_DEBUGGING_INTERNAL_VDSO_SUPPORT_H_ - -#include - -#include "absl/base/attributes.h" -#include "absl/debugging/internal/elf_mem_image.h" - -#ifdef ABSL_HAVE_ELF_MEM_IMAGE - -#ifdef ABSL_HAVE_VDSO_SUPPORT -#error ABSL_HAVE_VDSO_SUPPORT cannot be directly set -#else -#define ABSL_HAVE_VDSO_SUPPORT 1 -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace debugging_internal { - -// NOTE: this class may be used from within tcmalloc, and can not -// use any memory allocation routines. -class VDSOSupport { - public: - VDSOSupport(); - - typedef ElfMemImage::SymbolInfo SymbolInfo; - typedef ElfMemImage::SymbolIterator SymbolIterator; - - // On PowerPC64 VDSO symbols can either be of type STT_FUNC or STT_NOTYPE - // depending on how the kernel is built. The kernel is normally built with - // STT_NOTYPE type VDSO symbols. Let's make things simpler first by using a - // compile-time constant. -#ifdef __powerpc64__ - enum { kVDSOSymbolType = STT_NOTYPE }; -#else - enum { kVDSOSymbolType = STT_FUNC }; -#endif - - // Answers whether we have a vdso at all. - bool IsPresent() const { return image_.IsPresent(); } - - // Allow to iterate over all VDSO symbols. - SymbolIterator begin() const { return image_.begin(); } - SymbolIterator end() const { return image_.end(); } - - // Look up versioned dynamic symbol in the kernel VDSO. - // Returns false if VDSO is not present, or doesn't contain given - // symbol/version/type combination. - // If info_out != nullptr, additional details are filled in. - bool LookupSymbol(const char *name, const char *version, - int symbol_type, SymbolInfo *info_out) const; - - // Find info about symbol (if any) which overlaps given address. - // Returns true if symbol was found; false if VDSO isn't present - // or doesn't have a symbol overlapping given address. - // If info_out != nullptr, additional details are filled in. - bool LookupSymbolByAddress(const void *address, SymbolInfo *info_out) const; - - // Used only for testing. Replace real VDSO base with a mock. - // Returns previous value of vdso_base_. After you are done testing, - // you are expected to call SetBase() with previous value, in order to - // reset state to the way it was. - const void *SetBase(const void *s); - - // Computes vdso_base_ and returns it. Should be called as early as - // possible; before any thread creation, chroot or setuid. - static const void *Init(); - - private: - // image_ represents VDSO ELF image in memory. - // image_.ehdr_ == nullptr implies there is no VDSO. - ElfMemImage image_; - - // Cached value of auxv AT_SYSINFO_EHDR, computed once. - // This is a tri-state: - // kInvalidBase => value hasn't been determined yet. - // 0 => there is no VDSO. - // else => vma of VDSO Elf{32,64}_Ehdr. - // - // When testing with mock VDSO, low bit is set. - // The low bit is always available because vdso_base_ is - // page-aligned. - static std::atomic vdso_base_; - - // NOLINT on 'long' because these routines mimic kernel api. - // The 'cache' parameter may be used by some versions of the kernel, - // and should be nullptr or point to a static buffer containing at - // least two 'long's. - static long InitAndGetCPU(unsigned *cpu, void *cache, // NOLINT 'long'. - void *unused); - static long GetCPUViaSyscall(unsigned *cpu, void *cache, // NOLINT 'long'. - void *unused); - typedef long (*GetCpuFn)(unsigned *cpu, void *cache, // NOLINT 'long'. - void *unused); - - // This function pointer may point to InitAndGetCPU, - // GetCPUViaSyscall, or __vdso_getcpu at different stages of initialization. - ABSL_CONST_INIT static std::atomic getcpu_fn_; - - friend int GetCPU(void); // Needs access to getcpu_fn_. - - VDSOSupport(const VDSOSupport&) = delete; - VDSOSupport& operator=(const VDSOSupport&) = delete; -}; - -// Same as sched_getcpu() on later glibc versions. -// Return current CPU, using (fast) __vdso_getcpu@LINUX_2.6 if present, -// otherwise use syscall(SYS_getcpu,...). -// May return -1 with errno == ENOSYS if the kernel doesn't -// support SYS_getcpu. -int GetCPU(); - -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_HAVE_ELF_MEM_IMAGE - -#endif // ABSL_DEBUGGING_INTERNAL_VDSO_SUPPORT_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/leak_check.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/leak_check.h deleted file mode 100644 index b66a81c..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/leak_check.h +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: leak_check.h -// ----------------------------------------------------------------------------- -// -// This file contains functions that affect leak checking behavior within -// targets built with the LeakSanitizer (LSan), a memory leak detector that is -// integrated within the AddressSanitizer (ASan) as an additional component, or -// which can be used standalone. LSan and ASan are included (or can be provided) -// as additional components for most compilers such as Clang, gcc and MSVC. -// Note: this leak checking API is not yet supported in MSVC. -// Leak checking is enabled by default in all ASan builds. -// -// See https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer -// -// ----------------------------------------------------------------------------- -#ifndef ABSL_DEBUGGING_LEAK_CHECK_H_ -#define ABSL_DEBUGGING_LEAK_CHECK_H_ - -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// HaveLeakSanitizer() -// -// Returns true if a leak-checking sanitizer (either ASan or standalone LSan) is -// currently built into this target. -bool HaveLeakSanitizer(); - -// DoIgnoreLeak() -// -// Implements `IgnoreLeak()` below. This function should usually -// not be called directly; calling `IgnoreLeak()` is preferred. -void DoIgnoreLeak(const void* ptr); - -// IgnoreLeak() -// -// Instruct the leak sanitizer to ignore leak warnings on the object referenced -// by the passed pointer, as well as all heap objects transitively referenced -// by it. The passed object pointer can point to either the beginning of the -// object or anywhere within it. -// -// Example: -// -// static T* obj = IgnoreLeak(new T(...)); -// -// If the passed `ptr` does not point to an actively allocated object at the -// time `IgnoreLeak()` is called, the call is a no-op; if it is actively -// allocated, leak sanitizer will assume this object is referenced even if -// there is no actual reference in user memory. -// -template -T* IgnoreLeak(T* ptr) { - DoIgnoreLeak(ptr); - return ptr; -} - -// LeakCheckDisabler -// -// This helper class indicates that any heap allocations done in the code block -// covered by the scoped object, which should be allocated on the stack, will -// not be reported as leaks. Leak check disabling will occur within the code -// block and any nested function calls within the code block. -// -// Example: -// -// void Foo() { -// LeakCheckDisabler disabler; -// ... code that allocates objects whose leaks should be ignored ... -// } -// -// REQUIRES: Destructor runs in same thread as constructor -class LeakCheckDisabler { - public: - LeakCheckDisabler(); - LeakCheckDisabler(const LeakCheckDisabler&) = delete; - LeakCheckDisabler& operator=(const LeakCheckDisabler&) = delete; - ~LeakCheckDisabler(); -}; - -// RegisterLivePointers() -// -// Registers `ptr[0,size-1]` as pointers to memory that is still actively being -// referenced and for which leak checking should be ignored. This function is -// useful if you store pointers in mapped memory, for memory ranges that we know -// are correct but for which normal analysis would flag as leaked code. -void RegisterLivePointers(const void* ptr, size_t size); - -// UnRegisterLivePointers() -// -// Deregisters the pointers previously marked as active in -// `RegisterLivePointers()`, enabling leak checking of those pointers. -void UnRegisterLivePointers(const void* ptr, size_t size); - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_LEAK_CHECK_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/stacktrace.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/stacktrace.h deleted file mode 100644 index 0ec0ffd..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/stacktrace.h +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: stacktrace.h -// ----------------------------------------------------------------------------- -// -// This file contains routines to extract the current stack trace and associated -// stack frames. These functions are thread-safe and async-signal-safe. -// -// Note that stack trace functionality is platform dependent and requires -// additional support from the compiler/build system in most cases. (That is, -// this functionality generally only works on platforms/builds that have been -// specifically configured to support it.) -// -// Note: stack traces in Abseil that do not utilize a symbolizer will result in -// frames consisting of function addresses rather than human-readable function -// names. (See symbolize.h for information on symbolizing these values.) - -#ifndef ABSL_DEBUGGING_STACKTRACE_H_ -#define ABSL_DEBUGGING_STACKTRACE_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// GetStackFrames() -// -// Records program counter values for up to `max_depth` frames, skipping the -// most recent `skip_count` stack frames, stores their corresponding values -// and sizes in `results` and `sizes` buffers, and returns the number of frames -// stored. (Note that the frame generated for the `absl::GetStackFrames()` -// routine itself is also skipped.) -// -// Example: -// -// main() { foo(); } -// foo() { bar(); } -// bar() { -// void* result[10]; -// int sizes[10]; -// int depth = absl::GetStackFrames(result, sizes, 10, 1); -// } -// -// The current stack frame would consist of three function calls: `bar()`, -// `foo()`, and then `main()`; however, since the `GetStackFrames()` call sets -// `skip_count` to `1`, it will skip the frame for `bar()`, the most recently -// invoked function call. It will therefore return 2 and fill `result` with -// program counters within the following functions: -// -// result[0] foo() -// result[1] main() -// -// (Note: in practice, a few more entries after `main()` may be added to account -// for startup processes.) -// -// Corresponding stack frame sizes will also be recorded: -// -// sizes[0] 16 -// sizes[1] 16 -// -// (Stack frame sizes of `16` above are just for illustration purposes.) -// -// Stack frame sizes of 0 or less indicate that those frame sizes couldn't -// be identified. -// -// This routine may return fewer stack frame entries than are -// available. Also note that `result` and `sizes` must both be non-null. -extern int GetStackFrames(void** result, int* sizes, int max_depth, - int skip_count); - -// GetStackFramesWithContext() -// -// Records program counter values obtained from a signal handler. Records -// program counter values for up to `max_depth` frames, skipping the most recent -// `skip_count` stack frames, stores their corresponding values and sizes in -// `results` and `sizes` buffers, and returns the number of frames stored. (Note -// that the frame generated for the `absl::GetStackFramesWithContext()` routine -// itself is also skipped.) -// -// The `uc` parameter, if non-null, should be a pointer to a `ucontext_t` value -// passed to a signal handler registered via the `sa_sigaction` field of a -// `sigaction` struct. (See -// http://man7.org/linux/man-pages/man2/sigaction.2.html.) The `uc` value may -// help a stack unwinder to provide a better stack trace under certain -// conditions. `uc` may safely be null. -// -// The `min_dropped_frames` output parameter, if non-null, points to the -// location to note any dropped stack frames, if any, due to buffer limitations -// or other reasons. (This value will be set to `0` if no frames were dropped.) -// The number of total stack frames is guaranteed to be >= skip_count + -// max_depth + *min_dropped_frames. -extern int GetStackFramesWithContext(void** result, int* sizes, int max_depth, - int skip_count, const void* uc, - int* min_dropped_frames); - -// GetStackTrace() -// -// Records program counter values for up to `max_depth` frames, skipping the -// most recent `skip_count` stack frames, stores their corresponding values -// in `results`, and returns the number of frames -// stored. Note that this function is similar to `absl::GetStackFrames()` -// except that it returns the stack trace only, and not stack frame sizes. -// -// Example: -// -// main() { foo(); } -// foo() { bar(); } -// bar() { -// void* result[10]; -// int depth = absl::GetStackTrace(result, 10, 1); -// } -// -// This produces: -// -// result[0] foo -// result[1] main -// .... ... -// -// `result` must not be null. -extern int GetStackTrace(void** result, int max_depth, int skip_count); - -// GetStackTraceWithContext() -// -// Records program counter values obtained from a signal handler. Records -// program counter values for up to `max_depth` frames, skipping the most recent -// `skip_count` stack frames, stores their corresponding values in `results`, -// and returns the number of frames stored. (Note that the frame generated for -// the `absl::GetStackFramesWithContext()` routine itself is also skipped.) -// -// The `uc` parameter, if non-null, should be a pointer to a `ucontext_t` value -// passed to a signal handler registered via the `sa_sigaction` field of a -// `sigaction` struct. (See -// http://man7.org/linux/man-pages/man2/sigaction.2.html.) The `uc` value may -// help a stack unwinder to provide a better stack trace under certain -// conditions. `uc` may safely be null. -// -// The `min_dropped_frames` output parameter, if non-null, points to the -// location to note any dropped stack frames, if any, due to buffer limitations -// or other reasons. (This value will be set to `0` if no frames were dropped.) -// The number of total stack frames is guaranteed to be >= skip_count + -// max_depth + *min_dropped_frames. -extern int GetStackTraceWithContext(void** result, int max_depth, - int skip_count, const void* uc, - int* min_dropped_frames); - -// SetStackUnwinder() -// -// Provides a custom function for unwinding stack frames that will be used in -// place of the default stack unwinder when invoking the static -// GetStack{Frames,Trace}{,WithContext}() functions above. -// -// The arguments passed to the unwinder function will match the -// arguments passed to `absl::GetStackFramesWithContext()` except that sizes -// will be non-null iff the caller is interested in frame sizes. -// -// If unwinder is set to null, we revert to the default stack-tracing behavior. -// -// ***************************************************************************** -// WARNING -// ***************************************************************************** -// -// absl::SetStackUnwinder is not suitable for general purpose use. It is -// provided for custom runtimes. -// Some things to watch out for when calling `absl::SetStackUnwinder()`: -// -// (a) The unwinder may be called from within signal handlers and -// therefore must be async-signal-safe. -// -// (b) Even after a custom stack unwinder has been unregistered, other -// threads may still be in the process of using that unwinder. -// Therefore do not clean up any state that may be needed by an old -// unwinder. -// ***************************************************************************** -extern void SetStackUnwinder(int (*unwinder)(void** pcs, int* sizes, - int max_depth, int skip_count, - const void* uc, - int* min_dropped_frames)); - -// DefaultStackUnwinder() -// -// Records program counter values of up to `max_depth` frames, skipping the most -// recent `skip_count` stack frames, and stores their corresponding values in -// `pcs`. (Note that the frame generated for this call itself is also skipped.) -// This function acts as a generic stack-unwinder; prefer usage of the more -// specific `GetStack{Trace,Frames}{,WithContext}()` functions above. -// -// If you have set your own stack unwinder (with the `SetStackUnwinder()` -// function above, you can still get the default stack unwinder by calling -// `DefaultStackUnwinder()`, which will ignore any previously set stack unwinder -// and use the default one instead. -// -// Because this function is generic, only `pcs` is guaranteed to be non-null -// upon return. It is legal for `sizes`, `uc`, and `min_dropped_frames` to all -// be null when called. -// -// The semantics are the same as the corresponding `GetStack*()` function in the -// case where `absl::SetStackUnwinder()` was never called. Equivalents are: -// -// null sizes | non-nullptr sizes -// |==========================================================| -// null uc | GetStackTrace() | GetStackFrames() | -// non-null uc | GetStackTraceWithContext() | GetStackFramesWithContext() | -// |==========================================================| -extern int DefaultStackUnwinder(void** pcs, int* sizes, int max_depth, - int skip_count, const void* uc, - int* min_dropped_frames); - -namespace debugging_internal { -// Returns true for platforms which are expected to have functioning stack trace -// implementations. Intended to be used for tests which want to exclude -// verification of logic known to be broken because stack traces are not -// working. -extern bool StackTraceWorksForTest(); -} // namespace debugging_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_STACKTRACE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize.h b/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize.h deleted file mode 100644 index 43d93a8..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: symbolize.h -// ----------------------------------------------------------------------------- -// -// This file configures the Abseil symbolizer for use in converting instruction -// pointer addresses (program counters) into human-readable names (function -// calls, etc.) within Abseil code. -// -// The symbolizer may be invoked from several sources: -// -// * Implicitly, through the installation of an Abseil failure signal handler. -// (See failure_signal_handler.h for more information.) -// * By calling `Symbolize()` directly on a program counter you obtain through -// `absl::GetStackTrace()` or `absl::GetStackFrames()`. (See stacktrace.h -// for more information. -// * By calling `Symbolize()` directly on a program counter you obtain through -// other means (which would be platform-dependent). -// -// In all of the above cases, the symbolizer must first be initialized before -// any program counter values can be symbolized. If you are installing a failure -// signal handler, initialize the symbolizer before you do so. -// -// Example: -// -// int main(int argc, char** argv) { -// // Initialize the Symbolizer before installing the failure signal handler -// absl::InitializeSymbolizer(argv[0]); -// -// // Now you may install the failure signal handler -// absl::FailureSignalHandlerOptions options; -// absl::InstallFailureSignalHandler(options); -// -// // Start running your main program -// ... -// return 0; -// } -// -#ifndef ABSL_DEBUGGING_SYMBOLIZE_H_ -#define ABSL_DEBUGGING_SYMBOLIZE_H_ - -#include "absl/debugging/internal/symbolize.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// InitializeSymbolizer() -// -// Initializes the program counter symbolizer, given the path of the program -// (typically obtained through `main()`s `argv[0]`). The Abseil symbolizer -// allows you to read program counters (instruction pointer values) using their -// human-readable names within output such as stack traces. -// -// Example: -// -// int main(int argc, char *argv[]) { -// absl::InitializeSymbolizer(argv[0]); -// // Now you can use the symbolizer -// } -void InitializeSymbolizer(const char* argv0); -// -// Symbolize() -// -// Symbolizes a program counter (instruction pointer value) `pc` and, on -// success, writes the name to `out`. The symbol name is demangled, if possible. -// Note that the symbolized name may be truncated and will be NUL-terminated. -// Demangling is supported for symbols generated by GCC 3.x or newer). Returns -// `false` on failure. -// -// Example: -// -// // Print a program counter and its symbol name. -// static void DumpPCAndSymbol(void *pc) { -// char tmp[1024]; -// const char *symbol = "(unknown)"; -// if (absl::Symbolize(pc, tmp, sizeof(tmp))) { -// symbol = tmp; -// } -// absl::PrintF("%p %s\n", pc, symbol); -// } -bool Symbolize(const void *pc, char *out, int out_size); - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_DEBUGGING_SYMBOLIZE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_darwin.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_darwin.inc deleted file mode 100644 index 443ce9e..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_darwin.inc +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2020 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include -#include - -#include -#include - -#include "absl/base/internal/raw_logging.h" -#include "absl/debugging/internal/demangle.h" -#include "absl/strings/numbers.h" -#include "absl/strings/str_cat.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -void InitializeSymbolizer(const char*) {} - -namespace debugging_internal { -namespace { - -static std::string GetSymbolString(absl::string_view backtrace_line) { - // Example Backtrace lines: - // 0 libimaging_shared.dylib 0x018c152a - // _ZNSt11_Deque_baseIN3nik7mediadb4PageESaIS2_EE17_M_initialize_mapEm + 3478 - // - // or - // 0 libimaging_shared.dylib 0x0000000001895c39 - // _ZN3nik4util19register_shared_ptrINS_3gpu7TextureEEEvPKvS5_ + 39 - // - // or - // 0 mysterious_app 0x0124000120120009 main + 17 - auto address_pos = backtrace_line.find(" 0x"); - if (address_pos == absl::string_view::npos) return std::string(); - absl::string_view symbol_view = backtrace_line.substr(address_pos + 1); - - auto space_pos = symbol_view.find(" "); - if (space_pos == absl::string_view::npos) return std::string(); - symbol_view = symbol_view.substr(space_pos + 1); // to mangled symbol - - auto plus_pos = symbol_view.find(" + "); - if (plus_pos == absl::string_view::npos) return std::string(); - symbol_view = symbol_view.substr(0, plus_pos); // strip remainng - - return std::string(symbol_view); -} - -} // namespace -} // namespace debugging_internal - -bool Symbolize(const void* pc, char* out, int out_size) { - if (out_size <= 0 || pc == nullptr) { - out = nullptr; - return false; - } - - // This allocates a char* array. - char** frame_strings = backtrace_symbols(const_cast(&pc), 1); - - if (frame_strings == nullptr) return false; - - std::string symbol = debugging_internal::GetSymbolString(frame_strings[0]); - free(frame_strings); - - char tmp_buf[1024]; - if (debugging_internal::Demangle(symbol.c_str(), tmp_buf, sizeof(tmp_buf))) { - size_t len = strlen(tmp_buf); - if (len + 1 <= static_cast(out_size)) { // +1 for '\0' - assert(len < sizeof(tmp_buf)); - memmove(out, tmp_buf, len + 1); - } - } else { - strncpy(out, symbol.c_str(), out_size); - } - - if (out[out_size - 1] != '\0') { - // strncpy() does not '\0' terminate when it truncates. - static constexpr char kEllipsis[] = "..."; - int ellipsis_size = std::min(sizeof(kEllipsis) - 1, out_size - 1); - memcpy(out + out_size - ellipsis_size - 1, kEllipsis, ellipsis_size); - out[out_size - 1] = '\0'; - } - - return true; -} - -ABSL_NAMESPACE_END -} // namespace absl diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_elf.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_elf.inc deleted file mode 100644 index f4d5727..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_elf.inc +++ /dev/null @@ -1,1560 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// This library provides Symbolize() function that symbolizes program -// counters to their corresponding symbol names on linux platforms. -// This library has a minimal implementation of an ELF symbol table -// reader (i.e. it doesn't depend on libelf, etc.). -// -// The algorithm used in Symbolize() is as follows. -// -// 1. Go through a list of maps in /proc/self/maps and find the map -// containing the program counter. -// -// 2. Open the mapped file and find a regular symbol table inside. -// Iterate over symbols in the symbol table and look for the symbol -// containing the program counter. If such a symbol is found, -// obtain the symbol name, and demangle the symbol if possible. -// If the symbol isn't found in the regular symbol table (binary is -// stripped), try the same thing with a dynamic symbol table. -// -// Note that Symbolize() is originally implemented to be used in -// signal handlers, hence it doesn't use malloc() and other unsafe -// operations. It should be both thread-safe and async-signal-safe. -// -// Implementation note: -// -// We don't use heaps but only use stacks. We want to reduce the -// stack consumption so that the symbolizer can run on small stacks. -// -// Here are some numbers collected with GCC 4.1.0 on x86: -// - sizeof(Elf32_Sym) = 16 -// - sizeof(Elf32_Shdr) = 40 -// - sizeof(Elf64_Sym) = 24 -// - sizeof(Elf64_Shdr) = 64 -// -// This implementation is intended to be async-signal-safe but uses some -// functions which are not guaranteed to be so, such as memchr() and -// memmove(). We assume they are async-signal-safe. - -#include -#include -#include -#include // For ElfW() macro. -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "absl/base/casts.h" -#include "absl/base/dynamic_annotations.h" -#include "absl/base/internal/low_level_alloc.h" -#include "absl/base/internal/raw_logging.h" -#include "absl/base/internal/spinlock.h" -#include "absl/base/port.h" -#include "absl/debugging/internal/demangle.h" -#include "absl/debugging/internal/vdso_support.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// Value of argv[0]. Used by MaybeInitializeObjFile(). -static char *argv0_value = nullptr; - -void InitializeSymbolizer(const char *argv0) { -#ifdef ABSL_HAVE_VDSO_SUPPORT - // We need to make sure VDSOSupport::Init() is called before any setuid or - // chroot calls, so InitializeSymbolizer() should be called very early in the - // life of a program. - absl::debugging_internal::VDSOSupport::Init(); -#endif - if (argv0_value != nullptr) { - free(argv0_value); - argv0_value = nullptr; - } - if (argv0 != nullptr && argv0[0] != '\0') { - argv0_value = strdup(argv0); - } -} - -namespace debugging_internal { -namespace { - -// Re-runs fn until it doesn't cause EINTR. -#define NO_INTR(fn) \ - do { \ - } while ((fn) < 0 && errno == EINTR) - -// On Linux, ELF_ST_* are defined in . To make this portable -// we define our own ELF_ST_BIND and ELF_ST_TYPE if not available. -#ifndef ELF_ST_BIND -#define ELF_ST_BIND(info) (((unsigned char)(info)) >> 4) -#endif - -#ifndef ELF_ST_TYPE -#define ELF_ST_TYPE(info) (((unsigned char)(info)) & 0xF) -#endif - -// Some platforms use a special .opd section to store function pointers. -const char kOpdSectionName[] = ".opd"; - -#if (defined(__powerpc__) && !(_CALL_ELF > 1)) || defined(__ia64) -// Use opd section for function descriptors on these platforms, the function -// address is the first word of the descriptor. -enum { kPlatformUsesOPDSections = 1 }; -#else // not PPC or IA64 -enum { kPlatformUsesOPDSections = 0 }; -#endif - -// This works for PowerPC & IA64 only. A function descriptor consist of two -// pointers and the first one is the function's entry. -const size_t kFunctionDescriptorSize = sizeof(void *) * 2; - -const int kMaxDecorators = 10; // Seems like a reasonable upper limit. - -struct InstalledSymbolDecorator { - SymbolDecorator fn; - void *arg; - int ticket; -}; - -int g_num_decorators; -InstalledSymbolDecorator g_decorators[kMaxDecorators]; - -struct FileMappingHint { - const void *start; - const void *end; - uint64_t offset; - const char *filename; -}; - -// Protects g_decorators. -// We are using SpinLock and not a Mutex here, because we may be called -// from inside Mutex::Lock itself, and it prohibits recursive calls. -// This happens in e.g. base/stacktrace_syscall_unittest. -// Moreover, we are using only TryLock(), if the decorator list -// is being modified (is busy), we skip all decorators, and possibly -// loose some info. Sorry, that's the best we could do. -ABSL_CONST_INIT absl::base_internal::SpinLock g_decorators_mu( - absl::kConstInit, absl::base_internal::SCHEDULE_KERNEL_ONLY); - -const int kMaxFileMappingHints = 8; -int g_num_file_mapping_hints; -FileMappingHint g_file_mapping_hints[kMaxFileMappingHints]; -// Protects g_file_mapping_hints. -ABSL_CONST_INIT absl::base_internal::SpinLock g_file_mapping_mu( - absl::kConstInit, absl::base_internal::SCHEDULE_KERNEL_ONLY); - -// Async-signal-safe function to zero a buffer. -// memset() is not guaranteed to be async-signal-safe. -static void SafeMemZero(void* p, size_t size) { - unsigned char *c = static_cast(p); - while (size--) { - *c++ = 0; - } -} - -struct ObjFile { - ObjFile() - : filename(nullptr), - start_addr(nullptr), - end_addr(nullptr), - offset(0), - fd(-1), - elf_type(-1) { - SafeMemZero(&elf_header, sizeof(elf_header)); - SafeMemZero(&phdr[0], sizeof(phdr)); - } - - char *filename; - const void *start_addr; - const void *end_addr; - uint64_t offset; - - // The following fields are initialized on the first access to the - // object file. - int fd; - int elf_type; - ElfW(Ehdr) elf_header; - - // PT_LOAD program header describing executable code. - // Normally we expect just one, but SWIFT binaries have two. - std::array phdr; -}; - -// Build 4-way associative cache for symbols. Within each cache line, symbols -// are replaced in LRU order. -enum { - ASSOCIATIVITY = 4, -}; -struct SymbolCacheLine { - const void *pc[ASSOCIATIVITY]; - char *name[ASSOCIATIVITY]; - - // age[i] is incremented when a line is accessed. it's reset to zero if the - // i'th entry is read. - uint32_t age[ASSOCIATIVITY]; -}; - -// --------------------------------------------------------------- -// An async-signal-safe arena for LowLevelAlloc -static std::atomic g_sig_safe_arena; - -static base_internal::LowLevelAlloc::Arena *SigSafeArena() { - return g_sig_safe_arena.load(std::memory_order_acquire); -} - -static void InitSigSafeArena() { - if (SigSafeArena() == nullptr) { - base_internal::LowLevelAlloc::Arena *new_arena = - base_internal::LowLevelAlloc::NewArena( - base_internal::LowLevelAlloc::kAsyncSignalSafe); - base_internal::LowLevelAlloc::Arena *old_value = nullptr; - if (!g_sig_safe_arena.compare_exchange_strong(old_value, new_arena, - std::memory_order_release, - std::memory_order_relaxed)) { - // We lost a race to allocate an arena; deallocate. - base_internal::LowLevelAlloc::DeleteArena(new_arena); - } - } -} - -// --------------------------------------------------------------- -// An AddrMap is a vector of ObjFile, using SigSafeArena() for allocation. - -class AddrMap { - public: - AddrMap() : size_(0), allocated_(0), obj_(nullptr) {} - ~AddrMap() { base_internal::LowLevelAlloc::Free(obj_); } - int Size() const { return size_; } - ObjFile *At(int i) { return &obj_[i]; } - ObjFile *Add(); - void Clear(); - - private: - int size_; // count of valid elements (<= allocated_) - int allocated_; // count of allocated elements - ObjFile *obj_; // array of allocated_ elements - AddrMap(const AddrMap &) = delete; - AddrMap &operator=(const AddrMap &) = delete; -}; - -void AddrMap::Clear() { - for (int i = 0; i != size_; i++) { - At(i)->~ObjFile(); - } - size_ = 0; -} - -ObjFile *AddrMap::Add() { - if (size_ == allocated_) { - int new_allocated = allocated_ * 2 + 50; - ObjFile *new_obj_ = - static_cast(base_internal::LowLevelAlloc::AllocWithArena( - new_allocated * sizeof(*new_obj_), SigSafeArena())); - if (obj_) { - memcpy(new_obj_, obj_, allocated_ * sizeof(*new_obj_)); - base_internal::LowLevelAlloc::Free(obj_); - } - obj_ = new_obj_; - allocated_ = new_allocated; - } - return new (&obj_[size_++]) ObjFile; -} - -// --------------------------------------------------------------- - -enum FindSymbolResult { SYMBOL_NOT_FOUND = 1, SYMBOL_TRUNCATED, SYMBOL_FOUND }; - -class Symbolizer { - public: - Symbolizer(); - ~Symbolizer(); - const char *GetSymbol(const void *const pc); - - private: - char *CopyString(const char *s) { - int len = strlen(s); - char *dst = static_cast( - base_internal::LowLevelAlloc::AllocWithArena(len + 1, SigSafeArena())); - ABSL_RAW_CHECK(dst != nullptr, "out of memory"); - memcpy(dst, s, len + 1); - return dst; - } - ObjFile *FindObjFile(const void *const start, - size_t size) ABSL_ATTRIBUTE_NOINLINE; - static bool RegisterObjFile(const char *filename, - const void *const start_addr, - const void *const end_addr, uint64_t offset, - void *arg); - SymbolCacheLine *GetCacheLine(const void *const pc); - const char *FindSymbolInCache(const void *const pc); - const char *InsertSymbolInCache(const void *const pc, const char *name); - void AgeSymbols(SymbolCacheLine *line); - void ClearAddrMap(); - FindSymbolResult GetSymbolFromObjectFile(const ObjFile &obj, - const void *const pc, - const ptrdiff_t relocation, - char *out, int out_size, - char *tmp_buf, int tmp_buf_size); - - enum { - SYMBOL_BUF_SIZE = 3072, - TMP_BUF_SIZE = 1024, - SYMBOL_CACHE_LINES = 128, - }; - - AddrMap addr_map_; - - bool ok_; - bool addr_map_read_; - - char symbol_buf_[SYMBOL_BUF_SIZE]; - - // tmp_buf_ will be used to store arrays of ElfW(Shdr) and ElfW(Sym) - // so we ensure that tmp_buf_ is properly aligned to store either. - alignas(16) char tmp_buf_[TMP_BUF_SIZE]; - static_assert(alignof(ElfW(Shdr)) <= 16, - "alignment of tmp buf too small for Shdr"); - static_assert(alignof(ElfW(Sym)) <= 16, - "alignment of tmp buf too small for Sym"); - - SymbolCacheLine symbol_cache_[SYMBOL_CACHE_LINES]; -}; - -static std::atomic g_cached_symbolizer; - -} // namespace - -static int SymbolizerSize() { -#if defined(__wasm__) || defined(__asmjs__) - int pagesize = getpagesize(); -#else - int pagesize = sysconf(_SC_PAGESIZE); -#endif - return ((sizeof(Symbolizer) - 1) / pagesize + 1) * pagesize; -} - -// Return (and set null) g_cached_symbolized_state if it is not null. -// Otherwise return a new symbolizer. -static Symbolizer *AllocateSymbolizer() { - InitSigSafeArena(); - Symbolizer *symbolizer = - g_cached_symbolizer.exchange(nullptr, std::memory_order_acquire); - if (symbolizer != nullptr) { - return symbolizer; - } - return new (base_internal::LowLevelAlloc::AllocWithArena( - SymbolizerSize(), SigSafeArena())) Symbolizer(); -} - -// Set g_cached_symbolize_state to s if it is null, otherwise -// delete s. -static void FreeSymbolizer(Symbolizer *s) { - Symbolizer *old_cached_symbolizer = nullptr; - if (!g_cached_symbolizer.compare_exchange_strong(old_cached_symbolizer, s, - std::memory_order_release, - std::memory_order_relaxed)) { - s->~Symbolizer(); - base_internal::LowLevelAlloc::Free(s); - } -} - -Symbolizer::Symbolizer() : ok_(true), addr_map_read_(false) { - for (SymbolCacheLine &symbol_cache_line : symbol_cache_) { - for (size_t j = 0; j < ABSL_ARRAYSIZE(symbol_cache_line.name); ++j) { - symbol_cache_line.pc[j] = nullptr; - symbol_cache_line.name[j] = nullptr; - symbol_cache_line.age[j] = 0; - } - } -} - -Symbolizer::~Symbolizer() { - for (SymbolCacheLine &symbol_cache_line : symbol_cache_) { - for (char *s : symbol_cache_line.name) { - base_internal::LowLevelAlloc::Free(s); - } - } - ClearAddrMap(); -} - -// We don't use assert() since it's not guaranteed to be -// async-signal-safe. Instead we define a minimal assertion -// macro. So far, we don't need pretty printing for __FILE__, etc. -#define SAFE_ASSERT(expr) ((expr) ? static_cast(0) : abort()) - -// Read up to "count" bytes from file descriptor "fd" into the buffer -// starting at "buf" while handling short reads and EINTR. On -// success, return the number of bytes read. Otherwise, return -1. -static ssize_t ReadPersistent(int fd, void *buf, size_t count) { - SAFE_ASSERT(fd >= 0); - SAFE_ASSERT(count <= SSIZE_MAX); - char *buf0 = reinterpret_cast(buf); - size_t num_bytes = 0; - while (num_bytes < count) { - ssize_t len; - NO_INTR(len = read(fd, buf0 + num_bytes, count - num_bytes)); - if (len < 0) { // There was an error other than EINTR. - ABSL_RAW_LOG(WARNING, "read failed: errno=%d", errno); - return -1; - } - if (len == 0) { // Reached EOF. - break; - } - num_bytes += len; - } - SAFE_ASSERT(num_bytes <= count); - return static_cast(num_bytes); -} - -// Read up to "count" bytes from "offset" in the file pointed by file -// descriptor "fd" into the buffer starting at "buf". On success, -// return the number of bytes read. Otherwise, return -1. -static ssize_t ReadFromOffset(const int fd, void *buf, const size_t count, - const off_t offset) { - off_t off = lseek(fd, offset, SEEK_SET); - if (off == (off_t)-1) { - ABSL_RAW_LOG(WARNING, "lseek(%d, %ju, SEEK_SET) failed: errno=%d", fd, - static_cast(offset), errno); - return -1; - } - return ReadPersistent(fd, buf, count); -} - -// Try reading exactly "count" bytes from "offset" bytes in a file -// pointed by "fd" into the buffer starting at "buf" while handling -// short reads and EINTR. On success, return true. Otherwise, return -// false. -static bool ReadFromOffsetExact(const int fd, void *buf, const size_t count, - const off_t offset) { - ssize_t len = ReadFromOffset(fd, buf, count, offset); - return len >= 0 && static_cast(len) == count; -} - -// Returns elf_header.e_type if the file pointed by fd is an ELF binary. -static int FileGetElfType(const int fd) { - ElfW(Ehdr) elf_header; - if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) { - return -1; - } - if (memcmp(elf_header.e_ident, ELFMAG, SELFMAG) != 0) { - return -1; - } - return elf_header.e_type; -} - -// Read the section headers in the given ELF binary, and if a section -// of the specified type is found, set the output to this section header -// and return true. Otherwise, return false. -// To keep stack consumption low, we would like this function to not get -// inlined. -static ABSL_ATTRIBUTE_NOINLINE bool GetSectionHeaderByType( - const int fd, ElfW(Half) sh_num, const off_t sh_offset, ElfW(Word) type, - ElfW(Shdr) * out, char *tmp_buf, int tmp_buf_size) { - ElfW(Shdr) *buf = reinterpret_cast(tmp_buf); - const int buf_entries = tmp_buf_size / sizeof(buf[0]); - const int buf_bytes = buf_entries * sizeof(buf[0]); - - for (int i = 0; i < sh_num;) { - const ssize_t num_bytes_left = (sh_num - i) * sizeof(buf[0]); - const ssize_t num_bytes_to_read = - (buf_bytes > num_bytes_left) ? num_bytes_left : buf_bytes; - const off_t offset = sh_offset + i * sizeof(buf[0]); - const ssize_t len = ReadFromOffset(fd, buf, num_bytes_to_read, offset); - if (len % sizeof(buf[0]) != 0) { - ABSL_RAW_LOG( - WARNING, - "Reading %zd bytes from offset %ju returned %zd which is not a " - "multiple of %zu.", - num_bytes_to_read, static_cast(offset), len, - sizeof(buf[0])); - return false; - } - const ssize_t num_headers_in_buf = len / sizeof(buf[0]); - SAFE_ASSERT(num_headers_in_buf <= buf_entries); - for (int j = 0; j < num_headers_in_buf; ++j) { - if (buf[j].sh_type == type) { - *out = buf[j]; - return true; - } - } - i += num_headers_in_buf; - } - return false; -} - -// There is no particular reason to limit section name to 63 characters, -// but there has (as yet) been no need for anything longer either. -const int kMaxSectionNameLen = 64; - -bool ForEachSection(int fd, - const std::function &callback) { - ElfW(Ehdr) elf_header; - if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) { - return false; - } - - ElfW(Shdr) shstrtab; - off_t shstrtab_offset = - (elf_header.e_shoff + elf_header.e_shentsize * elf_header.e_shstrndx); - if (!ReadFromOffsetExact(fd, &shstrtab, sizeof(shstrtab), shstrtab_offset)) { - return false; - } - - for (int i = 0; i < elf_header.e_shnum; ++i) { - ElfW(Shdr) out; - off_t section_header_offset = - (elf_header.e_shoff + elf_header.e_shentsize * i); - if (!ReadFromOffsetExact(fd, &out, sizeof(out), section_header_offset)) { - return false; - } - off_t name_offset = shstrtab.sh_offset + out.sh_name; - char header_name[kMaxSectionNameLen]; - ssize_t n_read = - ReadFromOffset(fd, &header_name, kMaxSectionNameLen, name_offset); - if (n_read == -1) { - return false; - } else if (n_read > kMaxSectionNameLen) { - // Long read? - return false; - } - - absl::string_view name(header_name, strnlen(header_name, n_read)); - if (!callback(name, out)) { - break; - } - } - return true; -} - -// name_len should include terminating '\0'. -bool GetSectionHeaderByName(int fd, const char *name, size_t name_len, - ElfW(Shdr) * out) { - char header_name[kMaxSectionNameLen]; - if (sizeof(header_name) < name_len) { - ABSL_RAW_LOG(WARNING, - "Section name '%s' is too long (%zu); " - "section will not be found (even if present).", - name, name_len); - // No point in even trying. - return false; - } - - ElfW(Ehdr) elf_header; - if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) { - return false; - } - - ElfW(Shdr) shstrtab; - off_t shstrtab_offset = - (elf_header.e_shoff + elf_header.e_shentsize * elf_header.e_shstrndx); - if (!ReadFromOffsetExact(fd, &shstrtab, sizeof(shstrtab), shstrtab_offset)) { - return false; - } - - for (int i = 0; i < elf_header.e_shnum; ++i) { - off_t section_header_offset = - (elf_header.e_shoff + elf_header.e_shentsize * i); - if (!ReadFromOffsetExact(fd, out, sizeof(*out), section_header_offset)) { - return false; - } - off_t name_offset = shstrtab.sh_offset + out->sh_name; - ssize_t n_read = ReadFromOffset(fd, &header_name, name_len, name_offset); - if (n_read < 0) { - return false; - } else if (static_cast(n_read) != name_len) { - // Short read -- name could be at end of file. - continue; - } - if (memcmp(header_name, name, name_len) == 0) { - return true; - } - } - return false; -} - -// Compare symbols at in the same address. -// Return true if we should pick symbol1. -static bool ShouldPickFirstSymbol(const ElfW(Sym) & symbol1, - const ElfW(Sym) & symbol2) { - // If one of the symbols is weak and the other is not, pick the one - // this is not a weak symbol. - char bind1 = ELF_ST_BIND(symbol1.st_info); - char bind2 = ELF_ST_BIND(symbol1.st_info); - if (bind1 == STB_WEAK && bind2 != STB_WEAK) return false; - if (bind2 == STB_WEAK && bind1 != STB_WEAK) return true; - - // If one of the symbols has zero size and the other is not, pick the - // one that has non-zero size. - if (symbol1.st_size != 0 && symbol2.st_size == 0) { - return true; - } - if (symbol1.st_size == 0 && symbol2.st_size != 0) { - return false; - } - - // If one of the symbols has no type and the other is not, pick the - // one that has a type. - char type1 = ELF_ST_TYPE(symbol1.st_info); - char type2 = ELF_ST_TYPE(symbol1.st_info); - if (type1 != STT_NOTYPE && type2 == STT_NOTYPE) { - return true; - } - if (type1 == STT_NOTYPE && type2 != STT_NOTYPE) { - return false; - } - - // Pick the first one, if we still cannot decide. - return true; -} - -// Return true if an address is inside a section. -static bool InSection(const void *address, const ElfW(Shdr) * section) { - const char *start = reinterpret_cast(section->sh_addr); - size_t size = static_cast(section->sh_size); - return start <= address && address < (start + size); -} - -static const char *ComputeOffset(const char *base, ptrdiff_t offset) { - // Note: cast to uintptr_t to avoid undefined behavior when base evaluates to - // zero and offset is non-zero. - return reinterpret_cast( - reinterpret_cast(base) + offset); -} - -// Read a symbol table and look for the symbol containing the -// pc. Iterate over symbols in a symbol table and look for the symbol -// containing "pc". If the symbol is found, and its name fits in -// out_size, the name is written into out and SYMBOL_FOUND is returned. -// If the name does not fit, truncated name is written into out, -// and SYMBOL_TRUNCATED is returned. Out is NUL-terminated. -// If the symbol is not found, SYMBOL_NOT_FOUND is returned; -// To keep stack consumption low, we would like this function to not get -// inlined. -static ABSL_ATTRIBUTE_NOINLINE FindSymbolResult FindSymbol( - const void *const pc, const int fd, char *out, int out_size, - ptrdiff_t relocation, const ElfW(Shdr) * strtab, const ElfW(Shdr) * symtab, - const ElfW(Shdr) * opd, char *tmp_buf, int tmp_buf_size) { - if (symtab == nullptr) { - return SYMBOL_NOT_FOUND; - } - - // Read multiple symbols at once to save read() calls. - ElfW(Sym) *buf = reinterpret_cast(tmp_buf); - const int buf_entries = tmp_buf_size / sizeof(buf[0]); - - const int num_symbols = symtab->sh_size / symtab->sh_entsize; - - // On platforms using an .opd section (PowerPC & IA64), a function symbol - // has the address of a function descriptor, which contains the real - // starting address. However, we do not always want to use the real - // starting address because we sometimes want to symbolize a function - // pointer into the .opd section, e.g. FindSymbol(&foo,...). - const bool pc_in_opd = - kPlatformUsesOPDSections && opd != nullptr && InSection(pc, opd); - const bool deref_function_descriptor_pointer = - kPlatformUsesOPDSections && opd != nullptr && !pc_in_opd; - - ElfW(Sym) best_match; - SafeMemZero(&best_match, sizeof(best_match)); - bool found_match = false; - for (int i = 0; i < num_symbols;) { - off_t offset = symtab->sh_offset + i * symtab->sh_entsize; - const int num_remaining_symbols = num_symbols - i; - const int entries_in_chunk = std::min(num_remaining_symbols, buf_entries); - const int bytes_in_chunk = entries_in_chunk * sizeof(buf[0]); - const ssize_t len = ReadFromOffset(fd, buf, bytes_in_chunk, offset); - SAFE_ASSERT(len % sizeof(buf[0]) == 0); - const ssize_t num_symbols_in_buf = len / sizeof(buf[0]); - SAFE_ASSERT(num_symbols_in_buf <= entries_in_chunk); - for (int j = 0; j < num_symbols_in_buf; ++j) { - const ElfW(Sym) &symbol = buf[j]; - - // For a DSO, a symbol address is relocated by the loading address. - // We keep the original address for opd redirection below. - const char *const original_start_address = - reinterpret_cast(symbol.st_value); - const char *start_address = - ComputeOffset(original_start_address, relocation); - - if (deref_function_descriptor_pointer && - InSection(original_start_address, opd)) { - // The opd section is mapped into memory. Just dereference - // start_address to get the first double word, which points to the - // function entry. - start_address = *reinterpret_cast(start_address); - } - - // If pc is inside the .opd section, it points to a function descriptor. - const size_t size = pc_in_opd ? kFunctionDescriptorSize : symbol.st_size; - const void *const end_address = ComputeOffset(start_address, size); - if (symbol.st_value != 0 && // Skip null value symbols. - symbol.st_shndx != 0 && // Skip undefined symbols. -#ifdef STT_TLS - ELF_ST_TYPE(symbol.st_info) != STT_TLS && // Skip thread-local data. -#endif // STT_TLS - ((start_address <= pc && pc < end_address) || - (start_address == pc && pc == end_address))) { - if (!found_match || ShouldPickFirstSymbol(symbol, best_match)) { - found_match = true; - best_match = symbol; - } - } - } - i += num_symbols_in_buf; - } - - if (found_match) { - const size_t off = strtab->sh_offset + best_match.st_name; - const ssize_t n_read = ReadFromOffset(fd, out, out_size, off); - if (n_read <= 0) { - // This should never happen. - ABSL_RAW_LOG(WARNING, - "Unable to read from fd %d at offset %zu: n_read = %zd", fd, - off, n_read); - return SYMBOL_NOT_FOUND; - } - ABSL_RAW_CHECK(n_read <= out_size, "ReadFromOffset read too much data."); - - // strtab->sh_offset points into .strtab-like section that contains - // NUL-terminated strings: '\0foo\0barbaz\0...". - // - // sh_offset+st_name points to the start of symbol name, but we don't know - // how long the symbol is, so we try to read as much as we have space for, - // and usually over-read (i.e. there is a NUL somewhere before n_read). - if (memchr(out, '\0', n_read) == nullptr) { - // Either out_size was too small (n_read == out_size and no NUL), or - // we tried to read past the EOF (n_read < out_size) and .strtab is - // corrupt (missing terminating NUL; should never happen for valid ELF). - out[n_read - 1] = '\0'; - return SYMBOL_TRUNCATED; - } - return SYMBOL_FOUND; - } - - return SYMBOL_NOT_FOUND; -} - -// Get the symbol name of "pc" from the file pointed by "fd". Process -// both regular and dynamic symbol tables if necessary. -// See FindSymbol() comment for description of return value. -FindSymbolResult Symbolizer::GetSymbolFromObjectFile( - const ObjFile &obj, const void *const pc, const ptrdiff_t relocation, - char *out, int out_size, char *tmp_buf, int tmp_buf_size) { - ElfW(Shdr) symtab; - ElfW(Shdr) strtab; - ElfW(Shdr) opd; - ElfW(Shdr) *opd_ptr = nullptr; - - // On platforms using an .opd sections for function descriptor, read - // the section header. The .opd section is in data segment and should be - // loaded but we check that it is mapped just to be extra careful. - if (kPlatformUsesOPDSections) { - if (GetSectionHeaderByName(obj.fd, kOpdSectionName, - sizeof(kOpdSectionName) - 1, &opd) && - FindObjFile(reinterpret_cast(opd.sh_addr) + relocation, - opd.sh_size) != nullptr) { - opd_ptr = &opd; - } else { - return SYMBOL_NOT_FOUND; - } - } - - // Consult a regular symbol table, then fall back to the dynamic symbol table. - for (const auto symbol_table_type : {SHT_SYMTAB, SHT_DYNSYM}) { - if (!GetSectionHeaderByType(obj.fd, obj.elf_header.e_shnum, - obj.elf_header.e_shoff, symbol_table_type, - &symtab, tmp_buf, tmp_buf_size)) { - continue; - } - if (!ReadFromOffsetExact( - obj.fd, &strtab, sizeof(strtab), - obj.elf_header.e_shoff + symtab.sh_link * sizeof(symtab))) { - continue; - } - const FindSymbolResult rc = - FindSymbol(pc, obj.fd, out, out_size, relocation, &strtab, &symtab, - opd_ptr, tmp_buf, tmp_buf_size); - if (rc != SYMBOL_NOT_FOUND) { - return rc; - } - } - - return SYMBOL_NOT_FOUND; -} - -namespace { -// Thin wrapper around a file descriptor so that the file descriptor -// gets closed for sure. -class FileDescriptor { - public: - explicit FileDescriptor(int fd) : fd_(fd) {} - FileDescriptor(const FileDescriptor &) = delete; - FileDescriptor &operator=(const FileDescriptor &) = delete; - - ~FileDescriptor() { - if (fd_ >= 0) { - NO_INTR(close(fd_)); - } - } - - int get() const { return fd_; } - - private: - const int fd_; -}; - -// Helper class for reading lines from file. -// -// Note: we don't use ProcMapsIterator since the object is big (it has -// a 5k array member) and uses async-unsafe functions such as sscanf() -// and snprintf(). -class LineReader { - public: - explicit LineReader(int fd, char *buf, int buf_len) - : fd_(fd), - buf_len_(buf_len), - buf_(buf), - bol_(buf), - eol_(buf), - eod_(buf) {} - - LineReader(const LineReader &) = delete; - LineReader &operator=(const LineReader &) = delete; - - // Read '\n'-terminated line from file. On success, modify "bol" - // and "eol", then return true. Otherwise, return false. - // - // Note: if the last line doesn't end with '\n', the line will be - // dropped. It's an intentional behavior to make the code simple. - bool ReadLine(const char **bol, const char **eol) { - if (BufferIsEmpty()) { // First time. - const ssize_t num_bytes = ReadPersistent(fd_, buf_, buf_len_); - if (num_bytes <= 0) { // EOF or error. - return false; - } - eod_ = buf_ + num_bytes; - bol_ = buf_; - } else { - bol_ = eol_ + 1; // Advance to the next line in the buffer. - SAFE_ASSERT(bol_ <= eod_); // "bol_" can point to "eod_". - if (!HasCompleteLine()) { - const int incomplete_line_length = eod_ - bol_; - // Move the trailing incomplete line to the beginning. - memmove(buf_, bol_, incomplete_line_length); - // Read text from file and append it. - char *const append_pos = buf_ + incomplete_line_length; - const int capacity_left = buf_len_ - incomplete_line_length; - const ssize_t num_bytes = - ReadPersistent(fd_, append_pos, capacity_left); - if (num_bytes <= 0) { // EOF or error. - return false; - } - eod_ = append_pos + num_bytes; - bol_ = buf_; - } - } - eol_ = FindLineFeed(); - if (eol_ == nullptr) { // '\n' not found. Malformed line. - return false; - } - *eol_ = '\0'; // Replace '\n' with '\0'. - - *bol = bol_; - *eol = eol_; - return true; - } - - private: - char *FindLineFeed() const { - return reinterpret_cast(memchr(bol_, '\n', eod_ - bol_)); - } - - bool BufferIsEmpty() const { return buf_ == eod_; } - - bool HasCompleteLine() const { - return !BufferIsEmpty() && FindLineFeed() != nullptr; - } - - const int fd_; - const int buf_len_; - char *const buf_; - char *bol_; - char *eol_; - const char *eod_; // End of data in "buf_". -}; -} // namespace - -// Place the hex number read from "start" into "*hex". The pointer to -// the first non-hex character or "end" is returned. -static const char *GetHex(const char *start, const char *end, - uint64_t *const value) { - uint64_t hex = 0; - const char *p; - for (p = start; p < end; ++p) { - int ch = *p; - if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F') || - (ch >= 'a' && ch <= 'f')) { - hex = (hex << 4) | (ch < 'A' ? ch - '0' : (ch & 0xF) + 9); - } else { // Encountered the first non-hex character. - break; - } - } - SAFE_ASSERT(p <= end); - *value = hex; - return p; -} - -static const char *GetHex(const char *start, const char *end, - const void **const addr) { - uint64_t hex = 0; - const char *p = GetHex(start, end, &hex); - *addr = reinterpret_cast(hex); - return p; -} - -// Normally we are only interested in "r?x" maps. -// On the PowerPC, function pointers point to descriptors in the .opd -// section. The descriptors themselves are not executable code, so -// we need to relax the check below to "r??". -static bool ShouldUseMapping(const char *const flags) { - return flags[0] == 'r' && (kPlatformUsesOPDSections || flags[2] == 'x'); -} - -// Read /proc/self/maps and run "callback" for each mmapped file found. If -// "callback" returns false, stop scanning and return true. Else continue -// scanning /proc/self/maps. Return true if no parse error is found. -static ABSL_ATTRIBUTE_NOINLINE bool ReadAddrMap( - bool (*callback)(const char *filename, const void *const start_addr, - const void *const end_addr, uint64_t offset, void *arg), - void *arg, void *tmp_buf, int tmp_buf_size) { - // Use /proc/self/task//maps instead of /proc/self/maps. The latter - // requires kernel to stop all threads, and is significantly slower when there - // are 1000s of threads. - char maps_path[80]; - snprintf(maps_path, sizeof(maps_path), "/proc/self/task/%d/maps", getpid()); - - int maps_fd; - NO_INTR(maps_fd = open(maps_path, O_RDONLY)); - FileDescriptor wrapped_maps_fd(maps_fd); - if (wrapped_maps_fd.get() < 0) { - ABSL_RAW_LOG(WARNING, "%s: errno=%d", maps_path, errno); - return false; - } - - // Iterate over maps and look for the map containing the pc. Then - // look into the symbol tables inside. - LineReader reader(wrapped_maps_fd.get(), static_cast(tmp_buf), - tmp_buf_size); - while (true) { - const char *cursor; - const char *eol; - if (!reader.ReadLine(&cursor, &eol)) { // EOF or malformed line. - break; - } - - const char *line = cursor; - const void *start_address; - // Start parsing line in /proc/self/maps. Here is an example: - // - // 08048000-0804c000 r-xp 00000000 08:01 2142121 /bin/cat - // - // We want start address (08048000), end address (0804c000), flags - // (r-xp) and file name (/bin/cat). - - // Read start address. - cursor = GetHex(cursor, eol, &start_address); - if (cursor == eol || *cursor != '-') { - ABSL_RAW_LOG(WARNING, "Corrupt /proc/self/maps line: %s", line); - return false; - } - ++cursor; // Skip '-'. - - // Read end address. - const void *end_address; - cursor = GetHex(cursor, eol, &end_address); - if (cursor == eol || *cursor != ' ') { - ABSL_RAW_LOG(WARNING, "Corrupt /proc/self/maps line: %s", line); - return false; - } - ++cursor; // Skip ' '. - - // Read flags. Skip flags until we encounter a space or eol. - const char *const flags_start = cursor; - while (cursor < eol && *cursor != ' ') { - ++cursor; - } - // We expect at least four letters for flags (ex. "r-xp"). - if (cursor == eol || cursor < flags_start + 4) { - ABSL_RAW_LOG(WARNING, "Corrupt /proc/self/maps: %s", line); - return false; - } - - // Check flags. - if (!ShouldUseMapping(flags_start)) { - continue; // We skip this map. - } - ++cursor; // Skip ' '. - - // Read file offset. - uint64_t offset; - cursor = GetHex(cursor, eol, &offset); - ++cursor; // Skip ' '. - - // Skip to file name. "cursor" now points to dev. We need to skip at least - // two spaces for dev and inode. - int num_spaces = 0; - while (cursor < eol) { - if (*cursor == ' ') { - ++num_spaces; - } else if (num_spaces >= 2) { - // The first non-space character after skipping two spaces - // is the beginning of the file name. - break; - } - ++cursor; - } - - // Check whether this entry corresponds to our hint table for the true - // filename. - bool hinted = - GetFileMappingHint(&start_address, &end_address, &offset, &cursor); - if (!hinted && (cursor == eol || cursor[0] == '[')) { - // not an object file, typically [vdso] or [vsyscall] - continue; - } - if (!callback(cursor, start_address, end_address, offset, arg)) break; - } - return true; -} - -// Find the objfile mapped in address region containing [addr, addr + len). -ObjFile *Symbolizer::FindObjFile(const void *const addr, size_t len) { - for (int i = 0; i < 2; ++i) { - if (!ok_) return nullptr; - - // Read /proc/self/maps if necessary - if (!addr_map_read_) { - addr_map_read_ = true; - if (!ReadAddrMap(RegisterObjFile, this, tmp_buf_, TMP_BUF_SIZE)) { - ok_ = false; - return nullptr; - } - } - - int lo = 0; - int hi = addr_map_.Size(); - while (lo < hi) { - int mid = (lo + hi) / 2; - if (addr < addr_map_.At(mid)->end_addr) { - hi = mid; - } else { - lo = mid + 1; - } - } - if (lo != addr_map_.Size()) { - ObjFile *obj = addr_map_.At(lo); - SAFE_ASSERT(obj->end_addr > addr); - if (addr >= obj->start_addr && - reinterpret_cast(addr) + len <= obj->end_addr) - return obj; - } - - // The address mapping may have changed since it was last read. Retry. - ClearAddrMap(); - } - return nullptr; -} - -void Symbolizer::ClearAddrMap() { - for (int i = 0; i != addr_map_.Size(); i++) { - ObjFile *o = addr_map_.At(i); - base_internal::LowLevelAlloc::Free(o->filename); - if (o->fd >= 0) { - NO_INTR(close(o->fd)); - } - } - addr_map_.Clear(); - addr_map_read_ = false; -} - -// Callback for ReadAddrMap to register objfiles in an in-memory table. -bool Symbolizer::RegisterObjFile(const char *filename, - const void *const start_addr, - const void *const end_addr, uint64_t offset, - void *arg) { - Symbolizer *impl = static_cast(arg); - - // Files are supposed to be added in the increasing address order. Make - // sure that's the case. - int addr_map_size = impl->addr_map_.Size(); - if (addr_map_size != 0) { - ObjFile *old = impl->addr_map_.At(addr_map_size - 1); - if (old->end_addr > end_addr) { - ABSL_RAW_LOG(ERROR, - "Unsorted addr map entry: 0x%" PRIxPTR ": %s <-> 0x%" PRIxPTR - ": %s", - reinterpret_cast(end_addr), filename, - reinterpret_cast(old->end_addr), old->filename); - return true; - } else if (old->end_addr == end_addr) { - // The same entry appears twice. This sometimes happens for [vdso]. - if (old->start_addr != start_addr || - strcmp(old->filename, filename) != 0) { - ABSL_RAW_LOG(ERROR, - "Duplicate addr 0x%" PRIxPTR ": %s <-> 0x%" PRIxPTR ": %s", - reinterpret_cast(end_addr), filename, - reinterpret_cast(old->end_addr), old->filename); - } - return true; - } - } - ObjFile *obj = impl->addr_map_.Add(); - obj->filename = impl->CopyString(filename); - obj->start_addr = start_addr; - obj->end_addr = end_addr; - obj->offset = offset; - obj->elf_type = -1; // filled on demand - obj->fd = -1; // opened on demand - return true; -} - -// This function wraps the Demangle function to provide an interface -// where the input symbol is demangled in-place. -// To keep stack consumption low, we would like this function to not -// get inlined. -static ABSL_ATTRIBUTE_NOINLINE void DemangleInplace(char *out, int out_size, - char *tmp_buf, - int tmp_buf_size) { - if (Demangle(out, tmp_buf, tmp_buf_size)) { - // Demangling succeeded. Copy to out if the space allows. - int len = strlen(tmp_buf); - if (len + 1 <= out_size) { // +1 for '\0'. - SAFE_ASSERT(len < tmp_buf_size); - memmove(out, tmp_buf, len + 1); - } - } -} - -SymbolCacheLine *Symbolizer::GetCacheLine(const void *const pc) { - uintptr_t pc0 = reinterpret_cast(pc); - pc0 >>= 3; // drop the low 3 bits - - // Shuffle bits. - pc0 ^= (pc0 >> 6) ^ (pc0 >> 12) ^ (pc0 >> 18); - return &symbol_cache_[pc0 % SYMBOL_CACHE_LINES]; -} - -void Symbolizer::AgeSymbols(SymbolCacheLine *line) { - for (uint32_t &age : line->age) { - ++age; - } -} - -const char *Symbolizer::FindSymbolInCache(const void *const pc) { - if (pc == nullptr) return nullptr; - - SymbolCacheLine *line = GetCacheLine(pc); - for (size_t i = 0; i < ABSL_ARRAYSIZE(line->pc); ++i) { - if (line->pc[i] == pc) { - AgeSymbols(line); - line->age[i] = 0; - return line->name[i]; - } - } - return nullptr; -} - -const char *Symbolizer::InsertSymbolInCache(const void *const pc, - const char *name) { - SAFE_ASSERT(pc != nullptr); - - SymbolCacheLine *line = GetCacheLine(pc); - uint32_t max_age = 0; - int oldest_index = -1; - for (size_t i = 0; i < ABSL_ARRAYSIZE(line->pc); ++i) { - if (line->pc[i] == nullptr) { - AgeSymbols(line); - line->pc[i] = pc; - line->name[i] = CopyString(name); - line->age[i] = 0; - return line->name[i]; - } - if (line->age[i] >= max_age) { - max_age = line->age[i]; - oldest_index = i; - } - } - - AgeSymbols(line); - ABSL_RAW_CHECK(oldest_index >= 0, "Corrupt cache"); - base_internal::LowLevelAlloc::Free(line->name[oldest_index]); - line->pc[oldest_index] = pc; - line->name[oldest_index] = CopyString(name); - line->age[oldest_index] = 0; - return line->name[oldest_index]; -} - -static void MaybeOpenFdFromSelfExe(ObjFile *obj) { - if (memcmp(obj->start_addr, ELFMAG, SELFMAG) != 0) { - return; - } - int fd = open("/proc/self/exe", O_RDONLY); - if (fd == -1) { - return; - } - // Verify that contents of /proc/self/exe matches in-memory image of - // the binary. This can fail if the "deleted" binary is in fact not - // the main executable, or for binaries that have the first PT_LOAD - // segment smaller than 4K. We do it in four steps so that the - // buffer is smaller and we don't consume too much stack space. - const char *mem = reinterpret_cast(obj->start_addr); - for (int i = 0; i < 4; ++i) { - char buf[1024]; - ssize_t n = read(fd, buf, sizeof(buf)); - if (n != sizeof(buf) || memcmp(buf, mem, sizeof(buf)) != 0) { - close(fd); - return; - } - mem += sizeof(buf); - } - obj->fd = fd; -} - -static bool MaybeInitializeObjFile(ObjFile *obj) { - if (obj->fd < 0) { - obj->fd = open(obj->filename, O_RDONLY); - - if (obj->fd < 0) { - // Getting /proc/self/exe here means that we were hinted. - if (strcmp(obj->filename, "/proc/self/exe") == 0) { - // /proc/self/exe may be inaccessible (due to setuid, etc.), so try - // accessing the binary via argv0. - if (argv0_value != nullptr) { - obj->fd = open(argv0_value, O_RDONLY); - } - } else { - MaybeOpenFdFromSelfExe(obj); - } - } - - if (obj->fd < 0) { - ABSL_RAW_LOG(WARNING, "%s: open failed: errno=%d", obj->filename, errno); - return false; - } - obj->elf_type = FileGetElfType(obj->fd); - if (obj->elf_type < 0) { - ABSL_RAW_LOG(WARNING, "%s: wrong elf type: %d", obj->filename, - obj->elf_type); - return false; - } - - if (!ReadFromOffsetExact(obj->fd, &obj->elf_header, sizeof(obj->elf_header), - 0)) { - ABSL_RAW_LOG(WARNING, "%s: failed to read elf header", obj->filename); - return false; - } - const int phnum = obj->elf_header.e_phnum; - const int phentsize = obj->elf_header.e_phentsize; - size_t phoff = obj->elf_header.e_phoff; - size_t num_executable_load_segments = 0; - for (int j = 0; j < phnum; j++) { - ElfW(Phdr) phdr; - if (!ReadFromOffsetExact(obj->fd, &phdr, sizeof(phdr), phoff)) { - ABSL_RAW_LOG(WARNING, "%s: failed to read program header %d", - obj->filename, j); - return false; - } - phoff += phentsize; - constexpr int rx = PF_X | PF_R; - if (phdr.p_type != PT_LOAD || (phdr.p_flags & rx) != rx) { - // Not a LOAD segment, or not executable code. - continue; - } - if (num_executable_load_segments < obj->phdr.size()) { - memcpy(&obj->phdr[num_executable_load_segments++], &phdr, sizeof(phdr)); - } else { - ABSL_RAW_LOG(WARNING, "%s: too many executable LOAD segments", - obj->filename); - break; - } - } - if (num_executable_load_segments == 0) { - // This object has no "r-x" LOAD segments. That's unexpected. - ABSL_RAW_LOG(WARNING, "%s: no executable LOAD segments", obj->filename); - return false; - } - } - return true; -} - -// The implementation of our symbolization routine. If it -// successfully finds the symbol containing "pc" and obtains the -// symbol name, returns pointer to that symbol. Otherwise, returns nullptr. -// If any symbol decorators have been installed via InstallSymbolDecorator(), -// they are called here as well. -// To keep stack consumption low, we would like this function to not -// get inlined. -const char *Symbolizer::GetSymbol(const void *const pc) { - const char *entry = FindSymbolInCache(pc); - if (entry != nullptr) { - return entry; - } - symbol_buf_[0] = '\0'; - - ObjFile *const obj = FindObjFile(pc, 1); - ptrdiff_t relocation = 0; - int fd = -1; - if (obj != nullptr) { - if (MaybeInitializeObjFile(obj)) { - const size_t start_addr = reinterpret_cast(obj->start_addr); - if (obj->elf_type == ET_DYN && start_addr >= obj->offset) { - // This object was relocated. - // - // For obj->offset > 0, adjust the relocation since a mapping at offset - // X in the file will have a start address of [true relocation]+X. - relocation = start_addr - obj->offset; - - // Note: some binaries have multiple "rx" LOAD segments. We must - // find the right one. - ElfW(Phdr) *phdr = nullptr; - for (size_t j = 0; j < obj->phdr.size(); j++) { - ElfW(Phdr) &p = obj->phdr[j]; - if (p.p_type != PT_LOAD) { - // We only expect PT_LOADs. This must be PT_NULL that we didn't - // write over (i.e. we exhausted all interesting PT_LOADs). - ABSL_RAW_CHECK(p.p_type == PT_NULL, "unexpected p_type"); - break; - } - if (pc < reinterpret_cast(start_addr + p.p_memsz)) { - phdr = &p; - break; - } - } - if (phdr == nullptr) { - // That's unexpected. Hope for the best. - ABSL_RAW_LOG( - WARNING, - "%s: unable to find LOAD segment for pc: %p, start_addr: %zx", - obj->filename, pc, start_addr); - } else { - // Adjust relocation in case phdr.p_vaddr != 0. - // This happens for binaries linked with `lld --rosegment`, and for - // binaries linked with BFD `ld -z separate-code`. - relocation -= phdr->p_vaddr - phdr->p_offset; - } - } - - fd = obj->fd; - if (GetSymbolFromObjectFile(*obj, pc, relocation, symbol_buf_, - sizeof(symbol_buf_), tmp_buf_, - sizeof(tmp_buf_)) == SYMBOL_FOUND) { - // Only try to demangle the symbol name if it fit into symbol_buf_. - DemangleInplace(symbol_buf_, sizeof(symbol_buf_), tmp_buf_, - sizeof(tmp_buf_)); - } - } - } else { -#if ABSL_HAVE_VDSO_SUPPORT - VDSOSupport vdso; - if (vdso.IsPresent()) { - VDSOSupport::SymbolInfo symbol_info; - if (vdso.LookupSymbolByAddress(pc, &symbol_info)) { - // All VDSO symbols are known to be short. - size_t len = strlen(symbol_info.name); - ABSL_RAW_CHECK(len + 1 < sizeof(symbol_buf_), - "VDSO symbol unexpectedly long"); - memcpy(symbol_buf_, symbol_info.name, len + 1); - } - } -#endif - } - - if (g_decorators_mu.TryLock()) { - if (g_num_decorators > 0) { - SymbolDecoratorArgs decorator_args = { - pc, relocation, fd, symbol_buf_, sizeof(symbol_buf_), - tmp_buf_, sizeof(tmp_buf_), nullptr}; - for (int i = 0; i < g_num_decorators; ++i) { - decorator_args.arg = g_decorators[i].arg; - g_decorators[i].fn(&decorator_args); - } - } - g_decorators_mu.Unlock(); - } - if (symbol_buf_[0] == '\0') { - return nullptr; - } - symbol_buf_[sizeof(symbol_buf_) - 1] = '\0'; // Paranoia. - return InsertSymbolInCache(pc, symbol_buf_); -} - -bool RemoveAllSymbolDecorators(void) { - if (!g_decorators_mu.TryLock()) { - // Someone else is using decorators. Get out. - return false; - } - g_num_decorators = 0; - g_decorators_mu.Unlock(); - return true; -} - -bool RemoveSymbolDecorator(int ticket) { - if (!g_decorators_mu.TryLock()) { - // Someone else is using decorators. Get out. - return false; - } - for (int i = 0; i < g_num_decorators; ++i) { - if (g_decorators[i].ticket == ticket) { - while (i < g_num_decorators - 1) { - g_decorators[i] = g_decorators[i + 1]; - ++i; - } - g_num_decorators = i; - break; - } - } - g_decorators_mu.Unlock(); - return true; // Decorator is known to be removed. -} - -int InstallSymbolDecorator(SymbolDecorator decorator, void *arg) { - static int ticket = 0; - - if (!g_decorators_mu.TryLock()) { - // Someone else is using decorators. Get out. - return -2; - } - int ret = ticket; - if (g_num_decorators >= kMaxDecorators) { - ret = -1; - } else { - g_decorators[g_num_decorators] = {decorator, arg, ticket++}; - ++g_num_decorators; - } - g_decorators_mu.Unlock(); - return ret; -} - -bool RegisterFileMappingHint(const void *start, const void *end, uint64_t offset, - const char *filename) { - SAFE_ASSERT(start <= end); - SAFE_ASSERT(filename != nullptr); - - InitSigSafeArena(); - - if (!g_file_mapping_mu.TryLock()) { - return false; - } - - bool ret = true; - if (g_num_file_mapping_hints >= kMaxFileMappingHints) { - ret = false; - } else { - // TODO(ckennelly): Move this into a string copy routine. - int len = strlen(filename); - char *dst = static_cast( - base_internal::LowLevelAlloc::AllocWithArena(len + 1, SigSafeArena())); - ABSL_RAW_CHECK(dst != nullptr, "out of memory"); - memcpy(dst, filename, len + 1); - - auto &hint = g_file_mapping_hints[g_num_file_mapping_hints++]; - hint.start = start; - hint.end = end; - hint.offset = offset; - hint.filename = dst; - } - - g_file_mapping_mu.Unlock(); - return ret; -} - -bool GetFileMappingHint(const void **start, const void **end, uint64_t *offset, - const char **filename) { - if (!g_file_mapping_mu.TryLock()) { - return false; - } - bool found = false; - for (int i = 0; i < g_num_file_mapping_hints; i++) { - if (g_file_mapping_hints[i].start <= *start && - *end <= g_file_mapping_hints[i].end) { - // We assume that the start_address for the mapping is the base - // address of the ELF section, but when [start_address,end_address) is - // not strictly equal to [hint.start, hint.end), that assumption is - // invalid. - // - // This uses the hint's start address (even though hint.start is not - // necessarily equal to start_address) to ensure the correct - // relocation is computed later. - *start = g_file_mapping_hints[i].start; - *end = g_file_mapping_hints[i].end; - *offset = g_file_mapping_hints[i].offset; - *filename = g_file_mapping_hints[i].filename; - found = true; - break; - } - } - g_file_mapping_mu.Unlock(); - return found; -} - -} // namespace debugging_internal - -bool Symbolize(const void *pc, char *out, int out_size) { - // Symbolization is very slow under tsan. - ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN(); - SAFE_ASSERT(out_size >= 0); - debugging_internal::Symbolizer *s = debugging_internal::AllocateSymbolizer(); - const char *name = s->GetSymbol(pc); - bool ok = false; - if (name != nullptr && out_size > 0) { - strncpy(out, name, out_size); - ok = true; - if (out[out_size - 1] != '\0') { - // strncpy() does not '\0' terminate when it truncates. Do so, with - // trailing ellipsis. - static constexpr char kEllipsis[] = "..."; - int ellipsis_size = - std::min(implicit_cast(strlen(kEllipsis)), out_size - 1); - memcpy(out + out_size - ellipsis_size - 1, kEllipsis, ellipsis_size); - out[out_size - 1] = '\0'; - } - } - debugging_internal::FreeSymbolizer(s); - ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END(); - return ok; -} - -ABSL_NAMESPACE_END -} // namespace absl - -extern "C" bool AbslInternalGetFileMappingHint(const void **start, - const void **end, uint64_t *offset, - const char **filename) { - return absl::debugging_internal::GetFileMappingHint(start, end, offset, - filename); -} diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_unimplemented.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_unimplemented.inc deleted file mode 100644 index db24456..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_unimplemented.inc +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#include "absl/base/internal/raw_logging.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -namespace debugging_internal { - -int InstallSymbolDecorator(SymbolDecorator, void*) { return -1; } -bool RemoveSymbolDecorator(int) { return false; } -bool RemoveAllSymbolDecorators(void) { return false; } -bool RegisterFileMappingHint(const void *, const void *, uint64_t, const char *) { - return false; -} -bool GetFileMappingHint(const void **, const void **, uint64_t *, const char **) { - return false; -} - -} // namespace debugging_internal - -void InitializeSymbolizer(const char*) {} -bool Symbolize(const void *, char *, int) { return false; } - -ABSL_NAMESPACE_END -} // namespace absl diff --git a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_win32.inc b/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_win32.inc deleted file mode 100644 index c3df46f..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/debugging/symbolize_win32.inc +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// See "Retrieving Symbol Information by Address": -// https://msdn.microsoft.com/en-us/library/windows/desktop/ms680578(v=vs.85).aspx - -#include - -// MSVC header dbghelp.h has a warning for an ignored typedef. -#pragma warning(push) -#pragma warning(disable:4091) -#include -#pragma warning(pop) - -#pragma comment(lib, "dbghelp.lib") - -#include -#include - -#include "absl/base/internal/raw_logging.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -static HANDLE process = NULL; - -void InitializeSymbolizer(const char*) { - if (process != nullptr) { - return; - } - process = GetCurrentProcess(); - - // Symbols are not loaded until a reference is made requiring the - // symbols be loaded. This is the fastest, most efficient way to use - // the symbol handler. - SymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_UNDNAME); - if (!SymInitialize(process, nullptr, true)) { - // GetLastError() returns a Win32 DWORD, but we assign to - // unsigned long long to simplify the ABSL_RAW_LOG case below. The uniform - // initialization guarantees this is not a narrowing conversion. - const unsigned long long error{GetLastError()}; // NOLINT(runtime/int) - ABSL_RAW_LOG(FATAL, "SymInitialize() failed: %llu", error); - } -} - -bool Symbolize(const void* pc, char* out, int out_size) { - if (out_size <= 0) { - return false; - } - alignas(SYMBOL_INFO) char buf[sizeof(SYMBOL_INFO) + MAX_SYM_NAME]; - SYMBOL_INFO* symbol = reinterpret_cast(buf); - symbol->SizeOfStruct = sizeof(SYMBOL_INFO); - symbol->MaxNameLen = MAX_SYM_NAME; - if (!SymFromAddr(process, reinterpret_cast(pc), nullptr, symbol)) { - return false; - } - strncpy(out, symbol->Name, out_size); - if (out[out_size - 1] != '\0') { - // strncpy() does not '\0' terminate when it truncates. - static constexpr char kEllipsis[] = "..."; - int ellipsis_size = - std::min(sizeof(kEllipsis) - 1, out_size - 1); - memcpy(out + out_size - ellipsis_size - 1, kEllipsis, ellipsis_size); - out[out_size - 1] = '\0'; - } - return true; -} - -ABSL_NAMESPACE_END -} // namespace absl diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/commandlineflag.h b/client/webrtc/webrtc_demo/third/include/absl/flags/commandlineflag.h deleted file mode 100644 index f2fa089..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/commandlineflag.h +++ /dev/null @@ -1,200 +0,0 @@ -// -// Copyright 2020 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: commandlineflag.h -// ----------------------------------------------------------------------------- -// -// This header file defines the `CommandLineFlag`, which acts as a type-erased -// handle for accessing metadata about the Abseil Flag in question. -// -// Because an actual Abseil flag is of an unspecified type, you should not -// manipulate or interact directly with objects of that type. Instead, use the -// CommandLineFlag type as an intermediary. -#ifndef ABSL_FLAGS_COMMANDLINEFLAG_H_ -#define ABSL_FLAGS_COMMANDLINEFLAG_H_ - -#include -#include - -#include "absl/base/config.h" -#include "absl/base/internal/fast_type_id.h" -#include "absl/flags/internal/commandlineflag.h" -#include "absl/strings/string_view.h" -#include "absl/types/optional.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { -class PrivateHandleAccessor; -} // namespace flags_internal - -// CommandLineFlag -// -// This type acts as a type-erased handle for an instance of an Abseil Flag and -// holds reflection information pertaining to that flag. Use CommandLineFlag to -// access a flag's name, location, help string etc. -// -// To obtain an absl::CommandLineFlag, invoke `absl::FindCommandLineFlag()` -// passing it the flag name string. -// -// Example: -// -// // Obtain reflection handle for a flag named "flagname". -// const absl::CommandLineFlag* my_flag_data = -// absl::FindCommandLineFlag("flagname"); -// -// // Now you can get flag info from that reflection handle. -// std::string flag_location = my_flag_data->Filename(); -// ... -class CommandLineFlag { - public: - constexpr CommandLineFlag() = default; - - // Not copyable/assignable. - CommandLineFlag(const CommandLineFlag&) = delete; - CommandLineFlag& operator=(const CommandLineFlag&) = delete; - - // absl::CommandLineFlag::IsOfType() - // - // Return true iff flag has type T. - template - inline bool IsOfType() const { - return TypeId() == base_internal::FastTypeId(); - } - - // absl::CommandLineFlag::TryGet() - // - // Attempts to retrieve the flag value. Returns value on success, - // absl::nullopt otherwise. - template - absl::optional TryGet() const { - if (IsRetired() || !IsOfType()) { - return absl::nullopt; - } - - // Implementation notes: - // - // We are wrapping a union around the value of `T` to serve three purposes: - // - // 1. `U.value` has correct size and alignment for a value of type `T` - // 2. The `U.value` constructor is not invoked since U's constructor does - // not do it explicitly. - // 3. The `U.value` destructor is invoked since U's destructor does it - // explicitly. This makes `U` a kind of RAII wrapper around non default - // constructible value of T, which is destructed when we leave the - // scope. We do need to destroy U.value, which is constructed by - // CommandLineFlag::Read even though we left it in a moved-from state - // after std::move. - // - // All of this serves to avoid requiring `T` being default constructible. - union U { - T value; - U() {} - ~U() { value.~T(); } - }; - U u; - - Read(&u.value); - // allow retired flags to be "read", so we can report invalid access. - if (IsRetired()) { - return absl::nullopt; - } - return std::move(u.value); - } - - // absl::CommandLineFlag::Name() - // - // Returns name of this flag. - virtual absl::string_view Name() const = 0; - - // absl::CommandLineFlag::Filename() - // - // Returns name of the file where this flag is defined. - virtual std::string Filename() const = 0; - - // absl::CommandLineFlag::Help() - // - // Returns help message associated with this flag. - virtual std::string Help() const = 0; - - // absl::CommandLineFlag::IsRetired() - // - // Returns true iff this object corresponds to retired flag. - virtual bool IsRetired() const; - - // absl::CommandLineFlag::DefaultValue() - // - // Returns the default value for this flag. - virtual std::string DefaultValue() const = 0; - - // absl::CommandLineFlag::CurrentValue() - // - // Returns the current value for this flag. - virtual std::string CurrentValue() const = 0; - - // absl::CommandLineFlag::ParseFrom() - // - // Sets the value of the flag based on specified string `value`. If the flag - // was successfully set to new value, it returns true. Otherwise, sets `error` - // to indicate the error, leaves the flag unchanged, and returns false. - bool ParseFrom(absl::string_view value, std::string* error); - - protected: - ~CommandLineFlag() = default; - - private: - friend class flags_internal::PrivateHandleAccessor; - - // Sets the value of the flag based on specified string `value`. If the flag - // was successfully set to new value, it returns true. Otherwise, sets `error` - // to indicate the error, leaves the flag unchanged, and returns false. There - // are three ways to set the flag's value: - // * Update the current flag value - // * Update the flag's default value - // * Update the current flag value if it was never set before - // The mode is selected based on `set_mode` parameter. - virtual bool ParseFrom(absl::string_view value, - flags_internal::FlagSettingMode set_mode, - flags_internal::ValueSource source, - std::string& error) = 0; - - // Returns id of the flag's value type. - virtual flags_internal::FlagFastTypeId TypeId() const = 0; - - // Interface to save flag to some persistent state. Returns current flag state - // or nullptr if flag does not support saving and restoring a state. - virtual std::unique_ptr SaveState() = 0; - - // Copy-construct a new value of the flag's type in a memory referenced by - // the dst based on the current flag's value. - virtual void Read(void* dst) const = 0; - - // To be deleted. Used to return true if flag's current value originated from - // command line. - virtual bool IsSpecifiedOnCommandLine() const = 0; - - // Validates supplied value usign validator or parseflag routine - virtual bool ValidateInputValue(absl::string_view value) const = 0; - - // Checks that flags default value can be converted to string and back to the - // flag's value type. - virtual void CheckDefaultValueParsingRoundtrip() const = 0; -}; - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_COMMANDLINEFLAG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/config.h b/client/webrtc/webrtc_demo/third/include/absl/flags/config.h deleted file mode 100644 index 5ab1f31..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/config.h +++ /dev/null @@ -1,76 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_CONFIG_H_ -#define ABSL_FLAGS_CONFIG_H_ - -// Determine if we should strip string literals from the Flag objects. -// By default we strip string literals on mobile platforms. -#if !defined(ABSL_FLAGS_STRIP_NAMES) - -#if defined(__ANDROID__) -#define ABSL_FLAGS_STRIP_NAMES 1 - -#elif defined(__APPLE__) -#include -#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE -#define ABSL_FLAGS_STRIP_NAMES 1 -#elif defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED -#define ABSL_FLAGS_STRIP_NAMES 1 -#endif // TARGET_OS_* -#endif - -#endif // !defined(ABSL_FLAGS_STRIP_NAMES) - -#if !defined(ABSL_FLAGS_STRIP_NAMES) -// If ABSL_FLAGS_STRIP_NAMES wasn't set on the command line or above, -// the default is not to strip. -#define ABSL_FLAGS_STRIP_NAMES 0 -#endif - -#if !defined(ABSL_FLAGS_STRIP_HELP) -// By default, if we strip names, we also strip help. -#define ABSL_FLAGS_STRIP_HELP ABSL_FLAGS_STRIP_NAMES -#endif - -// ABSL_FLAGS_INTERNAL_HAS_RTTI macro is used for selecting if we can use RTTI -// for flag type identification. -#ifdef ABSL_FLAGS_INTERNAL_HAS_RTTI -#error ABSL_FLAGS_INTERNAL_HAS_RTTI cannot be directly set -#elif !defined(__GNUC__) || defined(__GXX_RTTI) -#define ABSL_FLAGS_INTERNAL_HAS_RTTI 1 -#endif // !defined(__GNUC__) || defined(__GXX_RTTI) - -// These macros represent the "source of truth" for the list of supported -// built-in types. -#define ABSL_FLAGS_INTERNAL_BUILTIN_TYPES(A) \ - A(bool, bool) \ - A(short, short) \ - A(unsigned short, unsigned_short) \ - A(int, int) \ - A(unsigned int, unsigned_int) \ - A(long, long) \ - A(unsigned long, unsigned_long) \ - A(long long, long_long) \ - A(unsigned long long, unsigned_long_long) \ - A(double, double) \ - A(float, float) - -#define ABSL_FLAGS_INTERNAL_SUPPORTED_TYPES(A) \ - ABSL_FLAGS_INTERNAL_BUILTIN_TYPES(A) \ - A(std::string, std_string) \ - A(std::vector, std_vector_of_string) - -#endif // ABSL_FLAGS_CONFIG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/declare.h b/client/webrtc/webrtc_demo/third/include/absl/flags/declare.h deleted file mode 100644 index b9794d8..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/declare.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: declare.h -// ----------------------------------------------------------------------------- -// -// This file defines the ABSL_DECLARE_FLAG macro, allowing you to declare an -// `absl::Flag` for use within a translation unit. You should place this -// declaration within the header file associated with the .cc file that defines -// and owns the `Flag`. - -#ifndef ABSL_FLAGS_DECLARE_H_ -#define ABSL_FLAGS_DECLARE_H_ - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// absl::Flag represents a flag of type 'T' created by ABSL_FLAG. -template -class Flag; - -} // namespace flags_internal - -// Flag -// -// Forward declaration of the `absl::Flag` type for use in defining the macro. -#if defined(_MSC_VER) && !defined(__clang__) -template -class Flag; -#else -template -using Flag = flags_internal::Flag; -#endif - -ABSL_NAMESPACE_END -} // namespace absl - -// ABSL_DECLARE_FLAG() -// -// This macro is a convenience for declaring use of an `absl::Flag` within a -// translation unit. This macro should be used within a header file to -// declare usage of the flag within any .cc file including that header file. -// -// The ABSL_DECLARE_FLAG(type, name) macro expands to: -// -// extern absl::Flag FLAGS_name; -#define ABSL_DECLARE_FLAG(type, name) extern ::absl::Flag FLAGS_##name - -#endif // ABSL_FLAGS_DECLARE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/flag.h b/client/webrtc/webrtc_demo/third/include/absl/flags/flag.h deleted file mode 100644 index f09580b..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/flag.h +++ /dev/null @@ -1,398 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: flag.h -// ----------------------------------------------------------------------------- -// -// This header file defines the `absl::Flag` type for holding command-line -// flag data, and abstractions to create, get and set such flag data. -// -// It is important to note that this type is **unspecified** (an implementation -// detail) and you do not construct or manipulate actual `absl::Flag` -// instances. Instead, you define and declare flags using the -// `ABSL_FLAG()` and `ABSL_DECLARE_FLAG()` macros, and get and set flag values -// using the `absl::GetFlag()` and `absl::SetFlag()` functions. - -#ifndef ABSL_FLAGS_FLAG_H_ -#define ABSL_FLAGS_FLAG_H_ - -#include -#include - -#include "absl/base/attributes.h" -#include "absl/base/config.h" -#include "absl/base/optimization.h" -#include "absl/flags/config.h" -#include "absl/flags/internal/flag.h" -#include "absl/flags/internal/registry.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// Flag -// -// An `absl::Flag` holds a command-line flag value, providing a runtime -// parameter to a binary. Such flags should be defined in the global namespace -// and (preferably) in the module containing the binary's `main()` function. -// -// You should not construct and cannot use the `absl::Flag` type directly; -// instead, you should declare flags using the `ABSL_DECLARE_FLAG()` macro -// within a header file, and define your flag using `ABSL_FLAG()` within your -// header's associated `.cc` file. Such flags will be named `FLAGS_name`. -// -// Example: -// -// .h file -// -// // Declares usage of a flag named "FLAGS_count" -// ABSL_DECLARE_FLAG(int, count); -// -// .cc file -// -// // Defines a flag named "FLAGS_count" with a default `int` value of 0. -// ABSL_FLAG(int, count, 0, "Count of items to process"); -// -// No public methods of `absl::Flag` are part of the Abseil Flags API. -#if !defined(_MSC_VER) || defined(__clang__) -template -using Flag = flags_internal::Flag; -#else -// MSVC debug builds do not implement initialization with constexpr constructors -// correctly. To work around this we add a level of indirection, so that the -// class `absl::Flag` contains an `internal::Flag*` (instead of being an alias -// to that class) and dynamically allocates an instance when necessary. We also -// forward all calls to internal::Flag methods via trampoline methods. In this -// setup the `absl::Flag` class does not have constructor and virtual methods, -// all the data members are public and thus MSVC is able to initialize it at -// link time. To deal with multiple threads accessing the flag for the first -// time concurrently we use an atomic boolean indicating if flag object is -// initialized. We also employ the double-checked locking pattern where the -// second level of protection is a global Mutex, so if two threads attempt to -// construct the flag concurrently only one wins. -// This solution is based on a recomendation here: -// https://developercommunity.visualstudio.com/content/problem/336946/class-with-constexpr-constructor-not-using-static.html?childToView=648454#comment-648454 - -namespace flags_internal { -absl::Mutex* GetGlobalConstructionGuard(); -} // namespace flags_internal - -template -class Flag { - public: - // No constructor and destructor to ensure this is an aggregate type. - // Visual Studio 2015 still requires the constructor for class to be - // constexpr initializable. -#if _MSC_VER <= 1900 - constexpr Flag(const char* name, const char* filename, - const flags_internal::HelpGenFunc help_gen, - const flags_internal::FlagDfltGenFunc default_value_gen) - : name_(name), - filename_(filename), - help_gen_(help_gen), - default_value_gen_(default_value_gen), - inited_(false), - impl_(nullptr) {} -#endif - - flags_internal::Flag& GetImpl() const { - if (!inited_.load(std::memory_order_acquire)) { - absl::MutexLock l(flags_internal::GetGlobalConstructionGuard()); - - if (inited_.load(std::memory_order_acquire)) { - return *impl_; - } - - impl_ = new flags_internal::Flag( - name_, filename_, - {flags_internal::FlagHelpMsg(help_gen_), - flags_internal::FlagHelpKind::kGenFunc}, - {flags_internal::FlagDefaultSrc(default_value_gen_), - flags_internal::FlagDefaultKind::kGenFunc}); - inited_.store(true, std::memory_order_release); - } - - return *impl_; - } - - // Public methods of `absl::Flag` are NOT part of the Abseil Flags API. - // See https://abseil.io/docs/cpp/guides/flags - bool IsRetired() const { return GetImpl().IsRetired(); } - absl::string_view Name() const { return GetImpl().Name(); } - std::string Help() const { return GetImpl().Help(); } - bool IsModified() const { return GetImpl().IsModified(); } - bool IsSpecifiedOnCommandLine() const { - return GetImpl().IsSpecifiedOnCommandLine(); - } - std::string Filename() const { return GetImpl().Filename(); } - std::string DefaultValue() const { return GetImpl().DefaultValue(); } - std::string CurrentValue() const { return GetImpl().CurrentValue(); } - template - inline bool IsOfType() const { - return GetImpl().template IsOfType(); - } - T Get() const { - return flags_internal::FlagImplPeer::InvokeGet(GetImpl()); - } - void Set(const T& v) { - flags_internal::FlagImplPeer::InvokeSet(GetImpl(), v); - } - void InvokeCallback() { GetImpl().InvokeCallback(); } - - const CommandLineFlag& Reflect() const { - return flags_internal::FlagImplPeer::InvokeReflect(GetImpl()); - } - - // The data members are logically private, but they need to be public for - // this to be an aggregate type. - const char* name_; - const char* filename_; - const flags_internal::HelpGenFunc help_gen_; - const flags_internal::FlagDfltGenFunc default_value_gen_; - - mutable std::atomic inited_; - mutable flags_internal::Flag* impl_; -}; -#endif - -// GetFlag() -// -// Returns the value (of type `T`) of an `absl::Flag` instance, by value. Do -// not construct an `absl::Flag` directly and call `absl::GetFlag()`; -// instead, refer to flag's constructed variable name (e.g. `FLAGS_name`). -// Because this function returns by value and not by reference, it is -// thread-safe, but note that the operation may be expensive; as a result, avoid -// `absl::GetFlag()` within any tight loops. -// -// Example: -// -// // FLAGS_count is a Flag of type `int` -// int my_count = absl::GetFlag(FLAGS_count); -// -// // FLAGS_firstname is a Flag of type `std::string` -// std::string first_name = absl::GetFlag(FLAGS_firstname); -template -ABSL_MUST_USE_RESULT T GetFlag(const absl::Flag& flag) { - return flags_internal::FlagImplPeer::InvokeGet(flag); -} - -// SetFlag() -// -// Sets the value of an `absl::Flag` to the value `v`. Do not construct an -// `absl::Flag` directly and call `absl::SetFlag()`; instead, use the -// flag's variable name (e.g. `FLAGS_name`). This function is -// thread-safe, but is potentially expensive. Avoid setting flags in general, -// but especially within performance-critical code. -template -void SetFlag(absl::Flag* flag, const T& v) { - flags_internal::FlagImplPeer::InvokeSet(*flag, v); -} - -// Overload of `SetFlag()` to allow callers to pass in a value that is -// convertible to `T`. E.g., use this overload to pass a "const char*" when `T` -// is `std::string`. -template -void SetFlag(absl::Flag* flag, const V& v) { - T value(v); - flags_internal::FlagImplPeer::InvokeSet(*flag, value); -} - -// GetFlagReflectionHandle() -// -// Returns the reflection handle corresponding to specified Abseil Flag -// instance. Use this handle to access flag's reflection information, like name, -// location, default value etc. -// -// Example: -// -// std::string = absl::GetFlagReflectionHandle(FLAGS_count).DefaultValue(); - -template -const CommandLineFlag& GetFlagReflectionHandle(const absl::Flag& f) { - return flags_internal::FlagImplPeer::InvokeReflect(f); -} - -ABSL_NAMESPACE_END -} // namespace absl - - -// ABSL_FLAG() -// -// This macro defines an `absl::Flag` instance of a specified type `T`: -// -// ABSL_FLAG(T, name, default_value, help); -// -// where: -// -// * `T` is a supported flag type (see the list of types in `marshalling.h`), -// * `name` designates the name of the flag (as a global variable -// `FLAGS_name`), -// * `default_value` is an expression holding the default value for this flag -// (which must be implicitly convertible to `T`), -// * `help` is the help text, which can also be an expression. -// -// This macro expands to a flag named 'FLAGS_name' of type 'T': -// -// absl::Flag FLAGS_name = ...; -// -// Note that all such instances are created as global variables. -// -// For `ABSL_FLAG()` values that you wish to expose to other translation units, -// it is recommended to define those flags within the `.cc` file associated with -// the header where the flag is declared. -// -// Note: do not construct objects of type `absl::Flag` directly. Only use the -// `ABSL_FLAG()` macro for such construction. -#define ABSL_FLAG(Type, name, default_value, help) \ - ABSL_FLAG_IMPL(Type, name, default_value, help) - -// ABSL_FLAG().OnUpdate() -// -// Defines a flag of type `T` with a callback attached: -// -// ABSL_FLAG(T, name, default_value, help).OnUpdate(callback); -// -// After any setting of the flag value, the callback will be called at least -// once. A rapid sequence of changes may be merged together into the same -// callback. No concurrent calls to the callback will be made for the same -// flag. Callbacks are allowed to read the current value of the flag but must -// not mutate that flag. -// -// The update mechanism guarantees "eventual consistency"; if the callback -// derives an auxiliary data structure from the flag value, it is guaranteed -// that eventually the flag value and the derived data structure will be -// consistent. -// -// Note: ABSL_FLAG.OnUpdate() does not have a public definition. Hence, this -// comment serves as its API documentation. - - -// ----------------------------------------------------------------------------- -// Implementation details below this section -// ----------------------------------------------------------------------------- - -// ABSL_FLAG_IMPL macro definition conditional on ABSL_FLAGS_STRIP_NAMES -#if !defined(_MSC_VER) || defined(__clang__) -#define ABSL_FLAG_IMPL_FLAG_PTR(flag) flag -#define ABSL_FLAG_IMPL_HELP_ARG(name) \ - absl::flags_internal::HelpArg( \ - FLAGS_help_storage_##name) -#define ABSL_FLAG_IMPL_DEFAULT_ARG(Type, name) \ - absl::flags_internal::DefaultArg(0) -#else -#define ABSL_FLAG_IMPL_FLAG_PTR(flag) flag.GetImpl() -#define ABSL_FLAG_IMPL_HELP_ARG(name) &AbslFlagHelpGenFor##name::NonConst -#define ABSL_FLAG_IMPL_DEFAULT_ARG(Type, name) &AbslFlagDefaultGenFor##name::Gen -#endif - -#if ABSL_FLAGS_STRIP_NAMES -#define ABSL_FLAG_IMPL_FLAGNAME(txt) "" -#define ABSL_FLAG_IMPL_FILENAME() "" -#define ABSL_FLAG_IMPL_REGISTRAR(T, flag) \ - absl::flags_internal::FlagRegistrar(ABSL_FLAG_IMPL_FLAG_PTR(flag), \ - nullptr) -#else -#define ABSL_FLAG_IMPL_FLAGNAME(txt) txt -#define ABSL_FLAG_IMPL_FILENAME() __FILE__ -#define ABSL_FLAG_IMPL_REGISTRAR(T, flag) \ - absl::flags_internal::FlagRegistrar(ABSL_FLAG_IMPL_FLAG_PTR(flag), \ - __FILE__) -#endif - -// ABSL_FLAG_IMPL macro definition conditional on ABSL_FLAGS_STRIP_HELP - -#if ABSL_FLAGS_STRIP_HELP -#define ABSL_FLAG_IMPL_FLAGHELP(txt) absl::flags_internal::kStrippedFlagHelp -#else -#define ABSL_FLAG_IMPL_FLAGHELP(txt) txt -#endif - -// AbslFlagHelpGenFor##name is used to encapsulate both immediate (method Const) -// and lazy (method NonConst) evaluation of help message expression. We choose -// between the two via the call to HelpArg in absl::Flag instantiation below. -// If help message expression is constexpr evaluable compiler will optimize -// away this whole struct. -// TODO(rogeeff): place these generated structs into local namespace and apply -// ABSL_INTERNAL_UNIQUE_SHORT_NAME. -// TODO(rogeeff): Apply __attribute__((nodebug)) to FLAGS_help_storage_##name -#define ABSL_FLAG_IMPL_DECLARE_HELP_WRAPPER(name, txt) \ - struct AbslFlagHelpGenFor##name { \ - /* The expression is run in the caller as part of the */ \ - /* default value argument. That keeps temporaries alive */ \ - /* long enough for NonConst to work correctly. */ \ - static constexpr absl::string_view Value( \ - absl::string_view v = ABSL_FLAG_IMPL_FLAGHELP(txt)) { \ - return v; \ - } \ - static std::string NonConst() { return std::string(Value()); } \ - }; \ - constexpr auto FLAGS_help_storage_##name ABSL_INTERNAL_UNIQUE_SMALL_NAME() \ - ABSL_ATTRIBUTE_SECTION_VARIABLE(flags_help_cold) = \ - absl::flags_internal::HelpStringAsArray( \ - 0); - -#define ABSL_FLAG_IMPL_DECLARE_DEF_VAL_WRAPPER(name, Type, default_value) \ - struct AbslFlagDefaultGenFor##name { \ - Type value = absl::flags_internal::InitDefaultValue(default_value); \ - static void Gen(void* p) { \ - new (p) Type(AbslFlagDefaultGenFor##name{}.value); \ - } \ - }; - -// ABSL_FLAG_IMPL -// -// Note: Name of registrar object is not arbitrary. It is used to "grab" -// global name for FLAGS_no symbol, thus preventing the possibility -// of defining two flags with names foo and nofoo. -#define ABSL_FLAG_IMPL(Type, name, default_value, help) \ - namespace absl /* block flags in namespaces */ {} \ - ABSL_FLAG_IMPL_DECLARE_DEF_VAL_WRAPPER(name, Type, default_value) \ - ABSL_FLAG_IMPL_DECLARE_HELP_WRAPPER(name, help) \ - ABSL_CONST_INIT absl::Flag FLAGS_##name{ \ - ABSL_FLAG_IMPL_FLAGNAME(#name), ABSL_FLAG_IMPL_FILENAME(), \ - ABSL_FLAG_IMPL_HELP_ARG(name), ABSL_FLAG_IMPL_DEFAULT_ARG(Type, name)}; \ - extern absl::flags_internal::FlagRegistrarEmpty FLAGS_no##name; \ - absl::flags_internal::FlagRegistrarEmpty FLAGS_no##name = \ - ABSL_FLAG_IMPL_REGISTRAR(Type, FLAGS_##name) - -// ABSL_RETIRED_FLAG -// -// Designates the flag (which is usually pre-existing) as "retired." A retired -// flag is a flag that is now unused by the program, but may still be passed on -// the command line, usually by production scripts. A retired flag is ignored -// and code can't access it at runtime. -// -// This macro registers a retired flag with given name and type, with a name -// identical to the name of the original flag you are retiring. The retired -// flag's type can change over time, so that you can retire code to support a -// custom flag type. -// -// This macro has the same signature as `ABSL_FLAG`. To retire a flag, simply -// replace an `ABSL_FLAG` definition with `ABSL_RETIRED_FLAG`, leaving the -// arguments unchanged (unless of course you actually want to retire the flag -// type at this time as well). -// -// `default_value` is only used as a double check on the type. `explanation` is -// unused. -// TODO(rogeeff): replace RETIRED_FLAGS with FLAGS once forward declarations of -// retired flags are cleaned up. -#define ABSL_RETIRED_FLAG(type, name, default_value, explanation) \ - static absl::flags_internal::RetiredFlag RETIRED_FLAGS_##name; \ - ABSL_ATTRIBUTE_UNUSED static const auto RETIRED_FLAGS_REG_##name = \ - (RETIRED_FLAGS_##name.Retire(#name), \ - ::absl::flags_internal::FlagRegistrarEmpty{}) - -#endif // ABSL_FLAGS_FLAG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/commandlineflag.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/commandlineflag.h deleted file mode 100644 index ebfe81b..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/commandlineflag.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_COMMANDLINEFLAG_H_ -#define ABSL_FLAGS_INTERNAL_COMMANDLINEFLAG_H_ - -#include "absl/base/config.h" -#include "absl/base/internal/fast_type_id.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// An alias for flag fast type id. This value identifies the flag value type -// similarly to typeid(T), without relying on RTTI being available. In most -// cases this id is enough to uniquely identify the flag's value type. In a few -// cases we'll have to resort to using actual RTTI implementation if it is -// available. -using FlagFastTypeId = absl::base_internal::FastTypeIdType; - -// Options that control SetCommandLineOptionWithMode. -enum FlagSettingMode { - // update the flag's value unconditionally (can call this multiple times). - SET_FLAGS_VALUE, - // update the flag's value, but *only if* it has not yet been updated - // with SET_FLAGS_VALUE, SET_FLAG_IF_DEFAULT, or "FLAGS_xxx = nondef". - SET_FLAG_IF_DEFAULT, - // set the flag's default value to this. If the flag has not been updated - // yet (via SET_FLAGS_VALUE, SET_FLAG_IF_DEFAULT, or "FLAGS_xxx = nondef") - // change the flag's current value to the new default value as well. - SET_FLAGS_DEFAULT -}; - -// Options that control ParseFrom: Source of a value. -enum ValueSource { - // Flag is being set by value specified on a command line. - kCommandLine, - // Flag is being set by value specified in the code. - kProgrammaticChange, -}; - -// Handle to FlagState objects. Specific flag state objects will restore state -// of a flag produced this flag state from method CommandLineFlag::SaveState(). -class FlagStateInterface { - public: - virtual ~FlagStateInterface(); - - // Restores the flag originated this object to the saved state. - virtual void Restore() const = 0; -}; - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_COMMANDLINEFLAG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/flag.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/flag.h deleted file mode 100644 index e6bade0..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/flag.h +++ /dev/null @@ -1,747 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_FLAG_H_ -#define ABSL_FLAGS_INTERNAL_FLAG_H_ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "absl/base/attributes.h" -#include "absl/base/call_once.h" -#include "absl/base/config.h" -#include "absl/base/optimization.h" -#include "absl/base/thread_annotations.h" -#include "absl/flags/commandlineflag.h" -#include "absl/flags/config.h" -#include "absl/flags/internal/commandlineflag.h" -#include "absl/flags/internal/registry.h" -#include "absl/flags/internal/sequence_lock.h" -#include "absl/flags/marshalling.h" -#include "absl/meta/type_traits.h" -#include "absl/strings/string_view.h" -#include "absl/synchronization/mutex.h" -#include "absl/utility/utility.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -/////////////////////////////////////////////////////////////////////////////// -// Forward declaration of absl::Flag public API. -namespace flags_internal { -template -class Flag; -} // namespace flags_internal - -#if defined(_MSC_VER) && !defined(__clang__) -template -class Flag; -#else -template -using Flag = flags_internal::Flag; -#endif - -template -ABSL_MUST_USE_RESULT T GetFlag(const absl::Flag& flag); - -template -void SetFlag(absl::Flag* flag, const T& v); - -template -void SetFlag(absl::Flag* flag, const V& v); - -template -const CommandLineFlag& GetFlagReflectionHandle(const absl::Flag& f); - -/////////////////////////////////////////////////////////////////////////////// -// Flag value type operations, eg., parsing, copying, etc. are provided -// by function specific to that type with a signature matching FlagOpFn. - -namespace flags_internal { - -enum class FlagOp { - kAlloc, - kDelete, - kCopy, - kCopyConstruct, - kSizeof, - kFastTypeId, - kRuntimeTypeId, - kParse, - kUnparse, - kValueOffset, -}; -using FlagOpFn = void* (*)(FlagOp, const void*, void*, void*); - -// Forward declaration for Flag value specific operations. -template -void* FlagOps(FlagOp op, const void* v1, void* v2, void* v3); - -// Allocate aligned memory for a flag value. -inline void* Alloc(FlagOpFn op) { - return op(FlagOp::kAlloc, nullptr, nullptr, nullptr); -} -// Deletes memory interpreting obj as flag value type pointer. -inline void Delete(FlagOpFn op, void* obj) { - op(FlagOp::kDelete, nullptr, obj, nullptr); -} -// Copies src to dst interpreting as flag value type pointers. -inline void Copy(FlagOpFn op, const void* src, void* dst) { - op(FlagOp::kCopy, src, dst, nullptr); -} -// Construct a copy of flag value in a location pointed by dst -// based on src - pointer to the flag's value. -inline void CopyConstruct(FlagOpFn op, const void* src, void* dst) { - op(FlagOp::kCopyConstruct, src, dst, nullptr); -} -// Makes a copy of flag value pointed by obj. -inline void* Clone(FlagOpFn op, const void* obj) { - void* res = flags_internal::Alloc(op); - flags_internal::CopyConstruct(op, obj, res); - return res; -} -// Returns true if parsing of input text is successfull. -inline bool Parse(FlagOpFn op, absl::string_view text, void* dst, - std::string* error) { - return op(FlagOp::kParse, &text, dst, error) != nullptr; -} -// Returns string representing supplied value. -inline std::string Unparse(FlagOpFn op, const void* val) { - std::string result; - op(FlagOp::kUnparse, val, &result, nullptr); - return result; -} -// Returns size of flag value type. -inline size_t Sizeof(FlagOpFn op) { - // This sequence of casts reverses the sequence from - // `flags_internal::FlagOps()` - return static_cast(reinterpret_cast( - op(FlagOp::kSizeof, nullptr, nullptr, nullptr))); -} -// Returns fast type id coresponding to the value type. -inline FlagFastTypeId FastTypeId(FlagOpFn op) { - return reinterpret_cast( - op(FlagOp::kFastTypeId, nullptr, nullptr, nullptr)); -} -// Returns fast type id coresponding to the value type. -inline const std::type_info* RuntimeTypeId(FlagOpFn op) { - return reinterpret_cast( - op(FlagOp::kRuntimeTypeId, nullptr, nullptr, nullptr)); -} -// Returns offset of the field value_ from the field impl_ inside of -// absl::Flag data. Given FlagImpl pointer p you can get the -// location of the corresponding value as: -// reinterpret_cast(p) + ValueOffset(). -inline ptrdiff_t ValueOffset(FlagOpFn op) { - // This sequence of casts reverses the sequence from - // `flags_internal::FlagOps()` - return static_cast(reinterpret_cast( - op(FlagOp::kValueOffset, nullptr, nullptr, nullptr))); -} - -// Returns an address of RTTI's typeid(T). -template -inline const std::type_info* GenRuntimeTypeId() { -#if defined(ABSL_FLAGS_INTERNAL_HAS_RTTI) - return &typeid(T); -#else - return nullptr; -#endif -} - -/////////////////////////////////////////////////////////////////////////////// -// Flag help auxiliary structs. - -// This is help argument for absl::Flag encapsulating the string literal pointer -// or pointer to function generating it as well as enum descriminating two -// cases. -using HelpGenFunc = std::string (*)(); - -template -struct FixedCharArray { - char value[N]; - - template - static constexpr FixedCharArray FromLiteralString( - absl::string_view str, absl::index_sequence) { - return (void)str, FixedCharArray({{str[I]..., '\0'}}); - } -}; - -template -constexpr FixedCharArray HelpStringAsArray(int) { - return FixedCharArray::FromLiteralString( - Gen::Value(), absl::make_index_sequence{}); -} - -template -constexpr std::false_type HelpStringAsArray(char) { - return std::false_type{}; -} - -union FlagHelpMsg { - constexpr explicit FlagHelpMsg(const char* help_msg) : literal(help_msg) {} - constexpr explicit FlagHelpMsg(HelpGenFunc help_gen) : gen_func(help_gen) {} - - const char* literal; - HelpGenFunc gen_func; -}; - -enum class FlagHelpKind : uint8_t { kLiteral = 0, kGenFunc = 1 }; - -struct FlagHelpArg { - FlagHelpMsg source; - FlagHelpKind kind; -}; - -extern const char kStrippedFlagHelp[]; - -// These two HelpArg overloads allows us to select at compile time one of two -// way to pass Help argument to absl::Flag. We'll be passing -// AbslFlagHelpGenFor##name as Gen and integer 0 as a single argument to prefer -// first overload if possible. If help message is evaluatable on constexpr -// context We'll be able to make FixedCharArray out of it and we'll choose first -// overload. In this case the help message expression is immediately evaluated -// and is used to construct the absl::Flag. No additionl code is generated by -// ABSL_FLAG Otherwise SFINAE kicks in and first overload is dropped from the -// consideration, in which case the second overload will be used. The second -// overload does not attempt to evaluate the help message expression -// immediately and instead delays the evaluation by returing the function -// pointer (&T::NonConst) genering the help message when necessary. This is -// evaluatable in constexpr context, but the cost is an extra function being -// generated in the ABSL_FLAG code. -template -constexpr FlagHelpArg HelpArg(const FixedCharArray& value) { - return {FlagHelpMsg(value.value), FlagHelpKind::kLiteral}; -} - -template -constexpr FlagHelpArg HelpArg(std::false_type) { - return {FlagHelpMsg(&Gen::NonConst), FlagHelpKind::kGenFunc}; -} - -/////////////////////////////////////////////////////////////////////////////// -// Flag default value auxiliary structs. - -// Signature for the function generating the initial flag value (usually -// based on default value supplied in flag's definition) -using FlagDfltGenFunc = void (*)(void*); - -union FlagDefaultSrc { - constexpr explicit FlagDefaultSrc(FlagDfltGenFunc gen_func_arg) - : gen_func(gen_func_arg) {} - -#define ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE(T, name) \ - T name##_value; \ - constexpr explicit FlagDefaultSrc(T value) : name##_value(value) {} // NOLINT - ABSL_FLAGS_INTERNAL_BUILTIN_TYPES(ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE) -#undef ABSL_FLAGS_INTERNAL_DFLT_FOR_TYPE - - void* dynamic_value; - FlagDfltGenFunc gen_func; -}; - -enum class FlagDefaultKind : uint8_t { - kDynamicValue = 0, - kGenFunc = 1, - kOneWord = 2 // for default values UP to one word in size -}; - -struct FlagDefaultArg { - FlagDefaultSrc source; - FlagDefaultKind kind; -}; - -// This struct and corresponding overload to InitDefaultValue are used to -// facilitate usage of {} as default value in ABSL_FLAG macro. -// TODO(rogeeff): Fix handling types with explicit constructors. -struct EmptyBraces {}; - -template -constexpr T InitDefaultValue(T t) { - return t; -} - -template -constexpr T InitDefaultValue(EmptyBraces) { - return T{}; -} - -template ::value, int>::type = - (GenT{}, 0)> -constexpr FlagDefaultArg DefaultArg(int) { - return {FlagDefaultSrc(GenT{}.value), FlagDefaultKind::kOneWord}; -} - -template -constexpr FlagDefaultArg DefaultArg(char) { - return {FlagDefaultSrc(&GenT::Gen), FlagDefaultKind::kGenFunc}; -} - -/////////////////////////////////////////////////////////////////////////////// -// Flag current value auxiliary structs. - -constexpr int64_t UninitializedFlagValue() { return 0xababababababababll; } - -template -using FlagUseOneWordStorage = std::integral_constant< - bool, absl::type_traits_internal::is_trivially_copyable::value && - (sizeof(T) <= 8)>; - -template -using FlagShouldUseSequenceLock = std::integral_constant< - bool, absl::type_traits_internal::is_trivially_copyable::value && - (sizeof(T) > 8)>; - -enum class FlagValueStorageKind : uint8_t { - kAlignedBuffer = 0, - kOneWordAtomic = 1, - kSequenceLocked = 2, -}; - -template -static constexpr FlagValueStorageKind StorageKind() { - return FlagUseOneWordStorage::value ? FlagValueStorageKind::kOneWordAtomic - : FlagShouldUseSequenceLock::value - ? FlagValueStorageKind::kSequenceLocked - : FlagValueStorageKind::kAlignedBuffer; -} - -struct FlagOneWordValue { - constexpr FlagOneWordValue() : value(UninitializedFlagValue()) {} - - std::atomic value; -}; - -template ()> -struct FlagValue; - -template -struct FlagValue { - bool Get(const SequenceLock&, T&) const { return false; } - - alignas(T) char value[sizeof(T)]; -}; - -template -struct FlagValue : FlagOneWordValue { - bool Get(const SequenceLock&, T& dst) const { - int64_t one_word_val = value.load(std::memory_order_acquire); - if (ABSL_PREDICT_FALSE(one_word_val == UninitializedFlagValue())) { - return false; - } - std::memcpy(&dst, static_cast(&one_word_val), sizeof(T)); - return true; - } -}; - -template -struct FlagValue { - bool Get(const SequenceLock& lock, T& dst) const { - return lock.TryRead(&dst, value_words, sizeof(T)); - } - - static constexpr int kNumWords = - flags_internal::AlignUp(sizeof(T), sizeof(uint64_t)) / sizeof(uint64_t); - - alignas(T) alignas( - std::atomic) std::atomic value_words[kNumWords]; -}; - -/////////////////////////////////////////////////////////////////////////////// -// Flag callback auxiliary structs. - -// Signature for the mutation callback used by watched Flags -// The callback is noexcept. -// TODO(rogeeff): add noexcept after C++17 support is added. -using FlagCallbackFunc = void (*)(); - -struct FlagCallback { - FlagCallbackFunc func; - absl::Mutex guard; // Guard for concurrent callback invocations. -}; - -/////////////////////////////////////////////////////////////////////////////// -// Flag implementation, which does not depend on flag value type. -// The class encapsulates the Flag's data and access to it. - -struct DynValueDeleter { - explicit DynValueDeleter(FlagOpFn op_arg = nullptr); - void operator()(void* ptr) const; - - FlagOpFn op; -}; - -class FlagState; - -class FlagImpl final : public CommandLineFlag { - public: - constexpr FlagImpl(const char* name, const char* filename, FlagOpFn op, - FlagHelpArg help, FlagValueStorageKind value_kind, - FlagDefaultArg default_arg) - : name_(name), - filename_(filename), - op_(op), - help_(help.source), - help_source_kind_(static_cast(help.kind)), - value_storage_kind_(static_cast(value_kind)), - def_kind_(static_cast(default_arg.kind)), - modified_(false), - on_command_line_(false), - callback_(nullptr), - default_value_(default_arg.source), - data_guard_{} {} - - // Constant access methods - void Read(void* dst) const override ABSL_LOCKS_EXCLUDED(*DataGuard()); - - // Mutating access methods - void Write(const void* src) ABSL_LOCKS_EXCLUDED(*DataGuard()); - - // Interfaces to operate on callbacks. - void SetCallback(const FlagCallbackFunc mutation_callback) - ABSL_LOCKS_EXCLUDED(*DataGuard()); - void InvokeCallback() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard()); - - // Used in read/write operations to validate source/target has correct type. - // For example if flag is declared as absl::Flag FLAGS_foo, a call to - // absl::GetFlag(FLAGS_foo) validates that the type of FLAGS_foo is indeed - // int. To do that we pass the "assumed" type id (which is deduced from type - // int) as an argument `type_id`, which is in turn is validated against the - // type id stored in flag object by flag definition statement. - void AssertValidType(FlagFastTypeId type_id, - const std::type_info* (*gen_rtti)()) const; - - private: - template - friend class Flag; - friend class FlagState; - - // Ensures that `data_guard_` is initialized and returns it. - absl::Mutex* DataGuard() const - ABSL_LOCK_RETURNED(reinterpret_cast(data_guard_)); - // Returns heap allocated value of type T initialized with default value. - std::unique_ptr MakeInitValue() const - ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard()); - // Flag initialization called via absl::call_once. - void Init(); - - // Offset value access methods. One per storage kind. These methods to not - // respect const correctness, so be very carefull using them. - - // This is a shared helper routine which encapsulates most of the magic. Since - // it is only used inside the three routines below, which are defined in - // flag.cc, we can define it in that file as well. - template - StorageT* OffsetValue() const; - // This is an accessor for a value stored in an aligned buffer storage - // used for non-trivially-copyable data types. - // Returns a mutable pointer to the start of a buffer. - void* AlignedBufferValue() const; - - // The same as above, but used for sequencelock-protected storage. - std::atomic* AtomicBufferValue() const; - - // This is an accessor for a value stored as one word atomic. Returns a - // mutable reference to an atomic value. - std::atomic& OneWordValue() const; - - // Attempts to parse supplied `value` string. If parsing is successful, - // returns new value. Otherwise returns nullptr. - std::unique_ptr TryParse(absl::string_view value, - std::string& err) const - ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard()); - // Stores the flag value based on the pointer to the source. - void StoreValue(const void* src) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard()); - - // Copy the flag data, protected by `seq_lock_` into `dst`. - // - // REQUIRES: ValueStorageKind() == kSequenceLocked. - void ReadSequenceLockedData(void* dst) const - ABSL_LOCKS_EXCLUDED(*DataGuard()); - - FlagHelpKind HelpSourceKind() const { - return static_cast(help_source_kind_); - } - FlagValueStorageKind ValueStorageKind() const { - return static_cast(value_storage_kind_); - } - FlagDefaultKind DefaultKind() const - ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard()) { - return static_cast(def_kind_); - } - - // CommandLineFlag interface implementation - absl::string_view Name() const override; - std::string Filename() const override; - std::string Help() const override; - FlagFastTypeId TypeId() const override; - bool IsSpecifiedOnCommandLine() const override - ABSL_LOCKS_EXCLUDED(*DataGuard()); - std::string DefaultValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard()); - std::string CurrentValue() const override ABSL_LOCKS_EXCLUDED(*DataGuard()); - bool ValidateInputValue(absl::string_view value) const override - ABSL_LOCKS_EXCLUDED(*DataGuard()); - void CheckDefaultValueParsingRoundtrip() const override - ABSL_LOCKS_EXCLUDED(*DataGuard()); - - int64_t ModificationCount() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard()); - - // Interfaces to save and restore flags to/from persistent state. - // Returns current flag state or nullptr if flag does not support - // saving and restoring a state. - std::unique_ptr SaveState() override - ABSL_LOCKS_EXCLUDED(*DataGuard()); - - // Restores the flag state to the supplied state object. If there is - // nothing to restore returns false. Otherwise returns true. - bool RestoreState(const FlagState& flag_state) - ABSL_LOCKS_EXCLUDED(*DataGuard()); - - bool ParseFrom(absl::string_view value, FlagSettingMode set_mode, - ValueSource source, std::string& error) override - ABSL_LOCKS_EXCLUDED(*DataGuard()); - - // Immutable flag's state. - - // Flags name passed to ABSL_FLAG as second arg. - const char* const name_; - // The file name where ABSL_FLAG resides. - const char* const filename_; - // Type-specific operations "vtable". - const FlagOpFn op_; - // Help message literal or function to generate it. - const FlagHelpMsg help_; - // Indicates if help message was supplied as literal or generator func. - const uint8_t help_source_kind_ : 1; - // Kind of storage this flag is using for the flag's value. - const uint8_t value_storage_kind_ : 2; - - uint8_t : 0; // The bytes containing the const bitfields must not be - // shared with bytes containing the mutable bitfields. - - // Mutable flag's state (guarded by `data_guard_`). - - // def_kind_ is not guard by DataGuard() since it is accessed in Init without - // locks. - uint8_t def_kind_ : 2; - // Has this flag's value been modified? - bool modified_ : 1 ABSL_GUARDED_BY(*DataGuard()); - // Has this flag been specified on command line. - bool on_command_line_ : 1 ABSL_GUARDED_BY(*DataGuard()); - - // Unique tag for absl::call_once call to initialize this flag. - absl::once_flag init_control_; - - // Sequence lock / mutation counter. - flags_internal::SequenceLock seq_lock_; - - // Optional flag's callback and absl::Mutex to guard the invocations. - FlagCallback* callback_ ABSL_GUARDED_BY(*DataGuard()); - // Either a pointer to the function generating the default value based on the - // value specified in ABSL_FLAG or pointer to the dynamically set default - // value via SetCommandLineOptionWithMode. def_kind_ is used to distinguish - // these two cases. - FlagDefaultSrc default_value_; - - // This is reserved space for an absl::Mutex to guard flag data. It will be - // initialized in FlagImpl::Init via placement new. - // We can't use "absl::Mutex data_guard_", since this class is not literal. - // We do not want to use "absl::Mutex* data_guard_", since this would require - // heap allocation during initialization, which is both slows program startup - // and can fail. Using reserved space + placement new allows us to avoid both - // problems. - alignas(absl::Mutex) mutable char data_guard_[sizeof(absl::Mutex)]; -}; - -/////////////////////////////////////////////////////////////////////////////// -// The Flag object parameterized by the flag's value type. This class implements -// flag reflection handle interface. - -template -class Flag { - public: - constexpr Flag(const char* name, const char* filename, FlagHelpArg help, - const FlagDefaultArg default_arg) - : impl_(name, filename, &FlagOps, help, - flags_internal::StorageKind(), default_arg), - value_() {} - - // CommandLineFlag interface - absl::string_view Name() const { return impl_.Name(); } - std::string Filename() const { return impl_.Filename(); } - std::string Help() const { return impl_.Help(); } - // Do not use. To be removed. - bool IsSpecifiedOnCommandLine() const { - return impl_.IsSpecifiedOnCommandLine(); - } - std::string DefaultValue() const { return impl_.DefaultValue(); } - std::string CurrentValue() const { return impl_.CurrentValue(); } - - private: - template - friend class FlagRegistrar; - friend class FlagImplPeer; - - T Get() const { - // See implementation notes in CommandLineFlag::Get(). - union U { - T value; - U() {} - ~U() { value.~T(); } - }; - U u; - -#if !defined(NDEBUG) - impl_.AssertValidType(base_internal::FastTypeId(), &GenRuntimeTypeId); -#endif - - if (ABSL_PREDICT_FALSE(!value_.Get(impl_.seq_lock_, u.value))) { - impl_.Read(&u.value); - } - return std::move(u.value); - } - void Set(const T& v) { - impl_.AssertValidType(base_internal::FastTypeId(), &GenRuntimeTypeId); - impl_.Write(&v); - } - - // Access to the reflection. - const CommandLineFlag& Reflect() const { return impl_; } - - // Flag's data - // The implementation depends on value_ field to be placed exactly after the - // impl_ field, so that impl_ can figure out the offset to the value and - // access it. - FlagImpl impl_; - FlagValue value_; -}; - -/////////////////////////////////////////////////////////////////////////////// -// Trampoline for friend access - -class FlagImplPeer { - public: - template - static T InvokeGet(const FlagType& flag) { - return flag.Get(); - } - template - static void InvokeSet(FlagType& flag, const T& v) { - flag.Set(v); - } - template - static const CommandLineFlag& InvokeReflect(const FlagType& f) { - return f.Reflect(); - } -}; - -/////////////////////////////////////////////////////////////////////////////// -// Implementation of Flag value specific operations routine. -template -void* FlagOps(FlagOp op, const void* v1, void* v2, void* v3) { - switch (op) { - case FlagOp::kAlloc: { - std::allocator alloc; - return std::allocator_traits>::allocate(alloc, 1); - } - case FlagOp::kDelete: { - T* p = static_cast(v2); - p->~T(); - std::allocator alloc; - std::allocator_traits>::deallocate(alloc, p, 1); - return nullptr; - } - case FlagOp::kCopy: - *static_cast(v2) = *static_cast(v1); - return nullptr; - case FlagOp::kCopyConstruct: - new (v2) T(*static_cast(v1)); - return nullptr; - case FlagOp::kSizeof: - return reinterpret_cast(static_cast(sizeof(T))); - case FlagOp::kFastTypeId: - return const_cast(base_internal::FastTypeId()); - case FlagOp::kRuntimeTypeId: - return const_cast(GenRuntimeTypeId()); - case FlagOp::kParse: { - // Initialize the temporary instance of type T based on current value in - // destination (which is going to be flag's default value). - T temp(*static_cast(v2)); - if (!absl::ParseFlag(*static_cast(v1), &temp, - static_cast(v3))) { - return nullptr; - } - *static_cast(v2) = std::move(temp); - return v2; - } - case FlagOp::kUnparse: - *static_cast(v2) = - absl::UnparseFlag(*static_cast(v1)); - return nullptr; - case FlagOp::kValueOffset: { - // Round sizeof(FlagImp) to a multiple of alignof(FlagValue) to get the - // offset of the data. - ptrdiff_t round_to = alignof(FlagValue); - ptrdiff_t offset = - (sizeof(FlagImpl) + round_to - 1) / round_to * round_to; - return reinterpret_cast(offset); - } - } - return nullptr; -} - -/////////////////////////////////////////////////////////////////////////////// -// This class facilitates Flag object registration and tail expression-based -// flag definition, for example: -// ABSL_FLAG(int, foo, 42, "Foo help").OnUpdate(NotifyFooWatcher); -struct FlagRegistrarEmpty {}; -template -class FlagRegistrar { - public: - explicit FlagRegistrar(Flag& flag, const char* filename) : flag_(flag) { - if (do_register) - flags_internal::RegisterCommandLineFlag(flag_.impl_, filename); - } - - FlagRegistrar OnUpdate(FlagCallbackFunc cb) && { - flag_.impl_.SetCallback(cb); - return *this; - } - - // Make the registrar "die" gracefully as an empty struct on a line where - // registration happens. Registrar objects are intended to live only as - // temporary. - operator FlagRegistrarEmpty() const { return {}; } // NOLINT - - private: - Flag& flag_; // Flag being registered (not owned). -}; - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_FLAG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/parse.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/parse.h deleted file mode 100644 index de706c8..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/parse.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_PARSE_H_ -#define ABSL_FLAGS_INTERNAL_PARSE_H_ - -#include -#include - -#include "absl/base/config.h" -#include "absl/flags/declare.h" -#include "absl/strings/string_view.h" - -ABSL_DECLARE_FLAG(std::vector, flagfile); -ABSL_DECLARE_FLAG(std::vector, fromenv); -ABSL_DECLARE_FLAG(std::vector, tryfromenv); -ABSL_DECLARE_FLAG(std::vector, undefok); - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -enum class ArgvListAction { kRemoveParsedArgs, kKeepParsedArgs }; -enum class UsageFlagsAction { kHandleUsage, kIgnoreUsage }; -enum class OnUndefinedFlag { - kIgnoreUndefined, - kReportUndefined, - kAbortIfUndefined -}; - -std::vector ParseCommandLineImpl(int argc, char* argv[], - ArgvListAction arg_list_act, - UsageFlagsAction usage_flag_act, - OnUndefinedFlag on_undef_flag); - -// -------------------------------------------------------------------- -// Inspect original command line - -// Returns true if flag with specified name was either present on the original -// command line or specified in flag file present on the original command line. -bool WasPresentOnCommandLine(absl::string_view flag_name); - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_PARSE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/path_util.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/path_util.h deleted file mode 100644 index a6594d3..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/path_util.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_PATH_UTIL_H_ -#define ABSL_FLAGS_INTERNAL_PATH_UTIL_H_ - -#include "absl/base/config.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// A portable interface that returns the basename of the filename passed as an -// argument. It is similar to basename(3) -// . -// For example: -// flags_internal::Basename("a/b/prog/file.cc") -// returns "file.cc" -// flags_internal::Basename("file.cc") -// returns "file.cc" -inline absl::string_view Basename(absl::string_view filename) { - auto last_slash_pos = filename.find_last_of("/\\"); - - return last_slash_pos == absl::string_view::npos - ? filename - : filename.substr(last_slash_pos + 1); -} - -// A portable interface that returns the directory name of the filename -// passed as an argument, including the trailing slash. -// Returns the empty string if a slash is not found in the input file name. -// For example: -// flags_internal::Package("a/b/prog/file.cc") -// returns "a/b/prog/" -// flags_internal::Package("file.cc") -// returns "" -inline absl::string_view Package(absl::string_view filename) { - auto last_slash_pos = filename.find_last_of("/\\"); - - return last_slash_pos == absl::string_view::npos - ? absl::string_view() - : filename.substr(0, last_slash_pos + 1); -} - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_PATH_UTIL_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/private_handle_accessor.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/private_handle_accessor.h deleted file mode 100644 index c64435c..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/private_handle_accessor.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// Copyright 2020 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_PRIVATE_HANDLE_ACCESSOR_H_ -#define ABSL_FLAGS_INTERNAL_PRIVATE_HANDLE_ACCESSOR_H_ - -#include -#include - -#include "absl/base/config.h" -#include "absl/flags/commandlineflag.h" -#include "absl/flags/internal/commandlineflag.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// This class serves as a trampoline to access private methods of -// CommandLineFlag. This class is intended for use exclusively internally inside -// of the Abseil Flags implementation. -class PrivateHandleAccessor { - public: - // Access to CommandLineFlag::TypeId. - static FlagFastTypeId TypeId(const CommandLineFlag& flag); - - // Access to CommandLineFlag::SaveState. - static std::unique_ptr SaveState(CommandLineFlag& flag); - - // Access to CommandLineFlag::IsSpecifiedOnCommandLine. - static bool IsSpecifiedOnCommandLine(const CommandLineFlag& flag); - - // Access to CommandLineFlag::ValidateInputValue. - static bool ValidateInputValue(const CommandLineFlag& flag, - absl::string_view value); - - // Access to CommandLineFlag::CheckDefaultValueParsingRoundtrip. - static void CheckDefaultValueParsingRoundtrip(const CommandLineFlag& flag); - - static bool ParseFrom(CommandLineFlag& flag, absl::string_view value, - flags_internal::FlagSettingMode set_mode, - flags_internal::ValueSource source, std::string& error); -}; - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_PRIVATE_HANDLE_ACCESSOR_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/program_name.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/program_name.h deleted file mode 100644 index b99b94f..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/program_name.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_PROGRAM_NAME_H_ -#define ABSL_FLAGS_INTERNAL_PROGRAM_NAME_H_ - -#include - -#include "absl/base/config.h" -#include "absl/strings/string_view.h" - -// -------------------------------------------------------------------- -// Program name - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// Returns program invocation name or "UNKNOWN" if `SetProgramInvocationName()` -// is never called. At the moment this is always set to argv[0] as part of -// library initialization. -std::string ProgramInvocationName(); - -// Returns base name for program invocation name. For example, if -// ProgramInvocationName() == "a/b/mybinary" -// then -// ShortProgramInvocationName() == "mybinary" -std::string ShortProgramInvocationName(); - -// Sets program invocation name to a new value. Should only be called once -// during program initialization, before any threads are spawned. -void SetProgramInvocationName(absl::string_view prog_name_str); - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_PROGRAM_NAME_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/registry.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/registry.h deleted file mode 100644 index 4b68c85..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/registry.h +++ /dev/null @@ -1,97 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_REGISTRY_H_ -#define ABSL_FLAGS_INTERNAL_REGISTRY_H_ - -#include - -#include "absl/base/config.h" -#include "absl/flags/commandlineflag.h" -#include "absl/flags/internal/commandlineflag.h" -#include "absl/strings/string_view.h" - -// -------------------------------------------------------------------- -// Global flags registry API. - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// Executes specified visitor for each non-retired flag in the registry. While -// callback are executed, the registry is locked and can't be changed. -void ForEachFlag(std::function visitor); - -//----------------------------------------------------------------------------- - -bool RegisterCommandLineFlag(CommandLineFlag&, const char* filename); - -void FinalizeRegistry(); - -//----------------------------------------------------------------------------- -// Retired registrations: -// -// Retired flag registrations are treated specially. A 'retired' flag is -// provided only for compatibility with automated invocations that still -// name it. A 'retired' flag: -// - is not bound to a C++ FLAGS_ reference. -// - has a type and a value, but that value is intentionally inaccessible. -// - does not appear in --help messages. -// - is fully supported by _all_ flag parsing routines. -// - consumes args normally, and complains about type mismatches in its -// argument. -// - emits a complaint but does not die (e.g. LOG(ERROR)) if it is -// accessed by name through the flags API for parsing or otherwise. -// -// The registrations for a flag happen in an unspecified order as the -// initializers for the namespace-scope objects of a program are run. -// Any number of weak registrations for a flag can weakly define the flag. -// One non-weak registration will upgrade the flag from weak to non-weak. -// Further weak registrations of a non-weak flag are ignored. -// -// This mechanism is designed to support moving dead flags into a -// 'graveyard' library. An example migration: -// -// 0: Remove references to this FLAGS_flagname in the C++ codebase. -// 1: Register as 'retired' in old_lib. -// 2: Make old_lib depend on graveyard. -// 3: Add a redundant 'retired' registration to graveyard. -// 4: Remove the old_lib 'retired' registration. -// 5: Eventually delete the graveyard registration entirely. -// - -// Retire flag with name "name" and type indicated by ops. -void Retire(const char* name, FlagFastTypeId type_id, char* buf); - -constexpr size_t kRetiredFlagObjSize = 3 * sizeof(void*); -constexpr size_t kRetiredFlagObjAlignment = alignof(void*); - -// Registered a retired flag with name 'flag_name' and type 'T'. -template -class RetiredFlag { - public: - void Retire(const char* flag_name) { - flags_internal::Retire(flag_name, base_internal::FastTypeId(), buf_); - } - - private: - alignas(kRetiredFlagObjAlignment) char buf_[kRetiredFlagObjSize]; -}; - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_REGISTRY_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/sequence_lock.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/sequence_lock.h deleted file mode 100644 index 807b2a7..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/sequence_lock.h +++ /dev/null @@ -1,187 +0,0 @@ -// -// Copyright 2020 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_SEQUENCE_LOCK_H_ -#define ABSL_FLAGS_INTERNAL_SEQUENCE_LOCK_H_ - -#include -#include - -#include -#include -#include - -#include "absl/base/optimization.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// Align 'x' up to the nearest 'align' bytes. -inline constexpr size_t AlignUp(size_t x, size_t align) { - return align * ((x + align - 1) / align); -} - -// A SequenceLock implements lock-free reads. A sequence counter is incremented -// before and after each write, and readers access the counter before and after -// accessing the protected data. If the counter is verified to not change during -// the access, and the sequence counter value was even, then the reader knows -// that the read was race-free and valid. Otherwise, the reader must fall back -// to a Mutex-based code path. -// -// This particular SequenceLock starts in an "uninitialized" state in which -// TryRead() returns false. It must be enabled by calling MarkInitialized(). -// This serves as a marker that the associated flag value has not yet been -// initialized and a slow path needs to be taken. -// -// The memory reads and writes protected by this lock must use the provided -// `TryRead()` and `Write()` functions. These functions behave similarly to -// `memcpy()`, with one oddity: the protected data must be an array of -// `std::atomic`. This is to comply with the C++ standard, which -// considers data races on non-atomic objects to be undefined behavior. See "Can -// Seqlocks Get Along With Programming Language Memory Models?"[1] by Hans J. -// Boehm for more details. -// -// [1] https://www.hpl.hp.com/techreports/2012/HPL-2012-68.pdf -class SequenceLock { - public: - constexpr SequenceLock() : lock_(kUninitialized) {} - - // Mark that this lock is ready for use. - void MarkInitialized() { - assert(lock_.load(std::memory_order_relaxed) == kUninitialized); - lock_.store(0, std::memory_order_release); - } - - // Copy "size" bytes of data from "src" to "dst", protected as a read-side - // critical section of the sequence lock. - // - // Unlike traditional sequence lock implementations which loop until getting a - // clean read, this implementation returns false in the case of concurrent - // calls to `Write`. In such a case, the caller should fall back to a - // locking-based slow path. - // - // Returns false if the sequence lock was not yet marked as initialized. - // - // NOTE: If this returns false, "dst" may be overwritten with undefined - // (potentially uninitialized) data. - bool TryRead(void* dst, const std::atomic* src, size_t size) const { - // Acquire barrier ensures that no loads done by f() are reordered - // above the first load of the sequence counter. - int64_t seq_before = lock_.load(std::memory_order_acquire); - if (ABSL_PREDICT_FALSE(seq_before & 1) == 1) return false; - RelaxedCopyFromAtomic(dst, src, size); - // Another acquire fence ensures that the load of 'lock_' below is - // strictly ordered after the RelaxedCopyToAtomic call above. - std::atomic_thread_fence(std::memory_order_acquire); - int64_t seq_after = lock_.load(std::memory_order_relaxed); - return ABSL_PREDICT_TRUE(seq_before == seq_after); - } - - // Copy "size" bytes from "src" to "dst" as a write-side critical section - // of the sequence lock. Any concurrent readers will be forced to retry - // until they get a read that does not conflict with this write. - // - // This call must be externally synchronized against other calls to Write, - // but may proceed concurrently with reads. - void Write(std::atomic* dst, const void* src, size_t size) { - // We can use relaxed instructions to increment the counter since we - // are extenally synchronized. The std::atomic_thread_fence below - // ensures that the counter updates don't get interleaved with the - // copy to the data. - int64_t orig_seq = lock_.load(std::memory_order_relaxed); - assert((orig_seq & 1) == 0); // Must be initially unlocked. - lock_.store(orig_seq + 1, std::memory_order_relaxed); - - // We put a release fence between update to lock_ and writes to shared data. - // Thus all stores to shared data are effectively release operations and - // update to lock_ above cannot be re-ordered past any of them. Note that - // this barrier is not for the fetch_add above. A release barrier for the - // fetch_add would be before it, not after. - std::atomic_thread_fence(std::memory_order_release); - RelaxedCopyToAtomic(dst, src, size); - // "Release" semantics ensure that none of the writes done by - // RelaxedCopyToAtomic() can be reordered after the following modification. - lock_.store(orig_seq + 2, std::memory_order_release); - } - - // Return the number of times that Write() has been called. - // - // REQUIRES: This must be externally synchronized against concurrent calls to - // `Write()` or `IncrementModificationCount()`. - // REQUIRES: `MarkInitialized()` must have been previously called. - int64_t ModificationCount() const { - int64_t val = lock_.load(std::memory_order_relaxed); - assert(val != kUninitialized && (val & 1) == 0); - return val / 2; - } - - // REQUIRES: This must be externally synchronized against concurrent calls to - // `Write()` or `ModificationCount()`. - // REQUIRES: `MarkInitialized()` must have been previously called. - void IncrementModificationCount() { - int64_t val = lock_.load(std::memory_order_relaxed); - assert(val != kUninitialized); - lock_.store(val + 2, std::memory_order_relaxed); - } - - private: - // Perform the equivalent of "memcpy(dst, src, size)", but using relaxed - // atomics. - static void RelaxedCopyFromAtomic(void* dst, const std::atomic* src, - size_t size) { - char* dst_byte = static_cast(dst); - while (size >= sizeof(uint64_t)) { - uint64_t word = src->load(std::memory_order_relaxed); - std::memcpy(dst_byte, &word, sizeof(word)); - dst_byte += sizeof(word); - src++; - size -= sizeof(word); - } - if (size > 0) { - uint64_t word = src->load(std::memory_order_relaxed); - std::memcpy(dst_byte, &word, size); - } - } - - // Perform the equivalent of "memcpy(dst, src, size)", but using relaxed - // atomics. - static void RelaxedCopyToAtomic(std::atomic* dst, const void* src, - size_t size) { - const char* src_byte = static_cast(src); - while (size >= sizeof(uint64_t)) { - uint64_t word; - std::memcpy(&word, src_byte, sizeof(word)); - dst->store(word, std::memory_order_relaxed); - src_byte += sizeof(word); - dst++; - size -= sizeof(word); - } - if (size > 0) { - uint64_t word = 0; - std::memcpy(&word, src_byte, size); - dst->store(word, std::memory_order_relaxed); - } - } - - static constexpr int64_t kUninitialized = -1; - std::atomic lock_; -}; - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_SEQUENCE_LOCK_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/usage.h b/client/webrtc/webrtc_demo/third/include/absl/flags/internal/usage.h deleted file mode 100644 index c0bcac5..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/internal/usage.h +++ /dev/null @@ -1,104 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_INTERNAL_USAGE_H_ -#define ABSL_FLAGS_INTERNAL_USAGE_H_ - -#include -#include - -#include "absl/base/config.h" -#include "absl/flags/commandlineflag.h" -#include "absl/flags/declare.h" -#include "absl/strings/string_view.h" - -// -------------------------------------------------------------------- -// Usage reporting interfaces - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// The format to report the help messages in. -enum class HelpFormat { - kHumanReadable, -}; - -// Streams the help message describing `flag` to `out`. -// The default value for `flag` is included in the output. -void FlagHelp(std::ostream& out, const CommandLineFlag& flag, - HelpFormat format = HelpFormat::kHumanReadable); - -// Produces the help messages for all flags matching the filter. A flag matches -// the filter if it is defined in a file with a filename which includes -// filter string as a substring. You can use '/' and '.' to restrict the -// matching to a specific file names. For example: -// FlagsHelp(out, "/path/to/file."); -// restricts help to only flags which resides in files named like: -// .../path/to/file. -// for any extension 'ext'. If the filter is empty this function produces help -// messages for all flags. -void FlagsHelp(std::ostream& out, absl::string_view filter, - HelpFormat format, absl::string_view program_usage_message); - -// -------------------------------------------------------------------- - -// If any of the 'usage' related command line flags (listed on the bottom of -// this file) has been set this routine produces corresponding help message in -// the specified output stream and returns: -// 0 - if "version" or "only_check_flags" flags were set and handled. -// 1 - if some other 'usage' related flag was set and handled. -// -1 - if no usage flags were set on a commmand line. -// Non negative return values are expected to be used as an exit code for a -// binary. -int HandleUsageFlags(std::ostream& out, - absl::string_view program_usage_message); - -// -------------------------------------------------------------------- -// Globals representing usage reporting flags - -enum class HelpMode { - kNone, - kImportant, - kShort, - kFull, - kPackage, - kMatch, - kVersion, - kOnlyCheckArgs -}; - -// Returns substring to filter help output (--help=substr argument) -std::string GetFlagsHelpMatchSubstr(); -// Returns the requested help mode. -HelpMode GetFlagsHelpMode(); -// Returns the requested help format. -HelpFormat GetFlagsHelpFormat(); - -// These are corresponding setters to the attributes above. -void SetFlagsHelpMatchSubstr(absl::string_view); -void SetFlagsHelpMode(HelpMode); -void SetFlagsHelpFormat(HelpFormat); - -// Deduces usage flags from the input argument in a form --name=value or -// --name. argument is already split into name and value before we call this -// function. -bool DeduceUsageFlags(absl::string_view name, absl::string_view value); - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_INTERNAL_USAGE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/marshalling.h b/client/webrtc/webrtc_demo/third/include/absl/flags/marshalling.h deleted file mode 100644 index 7cbc136..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/marshalling.h +++ /dev/null @@ -1,264 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: marshalling.h -// ----------------------------------------------------------------------------- -// -// This header file defines the API for extending Abseil flag support to -// custom types, and defines the set of overloads for fundamental types. -// -// Out of the box, the Abseil flags library supports the following types: -// -// * `bool` -// * `int16_t` -// * `uint16_t` -// * `int32_t` -// * `uint32_t` -// * `int64_t` -// * `uint64_t` -// * `float` -// * `double` -// * `std::string` -// * `std::vector` -// * `absl::LogSeverity` (provided natively for layering reasons) -// -// Note that support for integral types is implemented using overloads for -// variable-width fundamental types (`short`, `int`, `long`, etc.). However, -// you should prefer the fixed-width integral types (`int32_t`, `uint64_t`, -// etc.) we've noted above within flag definitions. -// -// In addition, several Abseil libraries provide their own custom support for -// Abseil flags. Documentation for these formats is provided in the type's -// `AbslParseFlag()` definition. -// -// The Abseil time library provides the following support for civil time values: -// -// * `absl::CivilSecond` -// * `absl::CivilMinute` -// * `absl::CivilHour` -// * `absl::CivilDay` -// * `absl::CivilMonth` -// * `absl::CivilYear` -// -// and also provides support for the following absolute time values: -// -// * `absl::Duration` -// * `absl::Time` -// -// Additional support for Abseil types will be noted here as it is added. -// -// You can also provide your own custom flags by adding overloads for -// `AbslParseFlag()` and `AbslUnparseFlag()` to your type definitions. (See -// below.) -// -// ----------------------------------------------------------------------------- -// Adding Type Support for Abseil Flags -// ----------------------------------------------------------------------------- -// -// To add support for your user-defined type, add overloads of `AbslParseFlag()` -// and `AbslUnparseFlag()` as free (non-member) functions to your type. If `T` -// is a class type, these functions can be friend function definitions. These -// overloads must be added to the same namespace where the type is defined, so -// that they can be discovered by Argument-Dependent Lookup (ADL). -// -// Example: -// -// namespace foo { -// -// enum OutputMode { kPlainText, kHtml }; -// -// // AbslParseFlag converts from a string to OutputMode. -// // Must be in same namespace as OutputMode. -// -// // Parses an OutputMode from the command line flag value `text`. Returns -// // `true` and sets `*mode` on success; returns `false` and sets `*error` -// // on failure. -// bool AbslParseFlag(absl::string_view text, -// OutputMode* mode, -// std::string* error) { -// if (text == "plaintext") { -// *mode = kPlainText; -// return true; -// } -// if (text == "html") { -// *mode = kHtml; -// return true; -// } -// *error = "unknown value for enumeration"; -// return false; -// } -// -// // AbslUnparseFlag converts from an OutputMode to a string. -// // Must be in same namespace as OutputMode. -// -// // Returns a textual flag value corresponding to the OutputMode `mode`. -// std::string AbslUnparseFlag(OutputMode mode) { -// switch (mode) { -// case kPlainText: return "plaintext"; -// case kHtml: return "html"; -// } -// return absl::StrCat(mode); -// } -// -// Notice that neither `AbslParseFlag()` nor `AbslUnparseFlag()` are class -// members, but free functions. `AbslParseFlag/AbslUnparseFlag()` overloads -// for a type should only be declared in the same file and namespace as said -// type. The proper `AbslParseFlag/AbslUnparseFlag()` implementations for a -// given type will be discovered via Argument-Dependent Lookup (ADL). -// -// `AbslParseFlag()` may need, in turn, to parse simpler constituent types -// using `absl::ParseFlag()`. For example, a custom struct `MyFlagType` -// consisting of a `std::pair` would add an `AbslParseFlag()` -// overload for its `MyFlagType` like so: -// -// Example: -// -// namespace my_flag_type { -// -// struct MyFlagType { -// std::pair my_flag_data; -// }; -// -// bool AbslParseFlag(absl::string_view text, MyFlagType* flag, -// std::string* err); -// -// std::string AbslUnparseFlag(const MyFlagType&); -// -// // Within the implementation, `AbslParseFlag()` will, in turn invoke -// // `absl::ParseFlag()` on its constituent `int` and `std::string` types -// // (which have built-in Abseil flag support). -// -// bool AbslParseFlag(absl::string_view text, MyFlagType* flag, -// std::string* err) { -// std::pair tokens = -// absl::StrSplit(text, ','); -// if (!absl::ParseFlag(tokens.first, &flag->my_flag_data.first, err)) -// return false; -// if (!absl::ParseFlag(tokens.second, &flag->my_flag_data.second, err)) -// return false; -// return true; -// } -// -// // Similarly, for unparsing, we can simply invoke `absl::UnparseFlag()` on -// // the constituent types. -// std::string AbslUnparseFlag(const MyFlagType& flag) { -// return absl::StrCat(absl::UnparseFlag(flag.my_flag_data.first), -// ",", -// absl::UnparseFlag(flag.my_flag_data.second)); -// } -#ifndef ABSL_FLAGS_MARSHALLING_H_ -#define ABSL_FLAGS_MARSHALLING_H_ - -#include -#include - -#include "absl/base/config.h" -#include "absl/strings/string_view.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { - -// Overloads of `AbslParseFlag()` and `AbslUnparseFlag()` for fundamental types. -bool AbslParseFlag(absl::string_view, bool*, std::string*); -bool AbslParseFlag(absl::string_view, short*, std::string*); // NOLINT -bool AbslParseFlag(absl::string_view, unsigned short*, std::string*); // NOLINT -bool AbslParseFlag(absl::string_view, int*, std::string*); // NOLINT -bool AbslParseFlag(absl::string_view, unsigned int*, std::string*); // NOLINT -bool AbslParseFlag(absl::string_view, long*, std::string*); // NOLINT -bool AbslParseFlag(absl::string_view, unsigned long*, std::string*); // NOLINT -bool AbslParseFlag(absl::string_view, long long*, std::string*); // NOLINT -bool AbslParseFlag(absl::string_view, unsigned long long*, // NOLINT - std::string*); -bool AbslParseFlag(absl::string_view, float*, std::string*); -bool AbslParseFlag(absl::string_view, double*, std::string*); -bool AbslParseFlag(absl::string_view, std::string*, std::string*); -bool AbslParseFlag(absl::string_view, std::vector*, std::string*); - -template -bool InvokeParseFlag(absl::string_view input, T* dst, std::string* err) { - // Comment on next line provides a good compiler error message if T - // does not have AbslParseFlag(absl::string_view, T*, std::string*). - return AbslParseFlag(input, dst, err); // Is T missing AbslParseFlag? -} - -// Strings and std:: containers do not have the same overload resolution -// considerations as fundamental types. Naming these 'AbslUnparseFlag' means we -// can avoid the need for additional specializations of Unparse (below). -std::string AbslUnparseFlag(absl::string_view v); -std::string AbslUnparseFlag(const std::vector&); - -template -std::string Unparse(const T& v) { - // Comment on next line provides a good compiler error message if T does not - // have UnparseFlag. - return AbslUnparseFlag(v); // Is T missing AbslUnparseFlag? -} - -// Overloads for builtin types. -std::string Unparse(bool v); -std::string Unparse(short v); // NOLINT -std::string Unparse(unsigned short v); // NOLINT -std::string Unparse(int v); // NOLINT -std::string Unparse(unsigned int v); // NOLINT -std::string Unparse(long v); // NOLINT -std::string Unparse(unsigned long v); // NOLINT -std::string Unparse(long long v); // NOLINT -std::string Unparse(unsigned long long v); // NOLINT -std::string Unparse(float v); -std::string Unparse(double v); - -} // namespace flags_internal - -// ParseFlag() -// -// Parses a string value into a flag value of type `T`. Do not add overloads of -// this function for your type directly; instead, add an `AbslParseFlag()` -// free function as documented above. -// -// Some implementations of `AbslParseFlag()` for types which consist of other, -// constituent types which already have Abseil flag support, may need to call -// `absl::ParseFlag()` on those consituent string values. (See above.) -template -inline bool ParseFlag(absl::string_view input, T* dst, std::string* error) { - return flags_internal::InvokeParseFlag(input, dst, error); -} - -// UnparseFlag() -// -// Unparses a flag value of type `T` into a string value. Do not add overloads -// of this function for your type directly; instead, add an `AbslUnparseFlag()` -// free function as documented above. -// -// Some implementations of `AbslUnparseFlag()` for types which consist of other, -// constituent types which already have Abseil flag support, may want to call -// `absl::UnparseFlag()` on those constituent types. (See above.) -template -inline std::string UnparseFlag(const T& v) { - return flags_internal::Unparse(v); -} - -// Overloads for `absl::LogSeverity` can't (easily) appear alongside that type's -// definition because it is layered below flags. See proper documentation in -// base/log_severity.h. -enum class LogSeverity : int; -bool AbslParseFlag(absl::string_view, absl::LogSeverity*, std::string*); -std::string AbslUnparseFlag(absl::LogSeverity); - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_MARSHALLING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/parse.h b/client/webrtc/webrtc_demo/third/include/absl/flags/parse.h deleted file mode 100644 index 929de2c..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/parse.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: parse.h -// ----------------------------------------------------------------------------- -// -// This file defines the main parsing function for Abseil flags: -// `absl::ParseCommandLine()`. - -#ifndef ABSL_FLAGS_PARSE_H_ -#define ABSL_FLAGS_PARSE_H_ - -#include - -#include "absl/base/config.h" -#include "absl/flags/internal/parse.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// ParseCommandLine() -// -// Parses the set of command-line arguments passed in the `argc` (argument -// count) and `argv[]` (argument vector) parameters from `main()`, assigning -// values to any defined Abseil flags. (Any arguments passed after the -// flag-terminating delimiter (`--`) are treated as positional arguments and -// ignored.) -// -// Any command-line flags (and arguments to those flags) are parsed into Abseil -// Flag values, if those flags are defined. Any undefined flags will either -// return an error, or be ignored if that flag is designated using `undefok` to -// indicate "undefined is OK." -// -// Any command-line positional arguments not part of any command-line flag (or -// arguments to a flag) are returned in a vector, with the program invocation -// name at position 0 of that vector. (Note that this includes positional -// arguments after the flag-terminating delimiter `--`.) -// -// After all flags and flag arguments are parsed, this function looks for any -// built-in usage flags (e.g. `--help`), and if any were specified, it reports -// help messages and then exits the program. -std::vector ParseCommandLine(int argc, char* argv[]); - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_PARSE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/reflection.h b/client/webrtc/webrtc_demo/third/include/absl/flags/reflection.h deleted file mode 100644 index e6baf5d..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/reflection.h +++ /dev/null @@ -1,90 +0,0 @@ -// -// Copyright 2020 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: reflection.h -// ----------------------------------------------------------------------------- -// -// This file defines the routines to access and operate on an Abseil Flag's -// reflection handle. - -#ifndef ABSL_FLAGS_REFLECTION_H_ -#define ABSL_FLAGS_REFLECTION_H_ - -#include - -#include "absl/base/config.h" -#include "absl/container/flat_hash_map.h" -#include "absl/flags/commandlineflag.h" -#include "absl/flags/internal/commandlineflag.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace flags_internal { -class FlagSaverImpl; -} // namespace flags_internal - -// FindCommandLineFlag() -// -// Returns the reflection handle of an Abseil flag of the specified name, or -// `nullptr` if not found. This function will emit a warning if the name of a -// 'retired' flag is specified. -absl::CommandLineFlag* FindCommandLineFlag(absl::string_view name); - -// Returns current state of the Flags registry in a form of mapping from flag -// name to a flag reflection handle. -absl::flat_hash_map GetAllFlags(); - -//------------------------------------------------------------------------------ -// FlagSaver -//------------------------------------------------------------------------------ -// -// A FlagSaver object stores the state of flags in the scope where the FlagSaver -// is defined, allowing modification of those flags within that scope and -// automatic restoration of the flags to their previous state upon leaving the -// scope. -// -// A FlagSaver can be used within tests to temporarily change the test -// environment and restore the test case to its previous state. -// -// Example: -// -// void MyFunc() { -// absl::FlagSaver fs; -// ... -// absl::SetFlag(&FLAGS_myFlag, otherValue); -// ... -// } // scope of FlagSaver left, flags return to previous state -// -// This class is thread-safe. - -class FlagSaver { - public: - FlagSaver(); - ~FlagSaver(); - - FlagSaver(const FlagSaver&) = delete; - void operator=(const FlagSaver&) = delete; - - private: - flags_internal::FlagSaverImpl* impl_; -}; - -//----------------------------------------------------------------------------- - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_REFLECTION_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/usage.h b/client/webrtc/webrtc_demo/third/include/absl/flags/usage.h deleted file mode 100644 index ad12ab7..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/usage.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FLAGS_USAGE_H_ -#define ABSL_FLAGS_USAGE_H_ - -#include "absl/base/config.h" -#include "absl/strings/string_view.h" - -// -------------------------------------------------------------------- -// Usage reporting interfaces - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// Sets the "usage" message to be used by help reporting routines. -// For example: -// absl::SetProgramUsageMessage( -// absl::StrCat("This program does nothing. Sample usage:\n", argv[0], -// " ")); -// Do not include commandline flags in the usage: we do that for you! -// Note: Calling SetProgramUsageMessage twice will trigger a call to std::exit. -void SetProgramUsageMessage(absl::string_view new_usage_message); - -// Returns the usage message set by SetProgramUsageMessage(). -absl::string_view ProgramUsageMessage(); - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FLAGS_USAGE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/flags/usage_config.h b/client/webrtc/webrtc_demo/third/include/absl/flags/usage_config.h deleted file mode 100644 index ded7030..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/flags/usage_config.h +++ /dev/null @@ -1,135 +0,0 @@ -// -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: usage_config.h -// ----------------------------------------------------------------------------- -// -// This file defines the main usage reporting configuration interfaces and -// documents Abseil's supported built-in usage flags. If these flags are found -// when parsing a command-line, Abseil will exit the program and display -// appropriate help messages. -#ifndef ABSL_FLAGS_USAGE_CONFIG_H_ -#define ABSL_FLAGS_USAGE_CONFIG_H_ - -#include -#include - -#include "absl/base/config.h" -#include "absl/strings/string_view.h" - -// ----------------------------------------------------------------------------- -// Built-in Usage Flags -// ----------------------------------------------------------------------------- -// -// Abseil supports the following built-in usage flags. When passed, these flags -// exit the program and : -// -// * --help -// Shows help on important flags for this binary -// * --helpfull -// Shows help on all flags -// * --helpshort -// Shows help on only the main module for this program -// * --helppackage -// Shows help on all modules in the main package -// * --version -// Shows the version and build info for this binary and exits -// * --only_check_args -// Exits after checking all flags -// * --helpon -// Shows help on the modules named by this flag value -// * --helpmatch -// Shows help on modules whose name contains the specified substring - -namespace absl { -ABSL_NAMESPACE_BEGIN - -namespace flags_internal { -using FlagKindFilter = std::function; -} // namespace flags_internal - -// FlagsUsageConfig -// -// This structure contains the collection of callbacks for changing the behavior -// of the usage reporting routines in Abseil Flags. -struct FlagsUsageConfig { - // Returns true if flags defined in the given source code file should be - // reported with --helpshort flag. For example, if the file - // "path/to/my/code.cc" defines the flag "--my_flag", and - // contains_helpshort_flags("path/to/my/code.cc") returns true, invoking the - // program with --helpshort will include information about --my_flag in the - // program output. - flags_internal::FlagKindFilter contains_helpshort_flags; - - // Returns true if flags defined in the filename should be reported with - // --help flag. For example, if the file - // "path/to/my/code.cc" defines the flag "--my_flag", and - // contains_help_flags("path/to/my/code.cc") returns true, invoking the - // program with --help will include information about --my_flag in the - // program output. - flags_internal::FlagKindFilter contains_help_flags; - - // Returns true if flags defined in the filename should be reported with - // --helppackage flag. For example, if the file - // "path/to/my/code.cc" defines the flag "--my_flag", and - // contains_helppackage_flags("path/to/my/code.cc") returns true, invoking the - // program with --helppackage will include information about --my_flag in the - // program output. - flags_internal::FlagKindFilter contains_helppackage_flags; - - // Generates string containing program version. This is the string reported - // when user specifies --version in a command line. - std::function version_string; - - // Normalizes the filename specific to the build system/filesystem used. This - // routine is used when we report the information about the flag definition - // location. For instance, if your build resides at some location you do not - // want to expose in the usage output, you can trim it to show only relevant - // part. - // For example: - // normalize_filename("/my_company/some_long_path/src/project/file.cc") - // might produce - // "project/file.cc". - std::function normalize_filename; -}; - -// SetFlagsUsageConfig() -// -// Sets the usage reporting configuration callbacks. If any of the callbacks are -// not set in usage_config instance, then the default value of the callback is -// used. -void SetFlagsUsageConfig(FlagsUsageConfig usage_config); - -namespace flags_internal { - -FlagsUsageConfig GetUsageConfig(); - -void ReportUsageError(absl::string_view msg, bool is_fatal); - -} // namespace flags_internal -ABSL_NAMESPACE_END -} // namespace absl - -extern "C" { - -// Additional report of fatal usage error message before we std::exit. Error is -// fatal if is_fatal argument to ReportUsageError is true. -void ABSL_INTERNAL_C_SYMBOL(AbslInternalReportFatalUsageError)( - absl::string_view); - -} // extern "C" - -#endif // ABSL_FLAGS_USAGE_CONFIG_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/functional/bind_front.h b/client/webrtc/webrtc_demo/third/include/absl/functional/bind_front.h deleted file mode 100644 index 5b47970..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/functional/bind_front.h +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: bind_front.h -// ----------------------------------------------------------------------------- -// -// `absl::bind_front()` returns a functor by binding a number of arguments to -// the front of a provided (usually more generic) functor. Unlike `std::bind`, -// it does not require the use of argument placeholders. The simpler syntax of -// `absl::bind_front()` allows you to avoid known misuses with `std::bind()`. -// -// `absl::bind_front()` is meant as a drop-in replacement for C++20's upcoming -// `std::bind_front()`, which similarly resolves these issues with -// `std::bind()`. Both `bind_front()` alternatives, unlike `std::bind()`, allow -// partial function application. (See -// https://en.wikipedia.org/wiki/Partial_application). - -#ifndef ABSL_FUNCTIONAL_BIND_FRONT_H_ -#define ABSL_FUNCTIONAL_BIND_FRONT_H_ - -#include "absl/functional/internal/front_binder.h" -#include "absl/utility/utility.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// bind_front() -// -// Binds the first N arguments of an invocable object and stores them by value. -// -// Like `std::bind()`, `absl::bind_front()` is implicitly convertible to -// `std::function`. In particular, it may be used as a simpler replacement for -// `std::bind()` in most cases, as it does not require placeholders to be -// specified. More importantly, it provides more reliable correctness guarantees -// than `std::bind()`; while `std::bind()` will silently ignore passing more -// parameters than expected, for example, `absl::bind_front()` will report such -// mis-uses as errors. -// -// absl::bind_front(a...) can be seen as storing the results of -// std::make_tuple(a...). -// -// Example: Binding a free function. -// -// int Minus(int a, int b) { return a - b; } -// -// assert(absl::bind_front(Minus)(3, 2) == 3 - 2); -// assert(absl::bind_front(Minus, 3)(2) == 3 - 2); -// assert(absl::bind_front(Minus, 3, 2)() == 3 - 2); -// -// Example: Binding a member function. -// -// struct Math { -// int Double(int a) const { return 2 * a; } -// }; -// -// Math math; -// -// assert(absl::bind_front(&Math::Double)(&math, 3) == 2 * 3); -// // Stores a pointer to math inside the functor. -// assert(absl::bind_front(&Math::Double, &math)(3) == 2 * 3); -// // Stores a copy of math inside the functor. -// assert(absl::bind_front(&Math::Double, math)(3) == 2 * 3); -// // Stores std::unique_ptr inside the functor. -// assert(absl::bind_front(&Math::Double, -// std::unique_ptr(new Math))(3) == 2 * 3); -// -// Example: Using `absl::bind_front()`, instead of `std::bind()`, with -// `std::function`. -// -// class FileReader { -// public: -// void ReadFileAsync(const std::string& filename, std::string* content, -// const std::function& done) { -// // Calls Executor::Schedule(std::function). -// Executor::DefaultExecutor()->Schedule( -// absl::bind_front(&FileReader::BlockingRead, this, -// filename, content, done)); -// } -// -// private: -// void BlockingRead(const std::string& filename, std::string* content, -// const std::function& done) { -// CHECK_OK(file::GetContents(filename, content, {})); -// done(); -// } -// }; -// -// `absl::bind_front()` stores bound arguments explicitly using the type passed -// rather than implicitly based on the type accepted by its functor. -// -// Example: Binding arguments explicitly. -// -// void LogStringView(absl::string_view sv) { -// LOG(INFO) << sv; -// } -// -// Executor* e = Executor::DefaultExecutor(); -// std::string s = "hello"; -// absl::string_view sv = s; -// -// // absl::bind_front(LogStringView, arg) makes a copy of arg and stores it. -// e->Schedule(absl::bind_front(LogStringView, sv)); // ERROR: dangling -// // string_view. -// -// e->Schedule(absl::bind_front(LogStringView, s)); // OK: stores a copy of -// // s. -// -// To store some of the arguments passed to `absl::bind_front()` by reference, -// use std::ref()` and `std::cref()`. -// -// Example: Storing some of the bound arguments by reference. -// -// class Service { -// public: -// void Serve(const Request& req, std::function* done) { -// // The request protocol buffer won't be deleted until done is called. -// // It's safe to store a reference to it inside the functor. -// Executor::DefaultExecutor()->Schedule( -// absl::bind_front(&Service::BlockingServe, this, std::cref(req), -// done)); -// } -// -// private: -// void BlockingServe(const Request& req, std::function* done); -// }; -// -// Example: Storing bound arguments by reference. -// -// void Print(const std::string& a, const std::string& b) { -// std::cerr << a << b; -// } -// -// std::string hi = "Hello, "; -// std::vector names = {"Chuk", "Gek"}; -// // Doesn't copy hi. -// for_each(names.begin(), names.end(), -// absl::bind_front(Print, std::ref(hi))); -// -// // DO NOT DO THIS: the functor may outlive "hi", resulting in -// // dangling references. -// foo->DoInFuture(absl::bind_front(Print, std::ref(hi), "Guest")); // BAD! -// auto f = absl::bind_front(Print, std::ref(hi), "Guest"); // BAD! -// -// Example: Storing reference-like types. -// -// void Print(absl::string_view a, const std::string& b) { -// std::cerr << a << b; -// } -// -// std::string hi = "Hello, "; -// // Copies "hi". -// absl::bind_front(Print, hi)("Chuk"); -// -// // Compile error: std::reference_wrapper is not implicitly -// // convertible to string_view. -// // absl::bind_front(Print, std::cref(hi))("Chuk"); -// -// // Doesn't copy "hi". -// absl::bind_front(Print, absl::string_view(hi))("Chuk"); -// -template -constexpr functional_internal::bind_front_t bind_front( - F&& func, BoundArgs&&... args) { - return functional_internal::bind_front_t( - absl::in_place, absl::forward(func), - absl::forward(args)...); -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FUNCTIONAL_BIND_FRONT_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/functional/function_ref.h b/client/webrtc/webrtc_demo/third/include/absl/functional/function_ref.h deleted file mode 100644 index 6e03ac2..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/functional/function_ref.h +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: function_ref.h -// ----------------------------------------------------------------------------- -// -// This header file defines the `absl::FunctionRef` type for holding a -// non-owning reference to an object of any invocable type. This function -// reference is typically most useful as a type-erased argument type for -// accepting function types that neither take ownership nor copy the type; using -// the reference type in this case avoids a copy and an allocation. Best -// practices of other non-owning reference-like objects (such as -// `absl::string_view`) apply here. -// -// An `absl::FunctionRef` is similar in usage to a `std::function` but has the -// following differences: -// -// * It doesn't own the underlying object. -// * It doesn't have a null or empty state. -// * It never performs deep copies or allocations. -// * It's much faster and cheaper to construct. -// * It's trivially copyable and destructable. -// -// Generally, `absl::FunctionRef` should not be used as a return value, data -// member, or to initialize a `std::function`. Such usages will often lead to -// problematic lifetime issues. Once you convert something to an -// `absl::FunctionRef` you cannot make a deep copy later. -// -// This class is suitable for use wherever a "const std::function<>&" -// would be used without making a copy. ForEach functions and other versions of -// the visitor pattern are a good example of when this class should be used. -// -// This class is trivial to copy and should be passed by value. -#ifndef ABSL_FUNCTIONAL_FUNCTION_REF_H_ -#define ABSL_FUNCTIONAL_FUNCTION_REF_H_ - -#include -#include -#include - -#include "absl/functional/internal/function_ref.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// FunctionRef -// -// Dummy class declaration to allow the partial specialization based on function -// types below. -template -class FunctionRef; - -// FunctionRef -// -// An `absl::FunctionRef` is a lightweight wrapper to any invokable object with -// a compatible signature. Generally, an `absl::FunctionRef` should only be used -// as an argument type and should be preferred as an argument over a const -// reference to a `std::function`. -// -// Example: -// -// // The following function takes a function callback by const reference -// bool Visitor(const std::function& callback); -// -// // Assuming that the function is not stored or otherwise copied, it can be -// // replaced by an `absl::FunctionRef`: -// bool Visitor(absl::FunctionRef -// callback); -// -// Note: the assignment operator within an `absl::FunctionRef` is intentionally -// deleted to prevent misuse; because the `absl::FunctionRef` does not own the -// underlying type, assignment likely indicates misuse. -template -class FunctionRef { - private: - // Used to disable constructors for objects that are not compatible with the - // signature of this FunctionRef. - template > - using EnableIfCompatible = - typename std::enable_if::value || - std::is_convertible::value>::type; - - public: - // Constructs a FunctionRef from any invokable type. - template > - FunctionRef(const F& f) // NOLINT(runtime/explicit) - : invoker_(&absl::functional_internal::InvokeObject) { - absl::functional_internal::AssertNonNull(f); - ptr_.obj = &f; - } - - // Overload for function pointers. This eliminates a level of indirection that - // would happen if the above overload was used (it lets us store the pointer - // instead of a pointer to a pointer). - // - // This overload is also used for references to functions, since references to - // functions can decay to function pointers implicitly. - template < - typename F, typename = EnableIfCompatible, - absl::functional_internal::EnableIf::value> = 0> - FunctionRef(F* f) // NOLINT(runtime/explicit) - : invoker_(&absl::functional_internal::InvokeFunction) { - assert(f != nullptr); - ptr_.fun = reinterpret_cast(f); - } - - // To help prevent subtle lifetime bugs, FunctionRef is not assignable. - // Typically, it should only be used as an argument type. - FunctionRef& operator=(const FunctionRef& rhs) = delete; - - // Call the underlying object. - R operator()(Args... args) const { - return invoker_(ptr_, std::forward(args)...); - } - - private: - absl::functional_internal::VoidPtr ptr_; - absl::functional_internal::Invoker invoker_; -}; - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FUNCTIONAL_FUNCTION_REF_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/functional/internal/front_binder.h b/client/webrtc/webrtc_demo/third/include/absl/functional/internal/front_binder.h deleted file mode 100644 index 45f52de..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/functional/internal/front_binder.h +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Implementation details for `absl::bind_front()`. - -#ifndef ABSL_FUNCTIONAL_INTERNAL_FRONT_BINDER_H_ -#define ABSL_FUNCTIONAL_INTERNAL_FRONT_BINDER_H_ - -#include -#include -#include - -#include "absl/base/internal/invoke.h" -#include "absl/container/internal/compressed_tuple.h" -#include "absl/meta/type_traits.h" -#include "absl/utility/utility.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace functional_internal { - -// Invoke the method, expanding the tuple of bound arguments. -template -R Apply(Tuple&& bound, absl::index_sequence, Args&&... free) { - return base_internal::invoke( - absl::forward(bound).template get()..., - absl::forward(free)...); -} - -template -class FrontBinder { - using BoundArgsT = absl::container_internal::CompressedTuple; - using Idx = absl::make_index_sequence; - - BoundArgsT bound_args_; - - public: - template - constexpr explicit FrontBinder(absl::in_place_t, Ts&&... ts) - : bound_args_(absl::forward(ts)...) {} - - template > - R operator()(FreeArgs&&... free_args) & { - return functional_internal::Apply(bound_args_, Idx(), - absl::forward(free_args)...); - } - - template > - R operator()(FreeArgs&&... free_args) const& { - return functional_internal::Apply(bound_args_, Idx(), - absl::forward(free_args)...); - } - - template > - R operator()(FreeArgs&&... free_args) && { - // This overload is called when *this is an rvalue. If some of the bound - // arguments are stored by value or rvalue reference, we move them. - return functional_internal::Apply(absl::move(bound_args_), Idx(), - absl::forward(free_args)...); - } - - template > - R operator()(FreeArgs&&... free_args) const&& { - // This overload is called when *this is an rvalue. If some of the bound - // arguments are stored by value or rvalue reference, we move them. - return functional_internal::Apply(absl::move(bound_args_), Idx(), - absl::forward(free_args)...); - } -}; - -template -using bind_front_t = FrontBinder, absl::decay_t...>; - -} // namespace functional_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FUNCTIONAL_INTERNAL_FRONT_BINDER_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/functional/internal/function_ref.h b/client/webrtc/webrtc_demo/third/include/absl/functional/internal/function_ref.h deleted file mode 100644 index b5bb8b4..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/functional/internal/function_ref.h +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2019 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_FUNCTIONAL_INTERNAL_FUNCTION_REF_H_ -#define ABSL_FUNCTIONAL_INTERNAL_FUNCTION_REF_H_ - -#include -#include -#include - -#include "absl/base/internal/invoke.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace functional_internal { - -// Like a void* that can handle function pointers as well. The standard does not -// allow function pointers to round-trip through void*, but void(*)() is fine. -// -// Note: It's important that this class remains trivial and is the same size as -// a pointer, since this allows the compiler to perform tail-call optimizations -// when the underlying function is a callable object with a matching signature. -union VoidPtr { - const void* obj; - void (*fun)(); -}; - -// Chooses the best type for passing T as an argument. -// Attempt to be close to SystemV AMD64 ABI. Objects with trivial copy ctor are -// passed by value. -template -constexpr bool PassByValue() { - return !std::is_lvalue_reference::value && - absl::is_trivially_copy_constructible::value && - absl::is_trivially_copy_assignable< - typename std::remove_cv::type>::value && - std::is_trivially_destructible::value && - sizeof(T) <= 2 * sizeof(void*); -} - -template -struct ForwardT : std::conditional(), T, T&&> {}; - -// An Invoker takes a pointer to the type-erased invokable object, followed by -// the arguments that the invokable object expects. -// -// Note: The order of arguments here is an optimization, since member functions -// have an implicit "this" pointer as their first argument, putting VoidPtr -// first allows the compiler to perform tail-call optimization in many cases. -template -using Invoker = R (*)(VoidPtr, typename ForwardT::type...); - -// -// InvokeObject and InvokeFunction provide static "Invoke" functions that can be -// used as Invokers for objects or functions respectively. -// -// static_cast handles the case the return type is void. -template -R InvokeObject(VoidPtr ptr, typename ForwardT::type... args) { - auto o = static_cast(ptr.obj); - return static_cast( - absl::base_internal::invoke(*o, std::forward(args)...)); -} - -template -R InvokeFunction(VoidPtr ptr, typename ForwardT::type... args) { - auto f = reinterpret_cast(ptr.fun); - return static_cast( - absl::base_internal::invoke(f, std::forward(args)...)); -} - -template -void AssertNonNull(const std::function& f) { - assert(f != nullptr); - (void)f; -} - -template -void AssertNonNull(const F&) {} - -template -void AssertNonNull(F C::*f) { - assert(f != nullptr); - (void)f; -} - -template -using EnableIf = typename ::std::enable_if::type; - -} // namespace functional_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_FUNCTIONAL_INTERNAL_FUNCTION_REF_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/hash/hash.h b/client/webrtc/webrtc_demo/third/include/absl/hash/hash.h deleted file mode 100644 index 5de132c..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/hash/hash.h +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: hash.h -// ----------------------------------------------------------------------------- -// -// This header file defines the Abseil `hash` library and the Abseil hashing -// framework. This framework consists of the following: -// -// * The `absl::Hash` functor, which is used to invoke the hasher within the -// Abseil hashing framework. `absl::Hash` supports most basic types and -// a number of Abseil types out of the box. -// * `AbslHashValue`, an extension point that allows you to extend types to -// support Abseil hashing without requiring you to define a hashing -// algorithm. -// * `HashState`, a type-erased class which implements the manipulation of the -// hash state (H) itself, contains member functions `combine()` and -// `combine_contiguous()`, which you can use to contribute to an existing -// hash state when hashing your types. -// -// Unlike `std::hash` or other hashing frameworks, the Abseil hashing framework -// provides most of its utility by abstracting away the hash algorithm (and its -// implementation) entirely. Instead, a type invokes the Abseil hashing -// framework by simply combining its state with the state of known, hashable -// types. Hashing of that combined state is separately done by `absl::Hash`. -// -// One should assume that a hash algorithm is chosen randomly at the start of -// each process. E.g., `absl::Hash{}(9)` in one process and -// `absl::Hash{}(9)` in another process are likely to differ. -// -// `absl::Hash` is intended to strongly mix input bits with a target of passing -// an [Avalanche Test](https://en.wikipedia.org/wiki/Avalanche_effect). -// -// Example: -// -// // Suppose we have a class `Circle` for which we want to add hashing: -// class Circle { -// public: -// ... -// private: -// std::pair center_; -// int radius_; -// }; -// -// // To add hashing support to `Circle`, we simply need to add a free -// // (non-member) function `AbslHashValue()`, and return the combined hash -// // state of the existing hash state and the class state. You can add such a -// // free function using a friend declaration within the body of the class: -// class Circle { -// public: -// ... -// template -// friend H AbslHashValue(H h, const Circle& c) { -// return H::combine(std::move(h), c.center_, c.radius_); -// } -// ... -// }; -// -// For more information, see Adding Type Support to `absl::Hash` below. -// -#ifndef ABSL_HASH_HASH_H_ -#define ABSL_HASH_HASH_H_ - -#include "absl/hash/internal/hash.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// ----------------------------------------------------------------------------- -// `absl::Hash` -// ----------------------------------------------------------------------------- -// -// `absl::Hash` is a convenient general-purpose hash functor for any type `T` -// satisfying any of the following conditions (in order): -// -// * T is an arithmetic or pointer type -// * T defines an overload for `AbslHashValue(H, const T&)` for an arbitrary -// hash state `H`. -// - T defines a specialization of `std::hash` -// -// `absl::Hash` intrinsically supports the following types: -// -// * All integral types (including bool) -// * All enum types -// * All floating-point types (although hashing them is discouraged) -// * All pointer types, including nullptr_t -// * std::pair, if T1 and T2 are hashable -// * std::tuple, if all the Ts... are hashable -// * std::unique_ptr and std::shared_ptr -// * All string-like types including: -// * absl::Cord -// * std::string -// * std::string_view (as well as any instance of std::basic_string that -// uses char and std::char_traits) -// * All the standard sequence containers (provided the elements are hashable) -// * All the standard ordered associative containers (provided the elements are -// hashable) -// * absl types such as the following: -// * absl::string_view -// * absl::InlinedVector -// * absl::FixedArray -// * absl::uint128 -// * absl::Time, absl::Duration, and absl::TimeZone -// -// Note: the list above is not meant to be exhaustive. Additional type support -// may be added, in which case the above list will be updated. -// -// ----------------------------------------------------------------------------- -// absl::Hash Invocation Evaluation -// ----------------------------------------------------------------------------- -// -// When invoked, `absl::Hash` searches for supplied hash functions in the -// following order: -// -// * Natively supported types out of the box (see above) -// * Types for which an `AbslHashValue()` overload is provided (such as -// user-defined types). See "Adding Type Support to `absl::Hash`" below. -// * Types which define a `std::hash` specialization -// -// The fallback to legacy hash functions exists mainly for backwards -// compatibility. If you have a choice, prefer defining an `AbslHashValue` -// overload instead of specializing any legacy hash functors. -// -// ----------------------------------------------------------------------------- -// The Hash State Concept, and using `HashState` for Type Erasure -// ----------------------------------------------------------------------------- -// -// The `absl::Hash` framework relies on the Concept of a "hash state." Such a -// hash state is used in several places: -// -// * Within existing implementations of `absl::Hash` to store the hashed -// state of an object. Note that it is up to the implementation how it stores -// such state. A hash table, for example, may mix the state to produce an -// integer value; a testing framework may simply hold a vector of that state. -// * Within implementations of `AbslHashValue()` used to extend user-defined -// types. (See "Adding Type Support to absl::Hash" below.) -// * Inside a `HashState`, providing type erasure for the concept of a hash -// state, which you can use to extend the `absl::Hash` framework for types -// that are otherwise difficult to extend using `AbslHashValue()`. (See the -// `HashState` class below.) -// -// The "hash state" concept contains two member functions for mixing hash state: -// -// * `H::combine(state, values...)` -// -// Combines an arbitrary number of values into a hash state, returning the -// updated state. Note that the existing hash state is move-only and must be -// passed by value. -// -// Each of the value types T must be hashable by H. -// -// NOTE: -// -// state = H::combine(std::move(state), value1, value2, value3); -// -// must be guaranteed to produce the same hash expansion as -// -// state = H::combine(std::move(state), value1); -// state = H::combine(std::move(state), value2); -// state = H::combine(std::move(state), value3); -// -// * `H::combine_contiguous(state, data, size)` -// -// Combines a contiguous array of `size` elements into a hash state, -// returning the updated state. Note that the existing hash state is -// move-only and must be passed by value. -// -// NOTE: -// -// state = H::combine_contiguous(std::move(state), data, size); -// -// need NOT be guaranteed to produce the same hash expansion as a loop -// (it may perform internal optimizations). If you need this guarantee, use a -// loop instead. -// -// ----------------------------------------------------------------------------- -// Adding Type Support to `absl::Hash` -// ----------------------------------------------------------------------------- -// -// To add support for your user-defined type, add a proper `AbslHashValue()` -// overload as a free (non-member) function. The overload will take an -// existing hash state and should combine that state with state from the type. -// -// Example: -// -// template -// H AbslHashValue(H state, const MyType& v) { -// return H::combine(std::move(state), v.field1, ..., v.fieldN); -// } -// -// where `(field1, ..., fieldN)` are the members you would use on your -// `operator==` to define equality. -// -// Notice that `AbslHashValue` is not a class member, but an ordinary function. -// An `AbslHashValue` overload for a type should only be declared in the same -// file and namespace as said type. The proper `AbslHashValue` implementation -// for a given type will be discovered via ADL. -// -// Note: unlike `std::hash', `absl::Hash` should never be specialized. It must -// only be extended by adding `AbslHashValue()` overloads. -// -template -using Hash = absl::hash_internal::Hash; - -// HashState -// -// A type erased version of the hash state concept, for use in user-defined -// `AbslHashValue` implementations that can't use templates (such as PImpl -// classes, virtual functions, etc.). The type erasure adds overhead so it -// should be avoided unless necessary. -// -// Note: This wrapper will only erase calls to: -// combine_contiguous(H, const unsigned char*, size_t) -// -// All other calls will be handled internally and will not invoke overloads -// provided by the wrapped class. -// -// Users of this class should still define a template `AbslHashValue` function, -// but can use `absl::HashState::Create(&state)` to erase the type of the hash -// state and dispatch to their private hashing logic. -// -// This state can be used like any other hash state. In particular, you can call -// `HashState::combine()` and `HashState::combine_contiguous()` on it. -// -// Example: -// -// class Interface { -// public: -// template -// friend H AbslHashValue(H state, const Interface& value) { -// state = H::combine(std::move(state), std::type_index(typeid(*this))); -// value.HashValue(absl::HashState::Create(&state)); -// return state; -// } -// private: -// virtual void HashValue(absl::HashState state) const = 0; -// }; -// -// class Impl : Interface { -// private: -// void HashValue(absl::HashState state) const override { -// absl::HashState::combine(std::move(state), v1_, v2_); -// } -// int v1_; -// std::string v2_; -// }; -class HashState : public hash_internal::HashStateBase { - public: - // HashState::Create() - // - // Create a new `HashState` instance that wraps `state`. All calls to - // `combine()` and `combine_contiguous()` on the new instance will be - // redirected to the original `state` object. The `state` object must outlive - // the `HashState` instance. - template - static HashState Create(T* state) { - HashState s; - s.Init(state); - return s; - } - - HashState(const HashState&) = delete; - HashState& operator=(const HashState&) = delete; - HashState(HashState&&) = default; - HashState& operator=(HashState&&) = default; - - // HashState::combine() - // - // Combines an arbitrary number of values into a hash state, returning the - // updated state. - using HashState::HashStateBase::combine; - - // HashState::combine_contiguous() - // - // Combines a contiguous array of `size` elements into a hash state, returning - // the updated state. - static HashState combine_contiguous(HashState hash_state, - const unsigned char* first, size_t size) { - hash_state.combine_contiguous_(hash_state.state_, first, size); - return hash_state; - } - using HashState::HashStateBase::combine_contiguous; - - private: - HashState() = default; - - template - static void CombineContiguousImpl(void* p, const unsigned char* first, - size_t size) { - T& state = *static_cast(p); - state = T::combine_contiguous(std::move(state), first, size); - } - - template - void Init(T* state) { - state_ = state; - combine_contiguous_ = &CombineContiguousImpl; - } - - // Do not erase an already erased state. - void Init(HashState* state) { - state_ = state->state_; - combine_contiguous_ = state->combine_contiguous_; - } - - void* state_; - void (*combine_contiguous_)(void*, const unsigned char*, size_t); -}; - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_HASH_HASH_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/hash/hash_testing.h b/client/webrtc/webrtc_demo/third/include/absl/hash/hash_testing.h deleted file mode 100644 index 1e1c574..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/hash/hash_testing.h +++ /dev/null @@ -1,378 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_HASH_HASH_TESTING_H_ -#define ABSL_HASH_HASH_TESTING_H_ - -#include -#include -#include -#include - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "absl/hash/internal/spy_hash_state.h" -#include "absl/meta/type_traits.h" -#include "absl/strings/str_cat.h" -#include "absl/types/variant.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// Run the absl::Hash algorithm over all the elements passed in and verify that -// their hash expansion is congruent with their `==` operator. -// -// It is used in conjunction with EXPECT_TRUE. Failures will output information -// on what requirement failed and on which objects. -// -// Users should pass a collection of types as either an initializer list or a -// container of cases. -// -// EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly( -// {v1, v2, ..., vN})); -// -// std::vector cases; -// // Fill cases... -// EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(cases)); -// -// Users can pass a variety of types for testing heterogeneous lookup with -// `std::make_tuple`: -// -// EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly( -// std::make_tuple(v1, v2, ..., vN))); -// -// -// Ideally, the values passed should provide enough coverage of the `==` -// operator and the AbslHashValue implementations. -// For dynamically sized types, the empty state should usually be included in -// the values. -// -// The function accepts an optional comparator function, in case that `==` is -// not enough for the values provided. -// -// Usage: -// -// EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly( -// std::make_tuple(v1, v2, ..., vN), MyCustomEq{})); -// -// It checks the following requirements: -// 1. The expansion for a value is deterministic. -// 2. For any two objects `a` and `b` in the sequence, if `a == b` evaluates -// to true, then their hash expansion must be equal. -// 3. If `a == b` evaluates to false their hash expansion must be unequal. -// 4. If `a == b` evaluates to false neither hash expansion can be a -// suffix of the other. -// 5. AbslHashValue overloads should not be called by the user. They are only -// meant to be called by the framework. Users should call H::combine() and -// H::combine_contiguous(). -// 6. No moved-from instance of the hash state is used in the implementation -// of AbslHashValue. -// -// The values do not have to have the same type. This can be useful for -// equivalent types that support heterogeneous lookup. -// -// A possible reason for breaking (2) is combining state in the hash expansion -// that was not used in `==`. -// For example: -// -// struct Bad2 { -// int a, b; -// template -// friend H AbslHashValue(H state, Bad2 x) { -// // Uses a and b. -// return H::combine(std::move(state), x.a, x.b); -// } -// friend bool operator==(Bad2 x, Bad2 y) { -// // Only uses a. -// return x.a == y.a; -// } -// }; -// -// As for (3), breaking this usually means that there is state being passed to -// the `==` operator that is not used in the hash expansion. -// For example: -// -// struct Bad3 { -// int a, b; -// template -// friend H AbslHashValue(H state, Bad3 x) { -// // Only uses a. -// return H::combine(std::move(state), x.a); -// } -// friend bool operator==(Bad3 x, Bad3 y) { -// // Uses a and b. -// return x.a == y.a && x.b == y.b; -// } -// }; -// -// Finally, a common way to break 4 is by combining dynamic ranges without -// combining the size of the range. -// For example: -// -// struct Bad4 { -// int *p, size; -// template -// friend H AbslHashValue(H state, Bad4 x) { -// return H::combine_contiguous(std::move(state), x.p, x.p + x.size); -// } -// friend bool operator==(Bad4 x, Bad4 y) { -// // Compare two ranges for equality. C++14 code can instead use std::equal. -// return absl::equal(x.p, x.p + x.size, y.p, y.p + y.size); -// } -// }; -// -// An easy solution to this is to combine the size after combining the range, -// like so: -// template -// friend H AbslHashValue(H state, Bad4 x) { -// return H::combine( -// H::combine_contiguous(std::move(state), x.p, x.p + x.size), x.size); -// } -// -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(const Container& values); - -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(const Container& values, Eq equals); - -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(std::initializer_list values); - -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(std::initializer_list values, - Eq equals); - -namespace hash_internal { - -struct PrintVisitor { - size_t index; - template - std::string operator()(const T* value) const { - return absl::StrCat("#", index, "(", testing::PrintToString(*value), ")"); - } -}; - -template -struct EqVisitor { - Eq eq; - template - bool operator()(const T* t, const U* u) const { - return eq(*t, *u); - } -}; - -struct ExpandVisitor { - template - SpyHashState operator()(const T* value) const { - return SpyHashState::combine(SpyHashState(), *value); - } -}; - -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(const Container& values, Eq equals) { - using V = typename Container::value_type; - - struct Info { - const V& value; - size_t index; - std::string ToString() const { - return absl::visit(PrintVisitor{index}, value); - } - SpyHashState expand() const { return absl::visit(ExpandVisitor{}, value); } - }; - - using EqClass = std::vector; - std::vector classes; - - // Gather the values in equivalence classes. - size_t i = 0; - for (const auto& value : values) { - EqClass* c = nullptr; - for (auto& eqclass : classes) { - if (absl::visit(EqVisitor{equals}, value, eqclass[0].value)) { - c = &eqclass; - break; - } - } - if (c == nullptr) { - classes.emplace_back(); - c = &classes.back(); - } - c->push_back({value, i}); - ++i; - - // Verify potential errors captured by SpyHashState. - if (auto error = c->back().expand().error()) { - return testing::AssertionFailure() << *error; - } - } - - if (classes.size() < 2) { - return testing::AssertionFailure() - << "At least two equivalence classes are expected."; - } - - // We assume that equality is correctly implemented. - // Now we verify that AbslHashValue is also correctly implemented. - - for (const auto& c : classes) { - // All elements of the equivalence class must have the same hash - // expansion. - const SpyHashState expected = c[0].expand(); - for (const Info& v : c) { - if (v.expand() != v.expand()) { - return testing::AssertionFailure() - << "Hash expansion for " << v.ToString() - << " is non-deterministic."; - } - if (v.expand() != expected) { - return testing::AssertionFailure() - << "Values " << c[0].ToString() << " and " << v.ToString() - << " evaluate as equal but have an unequal hash expansion."; - } - } - - // Elements from other classes must have different hash expansion. - for (const auto& c2 : classes) { - if (&c == &c2) continue; - const SpyHashState c2_hash = c2[0].expand(); - switch (SpyHashState::Compare(expected, c2_hash)) { - case SpyHashState::CompareResult::kEqual: - return testing::AssertionFailure() - << "Values " << c[0].ToString() << " and " << c2[0].ToString() - << " evaluate as unequal but have an equal hash expansion."; - case SpyHashState::CompareResult::kBSuffixA: - return testing::AssertionFailure() - << "Hash expansion of " << c2[0].ToString() - << " is a suffix of the hash expansion of " << c[0].ToString() - << "."; - case SpyHashState::CompareResult::kASuffixB: - return testing::AssertionFailure() - << "Hash expansion of " << c[0].ToString() - << " is a suffix of the hash expansion of " << c2[0].ToString() - << "."; - case SpyHashState::CompareResult::kUnequal: - break; - } - } - } - return testing::AssertionSuccess(); -} - -template -struct TypeSet { - template ...>::value> - struct Insert { - using type = TypeSet; - }; - template - struct Insert { - using type = TypeSet; - }; - - template (tuple)...}; - } - - static Out Do(const std::tuple& values) { - return DoImpl(values, absl::index_sequence_for()); - } -}; - -template <> -struct ContainerAsVector> { - static std::vector> Do(std::tuple<>) { return {}; } -}; - -struct DefaultEquals { - template - bool operator()(const T& t, const U& u) const { - return t == u; - } -}; - -} // namespace hash_internal - -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(const Container& values) { - return hash_internal::VerifyTypeImplementsAbslHashCorrectly( - hash_internal::ContainerAsVector::Do(values), - hash_internal::DefaultEquals{}); -} - -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(const Container& values, Eq equals) { - return hash_internal::VerifyTypeImplementsAbslHashCorrectly( - hash_internal::ContainerAsVector::Do(values), equals); -} - -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(std::initializer_list values) { - return hash_internal::VerifyTypeImplementsAbslHashCorrectly( - hash_internal::ContainerAsVector>::Do(values), - hash_internal::DefaultEquals{}); -} - -template -ABSL_MUST_USE_RESULT testing::AssertionResult -VerifyTypeImplementsAbslHashCorrectly(std::initializer_list values, - Eq equals) { - return hash_internal::VerifyTypeImplementsAbslHashCorrectly( - hash_internal::ContainerAsVector>::Do(values), - equals); -} - -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_HASH_HASH_TESTING_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/hash/internal/city.h b/client/webrtc/webrtc_demo/third/include/absl/hash/internal/city.h deleted file mode 100644 index 393da0b..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/hash/internal/city.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// https://code.google.com/p/cityhash/ -// -// This file provides a few functions for hashing strings. All of them are -// high-quality functions in the sense that they pass standard tests such -// as Austin Appleby's SMHasher. They are also fast. -// -// For 64-bit x86 code, on short strings, we don't know of anything faster than -// CityHash64 that is of comparable quality. We believe our nearest competitor -// is Murmur3. For 64-bit x86 code, CityHash64 is an excellent choice for hash -// tables and most other hashing (excluding cryptography). -// -// For 32-bit x86 code, we don't know of anything faster than CityHash32 that -// is of comparable quality. We believe our nearest competitor is Murmur3A. -// (On 64-bit CPUs, it is typically faster to use the other CityHash variants.) -// -// Functions in the CityHash family are not suitable for cryptography. -// -// Please see CityHash's README file for more details on our performance -// measurements and so on. -// -// WARNING: This code has been only lightly tested on big-endian platforms! -// It is known to work well on little-endian platforms that have a small penalty -// for unaligned reads, such as current Intel and AMD moderate-to-high-end CPUs. -// It should work on all 32-bit and 64-bit platforms that allow unaligned reads; -// bug reports are welcome. -// -// By the way, for some hash functions, given strings a and b, the hash -// of a+b is easily derived from the hashes of a and b. This property -// doesn't hold for any hash functions in this file. - -#ifndef ABSL_HASH_INTERNAL_CITY_H_ -#define ABSL_HASH_INTERNAL_CITY_H_ - -#include -#include // for size_t. - -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace hash_internal { - -// Hash function for a byte array. -uint64_t CityHash64(const char *s, size_t len); - -// Hash function for a byte array. For convenience, a 64-bit seed is also -// hashed into the result. -uint64_t CityHash64WithSeed(const char *s, size_t len, uint64_t seed); - -// Hash function for a byte array. For convenience, two seeds are also -// hashed into the result. -uint64_t CityHash64WithSeeds(const char *s, size_t len, uint64_t seed0, - uint64_t seed1); - -// Hash function for a byte array. Most useful in 32-bit binaries. -uint32_t CityHash32(const char *s, size_t len); - -} // namespace hash_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_HASH_INTERNAL_CITY_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/hash/internal/hash.h b/client/webrtc/webrtc_demo/third/include/absl/hash/internal/hash.h deleted file mode 100644 index 7fb0af0..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/hash/internal/hash.h +++ /dev/null @@ -1,1045 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: hash.h -// ----------------------------------------------------------------------------- -// -#ifndef ABSL_HASH_INTERNAL_HASH_H_ -#define ABSL_HASH_INTERNAL_HASH_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "absl/base/config.h" -#include "absl/base/internal/unaligned_access.h" -#include "absl/base/port.h" -#include "absl/container/fixed_array.h" -#include "absl/hash/internal/wyhash.h" -#include "absl/meta/type_traits.h" -#include "absl/numeric/int128.h" -#include "absl/strings/string_view.h" -#include "absl/types/optional.h" -#include "absl/types/variant.h" -#include "absl/utility/utility.h" -#include "absl/hash/internal/city.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace hash_internal { - -// Internal detail: Large buffers are hashed in smaller chunks. This function -// returns the size of these chunks. -constexpr size_t PiecewiseChunkSize() { return 1024; } - -// PiecewiseCombiner -// -// PiecewiseCombiner is an internal-only helper class for hashing a piecewise -// buffer of `char` or `unsigned char` as though it were contiguous. This class -// provides two methods: -// -// H add_buffer(state, data, size) -// H finalize(state) -// -// `add_buffer` can be called zero or more times, followed by a single call to -// `finalize`. This will produce the same hash expansion as concatenating each -// buffer piece into a single contiguous buffer, and passing this to -// `H::combine_contiguous`. -// -// Example usage: -// PiecewiseCombiner combiner; -// for (const auto& piece : pieces) { -// state = combiner.add_buffer(std::move(state), piece.data, piece.size); -// } -// return combiner.finalize(std::move(state)); -class PiecewiseCombiner { - public: - PiecewiseCombiner() : position_(0) {} - PiecewiseCombiner(const PiecewiseCombiner&) = delete; - PiecewiseCombiner& operator=(const PiecewiseCombiner&) = delete; - - // PiecewiseCombiner::add_buffer() - // - // Appends the given range of bytes to the sequence to be hashed, which may - // modify the provided hash state. - template - H add_buffer(H state, const unsigned char* data, size_t size); - template - H add_buffer(H state, const char* data, size_t size) { - return add_buffer(std::move(state), - reinterpret_cast(data), size); - } - - // PiecewiseCombiner::finalize() - // - // Finishes combining the hash sequence, which may may modify the provided - // hash state. - // - // Once finalize() is called, add_buffer() may no longer be called. The - // resulting hash state will be the same as if the pieces passed to - // add_buffer() were concatenated into a single flat buffer, and then provided - // to H::combine_contiguous(). - template - H finalize(H state); - - private: - unsigned char buf_[PiecewiseChunkSize()]; - size_t position_; -}; - -// HashStateBase -// -// A hash state object represents an intermediate state in the computation -// of an unspecified hash algorithm. `HashStateBase` provides a CRTP style -// base class for hash state implementations. Developers adding type support -// for `absl::Hash` should not rely on any parts of the state object other than -// the following member functions: -// -// * HashStateBase::combine() -// * HashStateBase::combine_contiguous() -// -// A derived hash state class of type `H` must provide a static member function -// with a signature similar to the following: -// -// `static H combine_contiguous(H state, const unsigned char*, size_t)`. -// -// `HashStateBase` will provide a complete implementation for a hash state -// object in terms of this method. -// -// Example: -// -// // Use CRTP to define your derived class. -// struct MyHashState : HashStateBase { -// static H combine_contiguous(H state, const unsigned char*, size_t); -// using MyHashState::HashStateBase::combine; -// using MyHashState::HashStateBase::combine_contiguous; -// }; -template -class HashStateBase { - public: - // HashStateBase::combine() - // - // Combines an arbitrary number of values into a hash state, returning the - // updated state. - // - // Each of the value types `T` must be separately hashable by the Abseil - // hashing framework. - // - // NOTE: - // - // state = H::combine(std::move(state), value1, value2, value3); - // - // is guaranteed to produce the same hash expansion as: - // - // state = H::combine(std::move(state), value1); - // state = H::combine(std::move(state), value2); - // state = H::combine(std::move(state), value3); - template - static H combine(H state, const T& value, const Ts&... values); - static H combine(H state) { return state; } - - // HashStateBase::combine_contiguous() - // - // Combines a contiguous array of `size` elements into a hash state, returning - // the updated state. - // - // NOTE: - // - // state = H::combine_contiguous(std::move(state), data, size); - // - // is NOT guaranteed to produce the same hash expansion as a for-loop (it may - // perform internal optimizations). If you need this guarantee, use the - // for-loop instead. - template - static H combine_contiguous(H state, const T* data, size_t size); - - using AbslInternalPiecewiseCombiner = PiecewiseCombiner; -}; - -// is_uniquely_represented -// -// `is_uniquely_represented` is a trait class that indicates whether `T` -// is uniquely represented. -// -// A type is "uniquely represented" if two equal values of that type are -// guaranteed to have the same bytes in their underlying storage. In other -// words, if `a == b`, then `memcmp(&a, &b, sizeof(T))` is guaranteed to be -// zero. This property cannot be detected automatically, so this trait is false -// by default, but can be specialized by types that wish to assert that they are -// uniquely represented. This makes them eligible for certain optimizations. -// -// If you have any doubt whatsoever, do not specialize this template. -// The default is completely safe, and merely disables some optimizations -// that will not matter for most types. Specializing this template, -// on the other hand, can be very hazardous. -// -// To be uniquely represented, a type must not have multiple ways of -// representing the same value; for example, float and double are not -// uniquely represented, because they have distinct representations for -// +0 and -0. Furthermore, the type's byte representation must consist -// solely of user-controlled data, with no padding bits and no compiler- -// controlled data such as vptrs or sanitizer metadata. This is usually -// very difficult to guarantee, because in most cases the compiler can -// insert data and padding bits at its own discretion. -// -// If you specialize this template for a type `T`, you must do so in the file -// that defines that type (or in this file). If you define that specialization -// anywhere else, `is_uniquely_represented` could have different meanings -// in different places. -// -// The Enable parameter is meaningless; it is provided as a convenience, -// to support certain SFINAE techniques when defining specializations. -template -struct is_uniquely_represented : std::false_type {}; - -// is_uniquely_represented -// -// unsigned char is a synonym for "byte", so it is guaranteed to be -// uniquely represented. -template <> -struct is_uniquely_represented : std::true_type {}; - -// is_uniquely_represented for non-standard integral types -// -// Integral types other than bool should be uniquely represented on any -// platform that this will plausibly be ported to. -template -struct is_uniquely_represented< - Integral, typename std::enable_if::value>::type> - : std::true_type {}; - -// is_uniquely_represented -// -// -template <> -struct is_uniquely_represented : std::false_type {}; - -// hash_bytes() -// -// Convenience function that combines `hash_state` with the byte representation -// of `value`. -template -H hash_bytes(H hash_state, const T& value) { - const unsigned char* start = reinterpret_cast(&value); - return H::combine_contiguous(std::move(hash_state), start, sizeof(value)); -} - -// ----------------------------------------------------------------------------- -// AbslHashValue for Basic Types -// ----------------------------------------------------------------------------- - -// Note: Default `AbslHashValue` implementations live in `hash_internal`. This -// allows us to block lexical scope lookup when doing an unqualified call to -// `AbslHashValue` below. User-defined implementations of `AbslHashValue` can -// only be found via ADL. - -// AbslHashValue() for hashing bool values -// -// We use SFINAE to ensure that this overload only accepts bool, not types that -// are convertible to bool. -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, B value) { - return H::combine(std::move(hash_state), - static_cast(value ? 1 : 0)); -} - -// AbslHashValue() for hashing enum values -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, Enum e) { - // In practice, we could almost certainly just invoke hash_bytes directly, - // but it's possible that a sanitizer might one day want to - // store data in the unused bits of an enum. To avoid that risk, we - // convert to the underlying type before hashing. Hopefully this will get - // optimized away; if not, we can reopen discussion with c-toolchain-team. - return H::combine(std::move(hash_state), - static_cast::type>(e)); -} -// AbslHashValue() for hashing floating-point values -template -typename std::enable_if::value || - std::is_same::value, - H>::type -AbslHashValue(H hash_state, Float value) { - return hash_internal::hash_bytes(std::move(hash_state), - value == 0 ? 0 : value); -} - -// Long double has the property that it might have extra unused bytes in it. -// For example, in x86 sizeof(long double)==16 but it only really uses 80-bits -// of it. This means we can't use hash_bytes on a long double and have to -// convert it to something else first. -template -typename std::enable_if::value, H>::type -AbslHashValue(H hash_state, LongDouble value) { - const int category = std::fpclassify(value); - switch (category) { - case FP_INFINITE: - // Add the sign bit to differentiate between +Inf and -Inf - hash_state = H::combine(std::move(hash_state), std::signbit(value)); - break; - - case FP_NAN: - case FP_ZERO: - default: - // Category is enough for these. - break; - - case FP_NORMAL: - case FP_SUBNORMAL: - // We can't convert `value` directly to double because this would have - // undefined behavior if the value is out of range. - // std::frexp gives us a value in the range (-1, -.5] or [.5, 1) that is - // guaranteed to be in range for `double`. The truncation is - // implementation defined, but that works as long as it is deterministic. - int exp; - auto mantissa = static_cast(std::frexp(value, &exp)); - hash_state = H::combine(std::move(hash_state), mantissa, exp); - } - - return H::combine(std::move(hash_state), category); -} - -// AbslHashValue() for hashing pointers -template -H AbslHashValue(H hash_state, T* ptr) { - auto v = reinterpret_cast(ptr); - // Due to alignment, pointers tend to have low bits as zero, and the next few - // bits follow a pattern since they are also multiples of some base value. - // Mixing the pointer twice helps prevent stuck low bits for certain alignment - // values. - return H::combine(std::move(hash_state), v, v); -} - -// AbslHashValue() for hashing nullptr_t -template -H AbslHashValue(H hash_state, std::nullptr_t) { - return H::combine(std::move(hash_state), static_cast(nullptr)); -} - -// ----------------------------------------------------------------------------- -// AbslHashValue for Composite Types -// ----------------------------------------------------------------------------- - -// is_hashable() -// -// Trait class which returns true if T is hashable by the absl::Hash framework. -// Used for the AbslHashValue implementations for composite types below. -template -struct is_hashable; - -// AbslHashValue() for hashing pairs -template -typename std::enable_if::value && is_hashable::value, - H>::type -AbslHashValue(H hash_state, const std::pair& p) { - return H::combine(std::move(hash_state), p.first, p.second); -} - -// hash_tuple() -// -// Helper function for hashing a tuple. The third argument should -// be an index_sequence running from 0 to tuple_size - 1. -template -H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence) { - return H::combine(std::move(hash_state), std::get(t)...); -} - -// AbslHashValue for hashing tuples -template -#if defined(_MSC_VER) -// This SFINAE gets MSVC confused under some conditions. Let's just disable it -// for now. -H -#else // _MSC_VER -typename std::enable_if...>::value, H>::type -#endif // _MSC_VER -AbslHashValue(H hash_state, const std::tuple& t) { - return hash_internal::hash_tuple(std::move(hash_state), t, - absl::make_index_sequence()); -} - -// ----------------------------------------------------------------------------- -// AbslHashValue for Pointers -// ----------------------------------------------------------------------------- - -// AbslHashValue for hashing unique_ptr -template -H AbslHashValue(H hash_state, const std::unique_ptr& ptr) { - return H::combine(std::move(hash_state), ptr.get()); -} - -// AbslHashValue for hashing shared_ptr -template -H AbslHashValue(H hash_state, const std::shared_ptr& ptr) { - return H::combine(std::move(hash_state), ptr.get()); -} - -// ----------------------------------------------------------------------------- -// AbslHashValue for String-Like Types -// ----------------------------------------------------------------------------- - -// AbslHashValue for hashing strings -// -// All the string-like types supported here provide the same hash expansion for -// the same character sequence. These types are: -// -// - `absl::Cord` -// - `std::string` (and std::basic_string, A> for -// any allocator A) -// - `absl::string_view` and `std::string_view` -// -// For simplicity, we currently support only `char` strings. This support may -// be broadened, if necessary, but with some caution - this overload would -// misbehave in cases where the traits' `eq()` member isn't equivalent to `==` -// on the underlying character type. -template -H AbslHashValue(H hash_state, absl::string_view str) { - return H::combine( - H::combine_contiguous(std::move(hash_state), str.data(), str.size()), - str.size()); -} - -// Support std::wstring, std::u16string and std::u32string. -template ::value || - std::is_same::value || - std::is_same::value>> -H AbslHashValue( - H hash_state, - const std::basic_string, Alloc>& str) { - return H::combine( - H::combine_contiguous(std::move(hash_state), str.data(), str.size()), - str.size()); -} - -// ----------------------------------------------------------------------------- -// AbslHashValue for Sequence Containers -// ----------------------------------------------------------------------------- - -// AbslHashValue for hashing std::array -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, const std::array& array) { - return H::combine_contiguous(std::move(hash_state), array.data(), - array.size()); -} - -// AbslHashValue for hashing std::deque -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, const std::deque& deque) { - // TODO(gromer): investigate a more efficient implementation taking - // advantage of the chunk structure. - for (const auto& t : deque) { - hash_state = H::combine(std::move(hash_state), t); - } - return H::combine(std::move(hash_state), deque.size()); -} - -// AbslHashValue for hashing std::forward_list -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, const std::forward_list& list) { - size_t size = 0; - for (const T& t : list) { - hash_state = H::combine(std::move(hash_state), t); - ++size; - } - return H::combine(std::move(hash_state), size); -} - -// AbslHashValue for hashing std::list -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, const std::list& list) { - for (const auto& t : list) { - hash_state = H::combine(std::move(hash_state), t); - } - return H::combine(std::move(hash_state), list.size()); -} - -// AbslHashValue for hashing std::vector -// -// Do not use this for vector. It does not have a .data(), and a fallback -// for std::hash<> is most likely faster. -template -typename std::enable_if::value && !std::is_same::value, - H>::type -AbslHashValue(H hash_state, const std::vector& vector) { - return H::combine(H::combine_contiguous(std::move(hash_state), vector.data(), - vector.size()), - vector.size()); -} - -// ----------------------------------------------------------------------------- -// AbslHashValue for Ordered Associative Containers -// ----------------------------------------------------------------------------- - -// AbslHashValue for hashing std::map -template -typename std::enable_if::value && is_hashable::value, - H>::type -AbslHashValue(H hash_state, const std::map& map) { - for (const auto& t : map) { - hash_state = H::combine(std::move(hash_state), t); - } - return H::combine(std::move(hash_state), map.size()); -} - -// AbslHashValue for hashing std::multimap -template -typename std::enable_if::value && is_hashable::value, - H>::type -AbslHashValue(H hash_state, - const std::multimap& map) { - for (const auto& t : map) { - hash_state = H::combine(std::move(hash_state), t); - } - return H::combine(std::move(hash_state), map.size()); -} - -// AbslHashValue for hashing std::set -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, const std::set& set) { - for (const auto& t : set) { - hash_state = H::combine(std::move(hash_state), t); - } - return H::combine(std::move(hash_state), set.size()); -} - -// AbslHashValue for hashing std::multiset -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, const std::multiset& set) { - for (const auto& t : set) { - hash_state = H::combine(std::move(hash_state), t); - } - return H::combine(std::move(hash_state), set.size()); -} - -// ----------------------------------------------------------------------------- -// AbslHashValue for Wrapper Types -// ----------------------------------------------------------------------------- - -// AbslHashValue for hashing std::reference_wrapper -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, std::reference_wrapper opt) { - return H::combine(std::move(hash_state), opt.get()); -} - -// AbslHashValue for hashing absl::optional -template -typename std::enable_if::value, H>::type AbslHashValue( - H hash_state, const absl::optional& opt) { - if (opt) hash_state = H::combine(std::move(hash_state), *opt); - return H::combine(std::move(hash_state), opt.has_value()); -} - -// VariantVisitor -template -struct VariantVisitor { - H&& hash_state; - template - H operator()(const T& t) const { - return H::combine(std::move(hash_state), t); - } -}; - -// AbslHashValue for hashing absl::variant -template -typename std::enable_if...>::value, H>::type -AbslHashValue(H hash_state, const absl::variant& v) { - if (!v.valueless_by_exception()) { - hash_state = absl::visit(VariantVisitor{std::move(hash_state)}, v); - } - return H::combine(std::move(hash_state), v.index()); -} - -// ----------------------------------------------------------------------------- -// AbslHashValue for Other Types -// ----------------------------------------------------------------------------- - -// AbslHashValue for hashing std::bitset is not defined, for the same reason as -// for vector (see std::vector above): It does not expose the raw bytes, -// and a fallback to std::hash<> is most likely faster. - -// ----------------------------------------------------------------------------- - -// hash_range_or_bytes() -// -// Mixes all values in the range [data, data+size) into the hash state. -// This overload accepts only uniquely-represented types, and hashes them by -// hashing the entire range of bytes. -template -typename std::enable_if::value, H>::type -hash_range_or_bytes(H hash_state, const T* data, size_t size) { - const auto* bytes = reinterpret_cast(data); - return H::combine_contiguous(std::move(hash_state), bytes, sizeof(T) * size); -} - -// hash_range_or_bytes() -template -typename std::enable_if::value, H>::type -hash_range_or_bytes(H hash_state, const T* data, size_t size) { - for (const auto end = data + size; data < end; ++data) { - hash_state = H::combine(std::move(hash_state), *data); - } - return hash_state; -} - -#if defined(ABSL_INTERNAL_LEGACY_HASH_NAMESPACE) && \ - ABSL_META_INTERNAL_STD_HASH_SFINAE_FRIENDLY_ -#define ABSL_HASH_INTERNAL_SUPPORT_LEGACY_HASH_ 1 -#else -#define ABSL_HASH_INTERNAL_SUPPORT_LEGACY_HASH_ 0 -#endif - -// HashSelect -// -// Type trait to select the appropriate hash implementation to use. -// HashSelect::type will give the proper hash implementation, to be invoked -// as: -// HashSelect::type::Invoke(state, value) -// Also, HashSelect::type::value is a boolean equal to `true` if there is a -// valid `Invoke` function. Types that are not hashable will have a ::value of -// `false`. -struct HashSelect { - private: - struct State : HashStateBase { - static State combine_contiguous(State hash_state, const unsigned char*, - size_t); - using State::HashStateBase::combine_contiguous; - }; - - struct UniquelyRepresentedProbe { - template - static auto Invoke(H state, const T& value) - -> absl::enable_if_t::value, H> { - return hash_internal::hash_bytes(std::move(state), value); - } - }; - - struct HashValueProbe { - template - static auto Invoke(H state, const T& value) -> absl::enable_if_t< - std::is_same::value, - H> { - return AbslHashValue(std::move(state), value); - } - }; - - struct LegacyHashProbe { -#if ABSL_HASH_INTERNAL_SUPPORT_LEGACY_HASH_ - template - static auto Invoke(H state, const T& value) -> absl::enable_if_t< - std::is_convertible< - decltype(ABSL_INTERNAL_LEGACY_HASH_NAMESPACE::hash()(value)), - size_t>::value, - H> { - return hash_internal::hash_bytes( - std::move(state), - ABSL_INTERNAL_LEGACY_HASH_NAMESPACE::hash{}(value)); - } -#endif // ABSL_HASH_INTERNAL_SUPPORT_LEGACY_HASH_ - }; - - struct StdHashProbe { - template - static auto Invoke(H state, const T& value) - -> absl::enable_if_t::value, H> { - return hash_internal::hash_bytes(std::move(state), std::hash{}(value)); - } - }; - - template - struct Probe : Hash { - private: - template (), std::declval()))> - static std::true_type Test(int); - template - static std::false_type Test(char); - - public: - static constexpr bool value = decltype(Test(0))::value; - }; - - public: - // Probe each implementation in order. - // disjunction provides short circuiting wrt instantiation. - template - using Apply = absl::disjunction< // - Probe, // - Probe, // - Probe, // - Probe, // - std::false_type>; -}; - -template -struct is_hashable - : std::integral_constant::value> {}; - -// HashState -class ABSL_DLL HashState : public HashStateBase { - // absl::uint128 is not an alias or a thin wrapper around the intrinsic. - // We use the intrinsic when available to improve performance. -#ifdef ABSL_HAVE_INTRINSIC_INT128 - using uint128 = __uint128_t; -#else // ABSL_HAVE_INTRINSIC_INT128 - using uint128 = absl::uint128; -#endif // ABSL_HAVE_INTRINSIC_INT128 - - static constexpr uint64_t kMul = - sizeof(size_t) == 4 ? uint64_t{0xcc9e2d51} - : uint64_t{0x9ddfea08eb382d69}; - - template - using IntegralFastPath = - conjunction, is_uniquely_represented>; - - public: - // Move only - HashState(HashState&&) = default; - HashState& operator=(HashState&&) = default; - - // HashState::combine_contiguous() - // - // Fundamental base case for hash recursion: mixes the given range of bytes - // into the hash state. - static HashState combine_contiguous(HashState hash_state, - const unsigned char* first, size_t size) { - return HashState( - CombineContiguousImpl(hash_state.state_, first, size, - std::integral_constant{})); - } - using HashState::HashStateBase::combine_contiguous; - - // HashState::hash() - // - // For performance reasons in non-opt mode, we specialize this for - // integral types. - // Otherwise we would be instantiating and calling dozens of functions for - // something that is just one multiplication and a couple xor's. - // The result should be the same as running the whole algorithm, but faster. - template ::value, int> = 0> - static size_t hash(T value) { - return static_cast(Mix(Seed(), static_cast(value))); - } - - // Overload of HashState::hash() - template ::value, int> = 0> - static size_t hash(const T& value) { - return static_cast(combine(HashState{}, value).state_); - } - - private: - // Invoked only once for a given argument; that plus the fact that this is - // move-only ensures that there is only one non-moved-from object. - HashState() : state_(Seed()) {} - - // Workaround for MSVC bug. - // We make the type copyable to fix the calling convention, even though we - // never actually copy it. Keep it private to not affect the public API of the - // type. - HashState(const HashState&) = default; - - explicit HashState(uint64_t state) : state_(state) {} - - // Implementation of the base case for combine_contiguous where we actually - // mix the bytes into the state. - // Dispatch to different implementations of the combine_contiguous depending - // on the value of `sizeof(size_t)`. - static uint64_t CombineContiguousImpl(uint64_t state, - const unsigned char* first, size_t len, - std::integral_constant - /* sizeof_size_t */); - static uint64_t CombineContiguousImpl(uint64_t state, - const unsigned char* first, size_t len, - std::integral_constant - /* sizeof_size_t */); - - - // Slow dispatch path for calls to CombineContiguousImpl with a size argument - // larger than PiecewiseChunkSize(). Has the same effect as calling - // CombineContiguousImpl() repeatedly with the chunk stride size. - static uint64_t CombineLargeContiguousImpl32(uint64_t state, - const unsigned char* first, - size_t len); - static uint64_t CombineLargeContiguousImpl64(uint64_t state, - const unsigned char* first, - size_t len); - - // Reads 9 to 16 bytes from p. - // The least significant 8 bytes are in .first, the rest (zero padded) bytes - // are in .second. - static std::pair Read9To16(const unsigned char* p, - size_t len) { - uint64_t low_mem = absl::base_internal::UnalignedLoad64(p); - uint64_t high_mem = absl::base_internal::UnalignedLoad64(p + len - 8); -#ifdef ABSL_IS_LITTLE_ENDIAN - uint64_t most_significant = high_mem; - uint64_t least_significant = low_mem; -#else - uint64_t most_significant = low_mem; - uint64_t least_significant = high_mem; -#endif - return {least_significant, most_significant >> (128 - len * 8)}; - } - - // Reads 4 to 8 bytes from p. Zero pads to fill uint64_t. - static uint64_t Read4To8(const unsigned char* p, size_t len) { - uint32_t low_mem = absl::base_internal::UnalignedLoad32(p); - uint32_t high_mem = absl::base_internal::UnalignedLoad32(p + len - 4); -#ifdef ABSL_IS_LITTLE_ENDIAN - uint32_t most_significant = high_mem; - uint32_t least_significant = low_mem; -#else - uint32_t most_significant = low_mem; - uint32_t least_significant = high_mem; -#endif - return (static_cast(most_significant) << (len - 4) * 8) | - least_significant; - } - - // Reads 1 to 3 bytes from p. Zero pads to fill uint32_t. - static uint32_t Read1To3(const unsigned char* p, size_t len) { - unsigned char mem0 = p[0]; - unsigned char mem1 = p[len / 2]; - unsigned char mem2 = p[len - 1]; -#ifdef ABSL_IS_LITTLE_ENDIAN - unsigned char significant2 = mem2; - unsigned char significant1 = mem1; - unsigned char significant0 = mem0; -#else - unsigned char significant2 = mem0; - unsigned char significant1 = mem1; - unsigned char significant0 = mem2; -#endif - return static_cast(significant0 | // - (significant1 << (len / 2 * 8)) | // - (significant2 << ((len - 1) * 8))); - } - - ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t state, uint64_t v) { - using MultType = - absl::conditional_t; - // We do the addition in 64-bit space to make sure the 128-bit - // multiplication is fast. If we were to do it as MultType the compiler has - // to assume that the high word is non-zero and needs to perform 2 - // multiplications instead of one. - MultType m = state + v; - m *= kMul; - return static_cast(m ^ (m >> (sizeof(m) * 8 / 2))); - } - - // An extern to avoid bloat on a direct call to Wyhash() with fixed values for - // both the seed and salt parameters. - static uint64_t WyhashImpl(const unsigned char* data, size_t len); - - ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Hash64(const unsigned char* data, - size_t len) { -#ifdef ABSL_HAVE_INTRINSIC_INT128 - return WyhashImpl(data, len); -#else - return absl::hash_internal::CityHash64(reinterpret_cast(data), len); -#endif - } - - // Seed() - // - // A non-deterministic seed. - // - // The current purpose of this seed is to generate non-deterministic results - // and prevent having users depend on the particular hash values. - // It is not meant as a security feature right now, but it leaves the door - // open to upgrade it to a true per-process random seed. A true random seed - // costs more and we don't need to pay for that right now. - // - // On platforms with ASLR, we take advantage of it to make a per-process - // random value. - // See https://en.wikipedia.org/wiki/Address_space_layout_randomization - // - // On other platforms this is still going to be non-deterministic but most - // probably per-build and not per-process. - ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Seed() { -#if (!defined(__clang__) || __clang_major__ > 11) && \ - !defined(__apple_build_version__) - return static_cast(reinterpret_cast(&kSeed)); -#else - // Workaround the absence of - // https://github.com/llvm/llvm-project/commit/bc15bf66dcca76cc06fe71fca35b74dc4d521021. - return static_cast(reinterpret_cast(kSeed)); -#endif - } - static const void* const kSeed; - - uint64_t state_; -}; - -// HashState::CombineContiguousImpl() -inline uint64_t HashState::CombineContiguousImpl( - uint64_t state, const unsigned char* first, size_t len, - std::integral_constant /* sizeof_size_t */) { - // For large values we use CityHash, for small ones we just use a - // multiplicative hash. - uint64_t v; - if (len > 8) { - if (ABSL_PREDICT_FALSE(len > PiecewiseChunkSize())) { - return CombineLargeContiguousImpl32(state, first, len); - } - v = absl::hash_internal::CityHash32(reinterpret_cast(first), len); - } else if (len >= 4) { - v = Read4To8(first, len); - } else if (len > 0) { - v = Read1To3(first, len); - } else { - // Empty ranges have no effect. - return state; - } - return Mix(state, v); -} - -// Overload of HashState::CombineContiguousImpl() -inline uint64_t HashState::CombineContiguousImpl( - uint64_t state, const unsigned char* first, size_t len, - std::integral_constant /* sizeof_size_t */) { - // For large values we use Wyhash or CityHash depending on the platform, for - // small ones we just use a multiplicative hash. - uint64_t v; - if (len > 16) { - if (ABSL_PREDICT_FALSE(len > PiecewiseChunkSize())) { - return CombineLargeContiguousImpl64(state, first, len); - } - v = Hash64(first, len); - } else if (len > 8) { - auto p = Read9To16(first, len); - state = Mix(state, p.first); - v = p.second; - } else if (len >= 4) { - v = Read4To8(first, len); - } else if (len > 0) { - v = Read1To3(first, len); - } else { - // Empty ranges have no effect. - return state; - } - return Mix(state, v); -} - -struct AggregateBarrier {}; - -// HashImpl - -// Add a private base class to make sure this type is not an aggregate. -// Aggregates can be aggregate initialized even if the default constructor is -// deleted. -struct PoisonedHash : private AggregateBarrier { - PoisonedHash() = delete; - PoisonedHash(const PoisonedHash&) = delete; - PoisonedHash& operator=(const PoisonedHash&) = delete; -}; - -template -struct HashImpl { - size_t operator()(const T& value) const { return HashState::hash(value); } -}; - -template -struct Hash - : absl::conditional_t::value, HashImpl, PoisonedHash> {}; - -template -template -H HashStateBase::combine(H state, const T& value, const Ts&... values) { - return H::combine(hash_internal::HashSelect::template Apply::Invoke( - std::move(state), value), - values...); -} - -// HashStateBase::combine_contiguous() -template -template -H HashStateBase::combine_contiguous(H state, const T* data, size_t size) { - return hash_internal::hash_range_or_bytes(std::move(state), data, size); -} - -// HashStateBase::PiecewiseCombiner::add_buffer() -template -H PiecewiseCombiner::add_buffer(H state, const unsigned char* data, - size_t size) { - if (position_ + size < PiecewiseChunkSize()) { - // This partial chunk does not fill our existing buffer - memcpy(buf_ + position_, data, size); - position_ += size; - return state; - } - - // If the buffer is partially filled we need to complete the buffer - // and hash it. - if (position_ != 0) { - const size_t bytes_needed = PiecewiseChunkSize() - position_; - memcpy(buf_ + position_, data, bytes_needed); - state = H::combine_contiguous(std::move(state), buf_, PiecewiseChunkSize()); - data += bytes_needed; - size -= bytes_needed; - } - - // Hash whatever chunks we can without copying - while (size >= PiecewiseChunkSize()) { - state = H::combine_contiguous(std::move(state), data, PiecewiseChunkSize()); - data += PiecewiseChunkSize(); - size -= PiecewiseChunkSize(); - } - // Fill the buffer with the remainder - memcpy(buf_, data, size); - position_ = size; - return state; -} - -// HashStateBase::PiecewiseCombiner::finalize() -template -H PiecewiseCombiner::finalize(H state) { - // Hash the remainder left in the buffer, which may be empty - return H::combine_contiguous(std::move(state), buf_, position_); -} - -} // namespace hash_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_HASH_INTERNAL_HASH_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/hash/internal/spy_hash_state.h b/client/webrtc/webrtc_demo/third/include/absl/hash/internal/spy_hash_state.h deleted file mode 100644 index c083120..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/hash/internal/spy_hash_state.h +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2018 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_HASH_INTERNAL_SPY_HASH_STATE_H_ -#define ABSL_HASH_INTERNAL_SPY_HASH_STATE_H_ - -#include -#include -#include - -#include "absl/hash/hash.h" -#include "absl/strings/match.h" -#include "absl/strings/str_format.h" -#include "absl/strings/str_join.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace hash_internal { - -// SpyHashState is an implementation of the HashState API that simply -// accumulates all input bytes in an internal buffer. This makes it useful -// for testing AbslHashValue overloads (so long as they are templated on the -// HashState parameter), since it can report the exact hash representation -// that the AbslHashValue overload produces. -// -// Sample usage: -// EXPECT_EQ(SpyHashState::combine(SpyHashState(), foo), -// SpyHashState::combine(SpyHashState(), bar)); -template -class SpyHashStateImpl : public HashStateBase> { - public: - SpyHashStateImpl() : error_(std::make_shared>()) { - static_assert(std::is_void::value, ""); - } - - // Move-only - SpyHashStateImpl(const SpyHashStateImpl&) = delete; - SpyHashStateImpl& operator=(const SpyHashStateImpl&) = delete; - - SpyHashStateImpl(SpyHashStateImpl&& other) noexcept { - *this = std::move(other); - } - - SpyHashStateImpl& operator=(SpyHashStateImpl&& other) noexcept { - hash_representation_ = std::move(other.hash_representation_); - error_ = other.error_; - moved_from_ = other.moved_from_; - other.moved_from_ = true; - return *this; - } - - template - SpyHashStateImpl(SpyHashStateImpl&& other) { // NOLINT - hash_representation_ = std::move(other.hash_representation_); - error_ = other.error_; - moved_from_ = other.moved_from_; - other.moved_from_ = true; - } - - template - static SpyHashStateImpl combine(SpyHashStateImpl s, const A& a, - const Args&... args) { - // Pass an instance of SpyHashStateImpl when trying to combine `A`. This - // allows us to test that the user only uses this instance for combine calls - // and does not call AbslHashValue directly. - // See AbslHashValue implementation at the bottom. - s = SpyHashStateImpl::HashStateBase::combine(std::move(s), a); - return SpyHashStateImpl::combine(std::move(s), args...); - } - static SpyHashStateImpl combine(SpyHashStateImpl s) { - if (direct_absl_hash_value_error_) { - *s.error_ = "AbslHashValue should not be invoked directly."; - } else if (s.moved_from_) { - *s.error_ = "Used moved-from instance of the hash state object."; - } - return s; - } - - static void SetDirectAbslHashValueError() { - direct_absl_hash_value_error_ = true; - } - - // Two SpyHashStateImpl objects are equal if they hold equal hash - // representations. - friend bool operator==(const SpyHashStateImpl& lhs, - const SpyHashStateImpl& rhs) { - return lhs.hash_representation_ == rhs.hash_representation_; - } - - friend bool operator!=(const SpyHashStateImpl& lhs, - const SpyHashStateImpl& rhs) { - return !(lhs == rhs); - } - - enum class CompareResult { - kEqual, - kASuffixB, - kBSuffixA, - kUnequal, - }; - - static CompareResult Compare(const SpyHashStateImpl& a, - const SpyHashStateImpl& b) { - const std::string a_flat = absl::StrJoin(a.hash_representation_, ""); - const std::string b_flat = absl::StrJoin(b.hash_representation_, ""); - if (a_flat == b_flat) return CompareResult::kEqual; - if (absl::EndsWith(a_flat, b_flat)) return CompareResult::kBSuffixA; - if (absl::EndsWith(b_flat, a_flat)) return CompareResult::kASuffixB; - return CompareResult::kUnequal; - } - - // operator<< prints the hash representation as a hex and ASCII dump, to - // facilitate debugging. - friend std::ostream& operator<<(std::ostream& out, - const SpyHashStateImpl& hash_state) { - out << "[\n"; - for (auto& s : hash_state.hash_representation_) { - size_t offset = 0; - for (char c : s) { - if (offset % 16 == 0) { - out << absl::StreamFormat("\n0x%04x: ", offset); - } - if (offset % 2 == 0) { - out << " "; - } - out << absl::StreamFormat("%02x", c); - ++offset; - } - out << "\n"; - } - return out << "]"; - } - - // The base case of the combine recursion, which writes raw bytes into the - // internal buffer. - static SpyHashStateImpl combine_contiguous(SpyHashStateImpl hash_state, - const unsigned char* begin, - size_t size) { - const size_t large_chunk_stride = PiecewiseChunkSize(); - if (size > large_chunk_stride) { - // Combining a large contiguous buffer must have the same effect as - // doing it piecewise by the stride length, followed by the (possibly - // empty) remainder. - while (size >= large_chunk_stride) { - hash_state = SpyHashStateImpl::combine_contiguous( - std::move(hash_state), begin, large_chunk_stride); - begin += large_chunk_stride; - size -= large_chunk_stride; - } - } - - hash_state.hash_representation_.emplace_back( - reinterpret_cast(begin), size); - return hash_state; - } - - using SpyHashStateImpl::HashStateBase::combine_contiguous; - - absl::optional error() const { - if (moved_from_) { - return "Returned a moved-from instance of the hash state object."; - } - return *error_; - } - - private: - template - friend class SpyHashStateImpl; - - // This is true if SpyHashStateImpl has been passed to a call of - // AbslHashValue with the wrong type. This detects that the user called - // AbslHashValue directly (because the hash state type does not match). - static bool direct_absl_hash_value_error_; - - std::vector hash_representation_; - // This is a shared_ptr because we want all instances of the particular - // SpyHashState run to share the field. This way we can set the error for - // use-after-move and all the copies will see it. - std::shared_ptr> error_; - bool moved_from_ = false; -}; - -template -bool SpyHashStateImpl::direct_absl_hash_value_error_; - -template -struct OdrUse { - constexpr OdrUse() {} - bool& b = B; -}; - -template -struct RunOnStartup { - static bool run; - static constexpr OdrUse kOdrUse{}; -}; - -template -bool RunOnStartup::run = (f(), true); - -template < - typename T, typename U, - // Only trigger for when (T != U), - typename = absl::enable_if_t::value>, - // This statement works in two ways: - // - First, it instantiates RunOnStartup and forces the initialization of - // `run`, which set the global variable. - // - Second, it triggers a SFINAE error disabling the overload to prevent - // compile time errors. If we didn't disable the overload we would get - // ambiguous overload errors, which we don't want. - int = RunOnStartup::SetDirectAbslHashValueError>::run> -void AbslHashValue(SpyHashStateImpl, const U&); - -using SpyHashState = SpyHashStateImpl; - -} // namespace hash_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_HASH_INTERNAL_SPY_HASH_STATE_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/hash/internal/wyhash.h b/client/webrtc/webrtc_demo/third/include/absl/hash/internal/wyhash.h deleted file mode 100644 index 4aff4e9..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/hash/internal/wyhash.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2020 The Abseil Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// This file provides the Google-internal implementation of the Wyhash -// algorithm. -// -// Wyhash is a fast hash function for hash tables, the fastest we've currently -// (late 2020) found that passes the SMHasher tests. The algorithm relies on -// intrinsic 128-bit multiplication for speed. This is not meant to be secure - -// just fast. - -#ifndef ABSL_HASH_INTERNAL_WYHASH_H_ -#define ABSL_HASH_INTERNAL_WYHASH_H_ - -#include -#include - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace hash_internal { - -// Hash function for a byte array. A 64-bit seed and a set of five 64-bit -// integers are hashed into the result. -// -// To allow all hashable types (including string_view and Span) to depend on -// this algoritm, we keep the API low-level, with as few dependencies as -// possible. -uint64_t Wyhash(const void* data, size_t len, uint64_t seed, - const uint64_t salt[5]); - -} // namespace hash_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_HASH_INTERNAL_WYHASH_H_ diff --git a/client/webrtc/webrtc_demo/third/include/absl/memory/memory.h b/client/webrtc/webrtc_demo/third/include/absl/memory/memory.h deleted file mode 100644 index 2b5ff62..0000000 --- a/client/webrtc/webrtc_demo/third/include/absl/memory/memory.h +++ /dev/null @@ -1,699 +0,0 @@ -// Copyright 2017 The Abseil Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// ----------------------------------------------------------------------------- -// File: memory.h -// ----------------------------------------------------------------------------- -// -// This header file contains utility functions for managing the creation and -// conversion of smart pointers. This file is an extension to the C++ -// standard library header file. - -#ifndef ABSL_MEMORY_MEMORY_H_ -#define ABSL_MEMORY_MEMORY_H_ - -#include -#include -#include -#include -#include -#include - -#include "absl/base/macros.h" -#include "absl/meta/type_traits.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN - -// ----------------------------------------------------------------------------- -// Function Template: WrapUnique() -// ----------------------------------------------------------------------------- -// -// Adopts ownership from a raw pointer and transfers it to the returned -// `std::unique_ptr`, whose type is deduced. Because of this deduction, *do not* -// specify the template type `T` when calling `WrapUnique`. -// -// Example: -// X* NewX(int, int); -// auto x = WrapUnique(NewX(1, 2)); // 'x' is std::unique_ptr. -// -// Do not call WrapUnique with an explicit type, as in -// `WrapUnique(NewX(1, 2))`. The purpose of WrapUnique is to automatically -// deduce the pointer type. If you wish to make the type explicit, just use -// `std::unique_ptr` directly. -// -// auto x = std::unique_ptr(NewX(1, 2)); -// - or - -// std::unique_ptr x(NewX(1, 2)); -// -// While `absl::WrapUnique` is useful for capturing the output of a raw -// pointer factory, prefer 'absl::make_unique(args...)' over -// 'absl::WrapUnique(new T(args...))'. -// -// auto x = WrapUnique(new X(1, 2)); // works, but nonideal. -// auto x = make_unique(1, 2); // safer, standard, avoids raw 'new'. -// -// Note that `absl::WrapUnique(p)` is valid only if `delete p` is a valid -// expression. In particular, `absl::WrapUnique()` cannot wrap pointers to -// arrays, functions or void, and it must not be used to capture pointers -// obtained from array-new expressions (even though that would compile!). -template -std::unique_ptr WrapUnique(T* ptr) { - static_assert(!std::is_array::value, "array types are unsupported"); - static_assert(std::is_object::value, "non-object types are unsupported"); - return std::unique_ptr(ptr); -} - -namespace memory_internal { - -// Traits to select proper overload and return type for `absl::make_unique<>`. -template -struct MakeUniqueResult { - using scalar = std::unique_ptr; -}; -template -struct MakeUniqueResult { - using array = std::unique_ptr; -}; -template -struct MakeUniqueResult { - using invalid = void; -}; - -} // namespace memory_internal - -// gcc 4.8 has __cplusplus at 201301 but the libstdc++ shipped with it doesn't -// define make_unique. Other supported compilers either just define __cplusplus -// as 201103 but have make_unique (msvc), or have make_unique whenever -// __cplusplus > 201103 (clang). -#if (__cplusplus > 201103L || defined(_MSC_VER)) && \ - !(defined(__GLIBCXX__) && !defined(__cpp_lib_make_unique)) -using std::make_unique; -#else -// ----------------------------------------------------------------------------- -// Function Template: make_unique() -// ----------------------------------------------------------------------------- -// -// Creates a `std::unique_ptr<>`, while avoiding issues creating temporaries -// during the construction process. `absl::make_unique<>` also avoids redundant -// type declarations, by avoiding the need to explicitly use the `new` operator. -// -// This implementation of `absl::make_unique<>` is designed for C++11 code and -// will be replaced in C++14 by the equivalent `std::make_unique<>` abstraction. -// `absl::make_unique<>` is designed to be 100% compatible with -// `std::make_unique<>` so that the eventual migration will involve a simple -// rename operation. -// -// For more background on why `std::unique_ptr(new T(a,b))` is problematic, -// see Herb Sutter's explanation on -// (Exception-Safe Function Calls)[https://herbsutter.com/gotw/_102/]. -// (In general, reviewers should treat `new T(a,b)` with scrutiny.) -// -// Example usage: -// -// auto p = make_unique(args...); // 'p' is a std::unique_ptr -// auto pa = make_unique(5); // 'pa' is a std::unique_ptr -// -// Three overloads of `absl::make_unique` are required: -// -// - For non-array T: -// -// Allocates a T with `new T(std::forward args...)`, -// forwarding all `args` to T's constructor. -// Returns a `std::unique_ptr` owning that object. -// -// - For an array of unknown bounds T[]: -// -// `absl::make_unique<>` will allocate an array T of type U[] with -// `new U[n]()` and return a `std::unique_ptr` owning that array. -// -// Note that 'U[n]()' is different from 'U[n]', and elements will be -// value-initialized. Note as well that `std::unique_ptr` will perform its -// own destruction of the array elements upon leaving scope, even though -// the array [] does not have a default destructor. -// -// NOTE: an array of unknown bounds T[] may still be (and often will be) -// initialized to have a size, and will still use this overload. E.g: -// -// auto my_array = absl::make_unique(10); -// -// - For an array of known bounds T[N]: -// -// `absl::make_unique<>` is deleted (like with `std::make_unique<>`) as -// this overload is not useful. -// -// NOTE: an array of known bounds T[N] is not considered a useful -// construction, and may cause undefined behavior in templates. E.g: -// -// auto my_array = absl::make_unique(); -// -// In those cases, of course, you can still use the overload above and -// simply initialize it to its desired size: -// -// auto my_array = absl::make_unique(10); - -// `absl::make_unique` overload for non-array types. -template -typename memory_internal::MakeUniqueResult::scalar make_unique( - Args&&... args) { - return std::unique_ptr(new T(std::forward(args)...)); -} - -// `absl::make_unique` overload for an array T[] of unknown bounds. -// The array allocation needs to use the `new T[size]` form and cannot take -// element constructor arguments. The `std::unique_ptr` will manage destructing -// these array elements. -template -typename memory_internal::MakeUniqueResult::array make_unique(size_t n) { - return std::unique_ptr(new typename absl::remove_extent_t[n]()); -} - -// `absl::make_unique` overload for an array T[N] of known bounds. -// This construction will be rejected. -template -typename memory_internal::MakeUniqueResult::invalid make_unique( - Args&&... /* args */) = delete; -#endif - -// ----------------------------------------------------------------------------- -// Function Template: RawPtr() -// ----------------------------------------------------------------------------- -// -// Extracts the raw pointer from a pointer-like value `ptr`. `absl::RawPtr` is -// useful within templates that need to handle a complement of raw pointers, -// `std::nullptr_t`, and smart pointers. -template -auto RawPtr(T&& ptr) -> decltype(std::addressof(*ptr)) { - // ptr is a forwarding reference to support Ts with non-const operators. - return (ptr != nullptr) ? std::addressof(*ptr) : nullptr; -} -inline std::nullptr_t RawPtr(std::nullptr_t) { return nullptr; } - -// ----------------------------------------------------------------------------- -// Function Template: ShareUniquePtr() -// ----------------------------------------------------------------------------- -// -// Adopts a `std::unique_ptr` rvalue and returns a `std::shared_ptr` of deduced -// type. Ownership (if any) of the held value is transferred to the returned -// shared pointer. -// -// Example: -// -// auto up = absl::make_unique(10); -// auto sp = absl::ShareUniquePtr(std::move(up)); // shared_ptr -// CHECK_EQ(*sp, 10); -// CHECK(up == nullptr); -// -// Note that this conversion is correct even when T is an array type, and more -// generally it works for *any* deleter of the `unique_ptr` (single-object -// deleter, array deleter, or any custom deleter), since the deleter is adopted -// by the shared pointer as well. The deleter is copied (unless it is a -// reference). -// -// Implements the resolution of [LWG 2415](http://wg21.link/lwg2415), by which a -// null shared pointer does not attempt to call the deleter. -template -std::shared_ptr ShareUniquePtr(std::unique_ptr&& ptr) { - return ptr ? std::shared_ptr(std::move(ptr)) : std::shared_ptr(); -} - -// ----------------------------------------------------------------------------- -// Function Template: WeakenPtr() -// ----------------------------------------------------------------------------- -// -// Creates a weak pointer associated with a given shared pointer. The returned -// value is a `std::weak_ptr` of deduced type. -// -// Example: -// -// auto sp = std::make_shared(10); -// auto wp = absl::WeakenPtr(sp); -// CHECK_EQ(sp.get(), wp.lock().get()); -// sp.reset(); -// CHECK(wp.lock() == nullptr); -// -template -std::weak_ptr WeakenPtr(const std::shared_ptr& ptr) { - return std::weak_ptr(ptr); -} - -namespace memory_internal { - -// ExtractOr::type evaluates to E if possible. Otherwise, D. -template