147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/* 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Copyright 2006 The WebRTC Project Authors. All rights reserved. 347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * 447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Use of this source code is governed by a BSD-style license 547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * in the file PATENTS. All contributing project authors may 847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */ 1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef WEBRTC_BASE_SIGSLOTREPEATER_H__ 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define WEBRTC_BASE_SIGSLOTREPEATER_H__ 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// repeaters are both signals and slots, which are designed as intermediate 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// pass-throughs for signals and slots which don't know about each other (for 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// modularity or encapsulation). This eliminates the need to declare a signal 1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// handler whose sole purpose is to fire another signal. The repeater connects 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// to the originating signal using the 'repeat' method. When the repeated 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// signal fires, the repeater will also fire. 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/sigslot.h" 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace sigslot { 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org template<class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org class repeater0 : public signal0<mt_policy>, 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public has_slots<mt_policy> 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef signal0<mt_policy> base_type; 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef repeater0<mt_policy> this_type; 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org repeater0() { } 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org repeater0(const this_type& s) : base_type(s) { } 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void reemit() { signal0<mt_policy>::emit(); } 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void repeat(base_type &s) { s.connect(this, &this_type::reemit); } 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void stop(base_type &s) { s.disconnect(this); } 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org }; 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org template<class arg1_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org class repeater1 : public signal1<arg1_type, mt_policy>, 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public has_slots<mt_policy> 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef signal1<arg1_type, mt_policy> base_type; 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef repeater1<arg1_type, mt_policy> this_type; 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org repeater1() { } 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org repeater1(const this_type& s) : base_type(s) { } 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void reemit(arg1_type a1) { signal1<arg1_type, mt_policy>::emit(a1); } 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void repeat(base_type& s) { s.connect(this, &this_type::reemit); } 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void stop(base_type &s) { s.disconnect(this); } 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org }; 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org template<class arg1_type, class arg2_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org class repeater2 : public signal2<arg1_type, arg2_type, mt_policy>, 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public has_slots<mt_policy> 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef signal2<arg1_type, arg2_type, mt_policy> base_type; 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef repeater2<arg1_type, arg2_type, mt_policy> this_type; 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org repeater2() { } 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org repeater2(const this_type& s) : base_type(s) { } 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void reemit(arg1_type a1, arg2_type a2) { signal2<arg1_type, arg2_type, mt_policy>::emit(a1,a2); } 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void repeat(base_type& s) { s.connect(this, &this_type::reemit); } 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void stop(base_type &s) { s.disconnect(this); } 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org }; 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org template<class arg1_type, class arg2_type, class arg3_type, 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org class repeater3 : public signal3<arg1_type, arg2_type, arg3_type, mt_policy>, 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public has_slots<mt_policy> 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org { 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef signal3<arg1_type, arg2_type, arg3_type, mt_policy> base_type; 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org typedef repeater3<arg1_type, arg2_type, arg3_type, mt_policy> this_type; 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org repeater3() { } 8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org repeater3(const this_type& s) : base_type(s) { } 8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void reemit(arg1_type a1, arg2_type a2, arg3_type a3) { 8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org signal3<arg1_type, arg2_type, arg3_type, mt_policy>::emit(a1,a2,a3); 8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void repeat(base_type& s) { s.connect(this, &this_type::reemit); } 8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void stop(base_type &s) { s.disconnect(this); } 9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org }; 9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} // namespace sigslot 9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif // WEBRTC_BASE_SIGSLOTREPEATER_H__ 95