blob: ac947e2258cde221008244020a46a291667a716e [file] [log] [blame]
Karl Wiberg3d452cf2020-09-11 16:09:46 +02001/*
2 * Copyright 2020 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei3d259352020-10-23 12:04:40 +020011#include "rtc_base/callback_list.h"
Karl Wiberg3d452cf2020-09-11 16:09:46 +020012
Karl Wiberg01a36f32020-11-11 11:48:04 +010013#include "rtc_base/checks.h"
14
Karl Wiberg3d452cf2020-09-11 16:09:46 +020015namespace webrtc {
Mirko Bonadei3d259352020-10-23 12:04:40 +020016namespace callback_list_impl {
Karl Wiberg3d452cf2020-09-11 16:09:46 +020017
Mirko Bonadei3d259352020-10-23 12:04:40 +020018CallbackListReceivers::CallbackListReceivers() = default;
Karl Wiberg01a36f32020-11-11 11:48:04 +010019
20CallbackListReceivers::~CallbackListReceivers() {
21 RTC_CHECK(!send_in_progress_);
22}
Karl Wiberg3d452cf2020-09-11 16:09:46 +020023
Mirko Bonadei3d259352020-10-23 12:04:40 +020024void CallbackListReceivers::Foreach(
Karl Wiberg3d452cf2020-09-11 16:09:46 +020025 rtc::FunctionView<void(UntypedFunction&)> fv) {
Karl Wiberg01a36f32020-11-11 11:48:04 +010026 RTC_CHECK(!send_in_progress_);
27 send_in_progress_ = true;
Karl Wiberg3d452cf2020-09-11 16:09:46 +020028 for (auto& r : receivers_) {
29 fv(r);
30 }
Karl Wiberg01a36f32020-11-11 11:48:04 +010031 send_in_progress_ = false;
Karl Wiberg3d452cf2020-09-11 16:09:46 +020032}
33
Mirko Bonadei3d259352020-10-23 12:04:40 +020034template void CallbackListReceivers::AddReceiver(
Karl Wibergd2c69672020-09-29 13:55:13 +020035 UntypedFunction::TrivialUntypedFunctionArgs<1>);
Mirko Bonadei3d259352020-10-23 12:04:40 +020036template void CallbackListReceivers::AddReceiver(
Karl Wibergd2c69672020-09-29 13:55:13 +020037 UntypedFunction::TrivialUntypedFunctionArgs<2>);
Mirko Bonadei3d259352020-10-23 12:04:40 +020038template void CallbackListReceivers::AddReceiver(
Karl Wibergd2c69672020-09-29 13:55:13 +020039 UntypedFunction::TrivialUntypedFunctionArgs<3>);
Mirko Bonadei3d259352020-10-23 12:04:40 +020040template void CallbackListReceivers::AddReceiver(
Karl Wibergd2c69672020-09-29 13:55:13 +020041 UntypedFunction::TrivialUntypedFunctionArgs<4>);
Mirko Bonadei3d259352020-10-23 12:04:40 +020042template void CallbackListReceivers::AddReceiver(
Karl Wibergd2c69672020-09-29 13:55:13 +020043 UntypedFunction::NontrivialUntypedFunctionArgs);
Mirko Bonadei3d259352020-10-23 12:04:40 +020044template void CallbackListReceivers::AddReceiver(
Karl Wibergd2c69672020-09-29 13:55:13 +020045 UntypedFunction::FunctionPointerUntypedFunctionArgs);
46
Mirko Bonadei3d259352020-10-23 12:04:40 +020047} // namespace callback_list_impl
Karl Wiberg3d452cf2020-09-11 16:09:46 +020048} // namespace webrtc