1
// sigslot.h: Signal/Slot classes
3
// Written by Sarah Thompson (sarah@telergy.com) 2002.
5
// License: Public domain. You are free to use this code however you like, with the proviso that
6
// the author takes on no responsibility or liability for any use.
10
// (see also the full documentation at http://sigslot.sourceforge.net/)
13
// SIGSLOT_PURE_ISO - Define this to force ISO C++ compliance. This also disables
14
// all of the thread safety support on platforms where it is
17
// SIGSLOT_USE_POSIX_THREADS - Force use of Posix threads when using a C++ compiler other than
18
// gcc on a platform that supports Posix threads. (When using gcc,
19
// this is the default - use SIGSLOT_PURE_ISO to disable this if
22
// SIGSLOT_DEFAULT_MT_POLICY - Where thread support is enabled, this defaults to multi_threaded_global.
23
// Otherwise, the default is single_threaded. #define this yourself to
24
// override the default. In pure ISO mode, anything other than
25
// single_threaded will cause a compiler error.
29
// Win32 - On Win32, the WIN32 symbol must be #defined. Most mainstream
30
// compilers do this by default, but you may need to define it
31
// yourself if your build environment is less standard. This causes
32
// the Win32 thread support to be compiled in and used automatically.
34
// Unix/Linux/BSD, etc. - If you're using gcc, it is assumed that you have Posix threads
35
// available, so they are used automatically. You can override this
36
// (as under Windows) with the SIGSLOT_PURE_ISO switch. If you're using
37
// something other than gcc but still want to use Posix threads, you
38
// need to #define SIGSLOT_USE_POSIX_THREADS.
40
// ISO C++ - If none of the supported platforms are detected, or if
41
// SIGSLOT_PURE_ISO is defined, all multithreading support is turned off,
42
// along with any code that might cause a pure ISO C++ environment to
43
// complain. Before you ask, gcc -ansi -pedantic won't compile this
44
// library, but gcc -ansi is fine. Pedantic mode seems to throw a lot of
45
// errors that aren't really there. If you feel like investigating this,
46
// please contact the author.
51
// single_threaded - Your program is assumed to be single threaded from the point of view
52
// of signal/slot usage (i.e. all objects using signals and slots are
53
// created and destroyed from a single thread). Behaviour if objects are
54
// destroyed concurrently is undefined (i.e. you'll get the occasional
55
// segmentation fault/memory exception).
57
// multi_threaded_global - Your program is assumed to be multi threaded. Objects using signals and
58
// slots can be safely created and destroyed from any thread, even when
59
// connections exist. In multi_threaded_global mode, this is achieved by a
60
// single global mutex (actually a critical section on Windows because they
61
// are faster). This option uses less OS resources, but results in more
62
// opportunities for contention, possibly resulting in more context switches
63
// than are strictly necessary.
65
// multi_threaded_local - Behaviour in this mode is essentially the same as multi_threaded_global,
66
// except that each signal, and each object that inherits has_slots, all
67
// have their own mutex/critical section. In practice, this means that
68
// mutex collisions (and hence context switches) only happen if they are
69
// absolutely essential. However, on some platforms, creating a lot of
70
// mutexes can slow down the whole OS, so use this option with care.
74
// See the full documentation at http://sigslot.sourceforge.net/
84
#if defined(SIGSLOT_PURE_ISO) || (!defined(WIN32) && !defined(__GNUG__) && !defined(SIGSLOT_USE_POSIX_THREADS))
85
# define _SIGSLOT_SINGLE_THREADED
87
# define _SIGSLOT_HAS_WIN32_THREADS
89
#elif defined(__GNUG__) || defined(SIGSLOT_USE_POSIX_THREADS)
90
# define _SIGSLOT_HAS_POSIX_THREADS
93
# define _SIGSLOT_SINGLE_THREADED
96
#ifndef SIGSLOT_DEFAULT_MT_POLICY
97
# ifdef _SIGSLOT_SINGLE_THREADED
98
# define SIGSLOT_DEFAULT_MT_POLICY single_threaded
100
# define SIGSLOT_DEFAULT_MT_POLICY multi_threaded_local
108
class MYGUI_EXPORT_DLL single_threaded
115
virtual ~single_threaded()
123
virtual void unlock()
128
#ifdef _SIGSLOT_HAS_WIN32_THREADS
129
// The multi threading policies only get compiled in if they are enabled.
130
class MYGUI_EXPORT_DLL multi_threaded_global
133
multi_threaded_global()
135
static bool isinitialised = false;
139
InitializeCriticalSection(get_critsec());
140
isinitialised = true;
144
multi_threaded_global(const multi_threaded_global&)
148
virtual ~multi_threaded_global()
154
EnterCriticalSection(get_critsec());
157
virtual void unlock()
159
LeaveCriticalSection(get_critsec());
163
CRITICAL_SECTION* get_critsec()
165
static CRITICAL_SECTION g_critsec;
170
class MYGUI_EXPORT_DLL multi_threaded_local
173
multi_threaded_local()
175
InitializeCriticalSection(&m_critsec);
178
multi_threaded_local(const multi_threaded_local&)
180
InitializeCriticalSection(&m_critsec);
183
virtual ~multi_threaded_local()
185
DeleteCriticalSection(&m_critsec);
190
EnterCriticalSection(&m_critsec);
193
virtual void unlock()
195
LeaveCriticalSection(&m_critsec);
199
CRITICAL_SECTION m_critsec;
203
#ifdef _SIGSLOT_HAS_POSIX_THREADS
204
// The multi threading policies only get compiled in if they are enabled.
205
class MYGUI_EXPORT_DLL multi_threaded_global
208
multi_threaded_global()
210
pthread_mutex_init(get_mutex(), NULL);
213
multi_threaded_global(const multi_threaded_global&)
217
virtual ~multi_threaded_global()
223
pthread_mutex_lock(get_mutex());
226
virtual void unlock()
228
pthread_mutex_unlock(get_mutex());
232
pthread_mutex_t* get_mutex()
234
static pthread_mutex_t g_mutex;
239
class MYGUI_EXPORT_DLL multi_threaded_local
242
multi_threaded_local()
244
pthread_mutex_init(&m_mutex, NULL);
247
multi_threaded_local(const multi_threaded_local&)
249
pthread_mutex_init(&m_mutex, NULL);
252
virtual ~multi_threaded_local()
254
pthread_mutex_destroy(&m_mutex);
259
pthread_mutex_lock(&m_mutex);
262
virtual void unlock()
264
pthread_mutex_unlock(&m_mutex);
268
pthread_mutex_t m_mutex;
272
template <typename mt_policy>
278
lock_block(mt_policy *mtx) :
290
template <typename mt_policy>
293
template <typename mt_policy>
294
class _connection_base0
297
virtual ~_connection_base0() { }
298
virtual has_slots<mt_policy>* getdest() const = 0;
299
virtual void emit() = 0;
300
virtual bool exist(_connection_base0<mt_policy>* conn) = 0;
301
virtual _connection_base0* clone() = 0;
302
virtual _connection_base0* duplicate(has_slots<mt_policy>* pnewdest) = 0;
305
template <typename arg1_type, typename mt_policy>
306
class _connection_base1
309
virtual ~_connection_base1() { }
310
virtual has_slots<mt_policy>* getdest() const = 0;
311
virtual void emit(arg1_type) = 0;
312
virtual bool exist(_connection_base1<arg1_type, mt_policy>* conn) = 0;
313
virtual _connection_base1<arg1_type, mt_policy>* clone() = 0;
314
virtual _connection_base1<arg1_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0;
317
template <typename arg1_type, typename arg2_type, typename mt_policy>
318
class _connection_base2
321
virtual ~_connection_base2() { }
322
virtual has_slots<mt_policy>* getdest() const = 0;
323
virtual void emit(arg1_type, arg2_type) = 0;
324
virtual bool exist(_connection_base2<arg1_type, arg2_type, mt_policy>* conn) = 0;
325
virtual _connection_base2<arg1_type, arg2_type, mt_policy>* clone() = 0;
326
virtual _connection_base2<arg1_type, arg2_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0;
329
template <typename arg1_type, typename arg2_type, typename arg3_type, typename mt_policy>
330
class _connection_base3
333
virtual ~_connection_base3() { }
334
virtual has_slots<mt_policy>* getdest() const = 0;
335
virtual void emit(arg1_type, arg2_type, arg3_type) = 0;
336
virtual bool exist(_connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* conn) = 0;
337
virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* clone() = 0;
338
virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0;
341
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename mt_policy>
342
class _connection_base4
345
virtual ~_connection_base4() { }
346
virtual has_slots<mt_policy>* getdest() const = 0;
347
virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type) = 0;
348
virtual bool exist(_connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* conn) = 0;
349
virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* clone() = 0;
350
virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0;
353
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename mt_policy>
354
class _connection_base5
357
virtual ~_connection_base5() { }
358
virtual has_slots<mt_policy>* getdest() const = 0;
359
virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type) = 0;
360
virtual bool exist(_connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>* conn) = 0;
361
virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>* clone() = 0;
362
virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0;
365
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename mt_policy>
366
class _connection_base6
369
virtual ~_connection_base6() { }
370
virtual has_slots<mt_policy>* getdest() const = 0;
371
virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type) = 0;
372
virtual bool exist(_connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>* conn) = 0;
373
virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>* clone() = 0;
374
virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0;
377
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename arg7_type, typename mt_policy>
378
class _connection_base7
381
virtual ~_connection_base7() { }
382
virtual has_slots<mt_policy>* getdest() const = 0;
383
virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type) = 0;
384
virtual bool exist(_connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>* conn) = 0;
385
virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>* clone() = 0;
386
virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0;
389
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename arg7_type, typename arg8_type, typename mt_policy>
390
class _connection_base8
393
virtual ~_connection_base8() { }
394
virtual has_slots<mt_policy>* getdest() const = 0;
395
virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type) = 0;
396
virtual bool exist(_connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* conn) = 0;
397
virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* clone() = 0;
398
virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0;
401
template <typename mt_policy>
406
virtual void slot_disconnect(has_slots<mt_policy>* pslot) = 0;
407
virtual void slot_duplicate(const has_slots<mt_policy>* poldslot, has_slots<mt_policy>* pnewslot) = 0;
410
template <typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
411
class MYGUI_EXPORT_DLL has_slots :
415
typedef std::set<_signal_base<mt_policy> *> sender_set;
416
typedef typename sender_set::const_iterator const_iterator;
423
has_slots(const has_slots& hs)
426
lock_block<mt_policy> lockblock(this);
427
const_iterator it = hs.m_senders.begin();
428
const_iterator itEnd = hs.m_senders.end();
432
(*it)->slot_duplicate(&hs, this);
433
m_senders.insert(*it);
438
void signal_connect(_signal_base<mt_policy>* sender)
440
lock_block<mt_policy> lockblock(this);
441
m_senders.insert(sender);
444
void signal_disconnect(_signal_base<mt_policy>* sender)
446
lock_block<mt_policy> lockblock(this);
447
m_senders.erase(sender);
455
void disconnect_all()
457
lock_block<mt_policy> lockblock(this);
458
const_iterator it = m_senders.begin();
459
const_iterator itEnd = m_senders.end();
463
(*it)->slot_disconnect(this);
467
m_senders.erase(m_senders.begin(), m_senders.end());
471
sender_set m_senders;
474
template <typename mt_policy>
475
class _signal_base0 :
476
public _signal_base<mt_policy>
479
typedef std::list<_connection_base0<mt_policy> *> connections_list;
485
_signal_base0(const _signal_base0& s)
486
: _signal_base<mt_policy>(s)
488
lock_block<mt_policy> lockblock(this);
489
typename connections_list::const_iterator it = s.m_connected_slots.begin();
490
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
494
(*it)->getdest()->signal_connect(this);
495
m_connected_slots.push_back((*it)->clone());
506
void disconnect_all()
508
lock_block<mt_policy> lockblock(this);
509
typename connections_list::const_iterator it = m_connected_slots.begin();
510
typename connections_list::const_iterator itEnd = m_connected_slots.end();
514
(*it)->getdest()->signal_disconnect(this);
520
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
523
void disconnect(has_slots<mt_policy>* pclass)
525
lock_block<mt_policy> lockblock(this);
526
typename connections_list::iterator it = m_connected_slots.begin();
527
typename connections_list::iterator itEnd = m_connected_slots.end();
531
if ((*it)->getdest() == pclass)
534
m_connected_slots.erase(it);
535
pclass->signal_disconnect(this);
543
void slot_disconnect(has_slots<mt_policy>* pslot)
545
lock_block<mt_policy> lockblock(this);
546
typename connections_list::iterator it = m_connected_slots.begin();
547
typename connections_list::iterator itEnd = m_connected_slots.end();
551
typename connections_list::iterator itNext = it;
554
if ((*it)->getdest() == pslot)
556
m_connected_slots.erase(it);
564
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
566
lock_block<mt_policy> lockblock(this);
567
typename connections_list::iterator it = m_connected_slots.begin();
568
typename connections_list::iterator itEnd = m_connected_slots.end();
572
if ((*it)->getdest() == oldtarget)
574
m_connected_slots.push_back((*it)->duplicate(newtarget));
582
connections_list m_connected_slots;
585
template <typename arg1_type, typename mt_policy>
586
class _signal_base1 :
587
public _signal_base<mt_policy>
590
typedef std::list<_connection_base1<arg1_type, mt_policy> *> connections_list;
596
_signal_base1(const _signal_base1<arg1_type, mt_policy>& s)
597
: _signal_base<mt_policy>(s)
599
lock_block<mt_policy> lockblock(this);
600
typename connections_list::const_iterator it = s.m_connected_slots.begin();
601
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
605
(*it)->getdest()->signal_connect(this);
606
m_connected_slots.push_back((*it)->clone());
612
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
614
lock_block<mt_policy> lockblock(this);
615
typename connections_list::iterator it = m_connected_slots.begin();
616
typename connections_list::iterator itEnd = m_connected_slots.end();
620
if ((*it)->getdest() == oldtarget)
622
m_connected_slots.push_back((*it)->duplicate(newtarget));
634
void disconnect_all()
636
lock_block<mt_policy> lockblock(this);
637
typename connections_list::const_iterator it = m_connected_slots.begin();
638
typename connections_list::const_iterator itEnd = m_connected_slots.end();
642
(*it)->getdest()->signal_disconnect(this);
648
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
651
void disconnect(has_slots<mt_policy>* pclass)
653
lock_block<mt_policy> lockblock(this);
654
typename connections_list::iterator it = m_connected_slots.begin();
655
typename connections_list::iterator itEnd = m_connected_slots.end();
659
if ((*it)->getdest() == pclass)
662
m_connected_slots.erase(it);
663
pclass->signal_disconnect(this);
671
void slot_disconnect(has_slots<mt_policy>* pslot)
673
lock_block<mt_policy> lockblock(this);
674
typename connections_list::iterator it = m_connected_slots.begin();
675
typename connections_list::iterator itEnd = m_connected_slots.end();
679
typename connections_list::iterator itNext = it;
682
if ((*it)->getdest() == pslot)
684
m_connected_slots.erase(it);
694
connections_list m_connected_slots;
697
template <typename arg1_type, typename arg2_type, typename mt_policy>
698
class _signal_base2 :
699
public _signal_base<mt_policy>
702
typedef std::list<_connection_base2<arg1_type, arg2_type, mt_policy> *> connections_list;
708
_signal_base2(const _signal_base2<arg1_type, arg2_type, mt_policy>& s)
709
: _signal_base<mt_policy>(s)
711
lock_block<mt_policy> lockblock(this);
712
typename connections_list::const_iterator it = s.m_connected_slots.begin();
713
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
717
(*it)->getdest()->signal_connect(this);
718
m_connected_slots.push_back((*it)->clone());
724
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
726
lock_block<mt_policy> lockblock(this);
727
typename connections_list::iterator it = m_connected_slots.begin();
728
typename connections_list::iterator itEnd = m_connected_slots.end();
732
if ((*it)->getdest() == oldtarget)
734
m_connected_slots.push_back((*it)->duplicate(newtarget));
746
void disconnect_all()
748
lock_block<mt_policy> lockblock(this);
749
typename connections_list::const_iterator it = m_connected_slots.begin();
750
typename connections_list::const_iterator itEnd = m_connected_slots.end();
754
(*it)->getdest()->signal_disconnect(this);
760
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
763
void disconnect(has_slots<mt_policy>* pclass)
765
lock_block<mt_policy> lockblock(this);
766
typename connections_list::iterator it = m_connected_slots.begin();
767
typename connections_list::iterator itEnd = m_connected_slots.end();
771
if ((*it)->getdest() == pclass)
774
m_connected_slots.erase(it);
775
pclass->signal_disconnect(this);
783
void slot_disconnect(has_slots<mt_policy>* pslot)
785
lock_block<mt_policy> lockblock(this);
786
typename connections_list::iterator it = m_connected_slots.begin();
787
typename connections_list::iterator itEnd = m_connected_slots.end();
791
typename connections_list::iterator itNext = it;
794
if ((*it)->getdest() == pslot)
796
m_connected_slots.erase(it);
805
connections_list m_connected_slots;
808
template <typename arg1_type, typename arg2_type, typename arg3_type, typename mt_policy>
809
class _signal_base3 :
810
public _signal_base<mt_policy>
813
typedef std::list<_connection_base3<arg1_type, arg2_type, arg3_type, mt_policy> *> connections_list;
819
_signal_base3(const _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy>& s)
820
: _signal_base<mt_policy>(s)
822
lock_block<mt_policy> lockblock(this);
823
typename connections_list::const_iterator it = s.m_connected_slots.begin();
824
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
828
(*it)->getdest()->signal_connect(this);
829
m_connected_slots.push_back((*it)->clone());
835
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
837
lock_block<mt_policy> lockblock(this);
838
typename connections_list::iterator it = m_connected_slots.begin();
839
typename connections_list::iterator itEnd = m_connected_slots.end();
843
if ((*it)->getdest() == oldtarget)
845
m_connected_slots.push_back((*it)->duplicate(newtarget));
857
void disconnect_all()
859
lock_block<mt_policy> lockblock(this);
860
typename connections_list::const_iterator it = m_connected_slots.begin();
861
typename connections_list::const_iterator itEnd = m_connected_slots.end();
865
(*it)->getdest()->signal_disconnect(this);
871
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
874
void disconnect(has_slots<mt_policy>* pclass)
876
lock_block<mt_policy> lockblock(this);
877
typename connections_list::iterator it = m_connected_slots.begin();
878
typename connections_list::iterator itEnd = m_connected_slots.end();
882
if ((*it)->getdest() == pclass)
885
m_connected_slots.erase(it);
886
pclass->signal_disconnect(this);
894
void slot_disconnect(has_slots<mt_policy>* pslot)
896
lock_block<mt_policy> lockblock(this);
897
typename connections_list::iterator it = m_connected_slots.begin();
898
typename connections_list::iterator itEnd = m_connected_slots.end();
902
typename connections_list::iterator itNext = it;
905
if ((*it)->getdest() == pslot)
907
m_connected_slots.erase(it);
916
connections_list m_connected_slots;
919
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename mt_policy>
920
class _signal_base4 :
921
public _signal_base<mt_policy>
924
typedef std::list<_connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy> *> connections_list;
930
_signal_base4(const _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>& s) :
931
_signal_base<mt_policy>(s)
933
lock_block<mt_policy> lockblock(this);
934
typename connections_list::const_iterator it = s.m_connected_slots.begin();
935
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
939
(*it)->getdest()->signal_connect(this);
940
m_connected_slots.push_back((*it)->clone());
946
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
948
lock_block<mt_policy> lockblock(this);
949
typename connections_list::iterator it = m_connected_slots.begin();
950
typename connections_list::iterator itEnd = m_connected_slots.end();
954
if ((*it)->getdest() == oldtarget)
956
m_connected_slots.push_back((*it)->duplicate(newtarget));
968
void disconnect_all()
970
lock_block<mt_policy> lockblock(this);
971
typename connections_list::const_iterator it = m_connected_slots.begin();
972
typename connections_list::const_iterator itEnd = m_connected_slots.end();
976
(*it)->getdest()->signal_disconnect(this);
982
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
985
void disconnect(has_slots<mt_policy>* pclass)
987
lock_block<mt_policy> lockblock(this);
988
typename connections_list::iterator it = m_connected_slots.begin();
989
typename connections_list::iterator itEnd = m_connected_slots.end();
993
if ((*it)->getdest() == pclass)
996
m_connected_slots.erase(it);
997
pclass->signal_disconnect(this);
1005
void slot_disconnect(has_slots<mt_policy>* pslot)
1007
lock_block<mt_policy> lockblock(this);
1008
typename connections_list::iterator it = m_connected_slots.begin();
1009
typename connections_list::iterator itEnd = m_connected_slots.end();
1013
typename connections_list::iterator itNext = it;
1016
if ((*it)->getdest() == pslot)
1018
m_connected_slots.erase(it);
1027
connections_list m_connected_slots;
1030
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename mt_policy>
1031
class _signal_base5 :
1032
public _signal_base<mt_policy>
1035
typedef std::list<_connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy> *> connections_list;
1041
_signal_base5(const _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>& s) :
1042
_signal_base<mt_policy>(s)
1044
lock_block<mt_policy> lockblock(this);
1045
typename connections_list::const_iterator it = s.m_connected_slots.begin();
1046
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
1050
(*it)->getdest()->signal_connect(this);
1051
m_connected_slots.push_back((*it)->clone());
1057
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
1059
lock_block<mt_policy> lockblock(this);
1060
typename connections_list::iterator it = m_connected_slots.begin();
1061
typename connections_list::iterator itEnd = m_connected_slots.end();
1065
if ((*it)->getdest() == oldtarget)
1067
m_connected_slots.push_back((*it)->duplicate(newtarget));
1079
void disconnect_all()
1081
lock_block<mt_policy> lockblock(this);
1082
typename connections_list::const_iterator it = m_connected_slots.begin();
1083
typename connections_list::const_iterator itEnd = m_connected_slots.end();
1087
(*it)->getdest()->signal_disconnect(this);
1093
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
1096
void disconnect(has_slots<mt_policy>* pclass)
1098
lock_block<mt_policy> lockblock(this);
1099
typename connections_list::iterator it = m_connected_slots.begin();
1100
typename connections_list::iterator itEnd = m_connected_slots.end();
1104
if ((*it)->getdest() == pclass)
1107
m_connected_slots.erase(it);
1108
pclass->signal_disconnect(this);
1116
void slot_disconnect(has_slots<mt_policy>* pslot)
1118
lock_block<mt_policy> lockblock(this);
1119
typename connections_list::iterator it = m_connected_slots.begin();
1120
typename connections_list::iterator itEnd = m_connected_slots.end();
1124
typename connections_list::iterator itNext = it;
1127
if ((*it)->getdest() == pslot)
1129
m_connected_slots.erase(it);
1138
connections_list m_connected_slots;
1141
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename mt_policy>
1142
class _signal_base6 :
1143
public _signal_base<mt_policy>
1146
typedef std::list<_connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy> *> connections_list;
1152
_signal_base6(const _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>& s) :
1153
_signal_base<mt_policy>(s)
1155
lock_block<mt_policy> lockblock(this);
1156
typename connections_list::const_iterator it = s.m_connected_slots.begin();
1157
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
1161
(*it)->getdest()->signal_connect(this);
1162
m_connected_slots.push_back((*it)->clone());
1168
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
1170
lock_block<mt_policy> lockblock(this);
1171
typename connections_list::iterator it = m_connected_slots.begin();
1172
typename connections_list::iterator itEnd = m_connected_slots.end();
1176
if ((*it)->getdest() == oldtarget)
1178
m_connected_slots.push_back((*it)->duplicate(newtarget));
1190
void disconnect_all()
1192
lock_block<mt_policy> lockblock(this);
1193
typename connections_list::const_iterator it = m_connected_slots.begin();
1194
typename connections_list::const_iterator itEnd = m_connected_slots.end();
1198
(*it)->getdest()->signal_disconnect(this);
1204
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
1207
void disconnect(has_slots<mt_policy>* pclass)
1209
lock_block<mt_policy> lockblock(this);
1210
typename connections_list::iterator it = m_connected_slots.begin();
1211
typename connections_list::iterator itEnd = m_connected_slots.end();
1215
if ((*it)->getdest() == pclass)
1218
m_connected_slots.erase(it);
1219
pclass->signal_disconnect(this);
1227
void slot_disconnect(has_slots<mt_policy>* pslot)
1229
lock_block<mt_policy> lockblock(this);
1230
typename connections_list::iterator it = m_connected_slots.begin();
1231
typename connections_list::iterator itEnd = m_connected_slots.end();
1235
typename connections_list::iterator itNext = it;
1238
if ((*it)->getdest() == pslot)
1240
m_connected_slots.erase(it);
1249
connections_list m_connected_slots;
1252
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename arg7_type, typename mt_policy>
1253
class _signal_base7 :
1254
public _signal_base<mt_policy>
1257
typedef std::list<_connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy> *> connections_list;
1263
_signal_base7(const _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>& s) :
1264
_signal_base<mt_policy>(s)
1266
lock_block<mt_policy> lockblock(this);
1267
typename connections_list::const_iterator it = s.m_connected_slots.begin();
1268
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
1272
(*it)->getdest()->signal_connect(this);
1273
m_connected_slots.push_back((*it)->clone());
1279
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
1281
lock_block<mt_policy> lockblock(this);
1282
typename connections_list::iterator it = m_connected_slots.begin();
1283
typename connections_list::iterator itEnd = m_connected_slots.end();
1287
if ((*it)->getdest() == oldtarget)
1289
m_connected_slots.push_back((*it)->duplicate(newtarget));
1301
void disconnect_all()
1303
lock_block<mt_policy> lockblock(this);
1304
typename connections_list::const_iterator it = m_connected_slots.begin();
1305
typename connections_list::const_iterator itEnd = m_connected_slots.end();
1309
(*it)->getdest()->signal_disconnect(this);
1315
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
1318
void disconnect(has_slots<mt_policy>* pclass)
1320
lock_block<mt_policy> lockblock(this);
1321
typename connections_list::iterator it = m_connected_slots.begin();
1322
typename connections_list::iterator itEnd = m_connected_slots.end();
1326
if ((*it)->getdest() == pclass)
1329
m_connected_slots.erase(it);
1330
pclass->signal_disconnect(this);
1338
void slot_disconnect(has_slots<mt_policy>* pslot)
1340
lock_block<mt_policy> lockblock(this);
1341
typename connections_list::iterator it = m_connected_slots.begin();
1342
typename connections_list::iterator itEnd = m_connected_slots.end();
1346
typename connections_list::iterator itNext = it;
1349
if ((*it)->getdest() == pslot)
1351
m_connected_slots.erase(it);
1360
connections_list m_connected_slots;
1363
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename arg7_type, typename arg8_type, typename mt_policy>
1364
class _signal_base8 :
1365
public _signal_base<mt_policy>
1368
typedef std::list<_connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> *> connections_list;
1374
_signal_base8(const _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>& s) :
1375
_signal_base<mt_policy>(s)
1377
lock_block<mt_policy> lockblock(this);
1378
typename connections_list::const_iterator it = s.m_connected_slots.begin();
1379
typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
1383
(*it)->getdest()->signal_connect(this);
1384
m_connected_slots.push_back((*it)->clone());
1390
void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget)
1392
lock_block<mt_policy> lockblock(this);
1393
typename connections_list::iterator it = m_connected_slots.begin();
1394
typename connections_list::iterator itEnd = m_connected_slots.end();
1398
if ((*it)->getdest() == oldtarget)
1400
m_connected_slots.push_back((*it)->duplicate(newtarget));
1412
void disconnect_all()
1414
lock_block<mt_policy> lockblock(this);
1415
typename connections_list::const_iterator it = m_connected_slots.begin();
1416
typename connections_list::const_iterator itEnd = m_connected_slots.end();
1420
(*it)->getdest()->signal_disconnect(this);
1426
m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
1429
void disconnect(has_slots<mt_policy>* pclass)
1431
lock_block<mt_policy> lockblock(this);
1432
typename connections_list::iterator it = m_connected_slots.begin();
1433
typename connections_list::iterator itEnd = m_connected_slots.end();
1437
if ((*it)->getdest() == pclass)
1440
m_connected_slots.erase(it);
1441
pclass->signal_disconnect(this);
1449
void slot_disconnect(has_slots<mt_policy>* pslot)
1451
lock_block<mt_policy> lockblock(this);
1452
typename connections_list::iterator it = m_connected_slots.begin();
1453
typename connections_list::iterator itEnd = m_connected_slots.end();
1457
typename connections_list::iterator itNext = it;
1460
if ((*it)->getdest() == pslot)
1462
m_connected_slots.erase(it);
1471
connections_list m_connected_slots;
1475
template <typename dest_type, typename mt_policy>
1476
class _connection0 :
1477
public _connection_base0<mt_policy>
1480
typedef _connection_base0<mt_policy> base_type;
1481
typedef _connection0<dest_type, mt_policy> this_type;
1489
_connection0(dest_type* pobject, void (dest_type::*pmemfun)())
1491
m_pobject = pobject;
1492
m_pmemfun = pmemfun;
1495
virtual base_type* clone()
1497
return new this_type(*this);
1500
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1502
return new this_type((dest_type *)pnewdest, m_pmemfun);
1507
(m_pobject->*m_pmemfun)();
1510
virtual bool exist(base_type* conn)
1512
this_type* pconn = static_cast<this_type*>(conn);
1513
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1516
virtual has_slots<mt_policy>* getdest() const
1522
dest_type* m_pobject;
1523
void (dest_type::* m_pmemfun)();
1526
template <typename dest_type, typename arg1_type, typename mt_policy>
1527
class _connection1 :
1528
public _connection_base1<arg1_type, mt_policy>
1531
typedef _connection_base1<arg1_type, mt_policy> base_type;
1532
typedef _connection1<dest_type, arg1_type, mt_policy> this_type;
1540
_connection1(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type))
1542
m_pobject = pobject;
1543
m_pmemfun = pmemfun;
1546
virtual base_type* clone()
1548
return new this_type(*this);
1551
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1553
return new this_type((dest_type *)pnewdest, m_pmemfun);
1556
virtual void emit(arg1_type a1)
1558
(m_pobject->*m_pmemfun)(a1);
1561
virtual bool exist(base_type* conn)
1563
this_type* pconn = static_cast<this_type*>(conn);
1564
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1567
virtual has_slots<mt_policy>* getdest() const
1573
dest_type* m_pobject;
1574
void (dest_type::* m_pmemfun)(arg1_type);
1577
template <typename dest_type, typename arg1_type, typename arg2_type, typename mt_policy>
1578
class _connection2 :
1579
public _connection_base2<arg1_type, arg2_type, mt_policy>
1582
typedef _connection_base2<arg1_type, arg2_type, mt_policy> base_type;
1583
typedef _connection2<dest_type, arg1_type, arg2_type, mt_policy> this_type;
1591
_connection2(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type,
1594
m_pobject = pobject;
1595
m_pmemfun = pmemfun;
1598
virtual base_type* clone()
1600
return new this_type(*this);
1603
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1605
return new this_type((dest_type *)pnewdest, m_pmemfun);
1608
virtual void emit(arg1_type a1, arg2_type a2)
1610
(m_pobject->*m_pmemfun)(a1, a2);
1613
virtual bool exist(base_type* conn)
1615
this_type* pconn = static_cast<this_type*>(conn);
1616
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1619
virtual has_slots<mt_policy>* getdest() const
1625
dest_type* m_pobject;
1626
void (dest_type::* m_pmemfun)(arg1_type, arg2_type);
1629
template <typename dest_type, typename arg1_type, typename arg2_type, typename arg3_type, typename mt_policy>
1630
class _connection3 :
1631
public _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>
1634
typedef _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy> base_type;
1635
typedef _connection3<dest_type, arg1_type, arg2_type, arg3_type, mt_policy> this_type;
1643
_connection3(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, arg2_type, arg3_type))
1645
m_pobject = pobject;
1646
m_pmemfun = pmemfun;
1649
virtual base_type* clone()
1651
return new this_type(*this);
1654
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1656
return new this_type((dest_type *)pnewdest, m_pmemfun);
1659
virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3)
1661
(m_pobject->*m_pmemfun)(a1, a2, a3);
1664
virtual bool exist(base_type* conn)
1666
this_type* pconn = static_cast<this_type*>(conn);
1667
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1670
virtual has_slots<mt_policy>* getdest() const
1676
dest_type* m_pobject;
1677
void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type);
1680
template <typename dest_type, typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename mt_policy>
1681
class _connection4 :
1682
public _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>
1685
typedef _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy> base_type;
1686
typedef _connection4<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy> this_type;
1694
_connection4(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type))
1696
m_pobject = pobject;
1697
m_pmemfun = pmemfun;
1700
virtual base_type* clone()
1702
return new this_type(*this);
1705
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1707
return new this_type((dest_type *)pnewdest, m_pmemfun);
1710
virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4)
1712
(m_pobject->*m_pmemfun)(a1, a2, a3, a4);
1715
virtual bool exist(base_type* conn)
1717
this_type* pconn = static_cast<this_type*>(conn);
1718
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1721
virtual has_slots<mt_policy>* getdest() const
1727
dest_type* m_pobject;
1728
void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type,
1732
template <typename dest_type, typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename mt_policy>
1733
class _connection5 :
1734
public _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>
1737
typedef _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy> base_type;
1738
typedef _connection5<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy> this_type;
1746
_connection5(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type))
1748
m_pobject = pobject;
1749
m_pmemfun = pmemfun;
1752
virtual base_type* clone()
1754
return new this_type(*this);
1757
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1759
return new this_type((dest_type *)pnewdest, m_pmemfun);
1762
virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5)
1764
(m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5);
1767
virtual bool exist(base_type* conn)
1769
this_type* pconn = static_cast<this_type*>(conn);
1770
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1773
virtual has_slots<mt_policy>* getdest() const
1779
dest_type* m_pobject;
1780
void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type);
1783
template <typename dest_type, typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename mt_policy>
1784
class _connection6 :
1785
public _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>
1788
typedef _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy> base_type;
1789
typedef _connection6<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy> this_type;
1797
_connection6(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type))
1799
m_pobject = pobject;
1800
m_pmemfun = pmemfun;
1803
virtual base_type* clone()
1805
return new this_type(*this);
1808
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1810
return new this_type((dest_type *)pnewdest, m_pmemfun);
1813
virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6)
1815
(m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6);
1818
virtual bool exist(base_type* conn)
1820
this_type* pconn = static_cast<this_type*>(conn);
1821
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1824
virtual has_slots<mt_policy>* getdest() const
1830
dest_type* m_pobject;
1831
void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type);
1834
template <typename dest_type, typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename arg7_type, typename mt_policy>
1835
class _connection7 :
1836
public _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>
1839
typedef _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy> base_type;
1840
typedef _connection7<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy> this_type;
1848
_connection7(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type))
1850
m_pobject = pobject;
1851
m_pmemfun = pmemfun;
1854
virtual base_type* clone()
1856
return new this_type(*this);
1859
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1861
return new this_type((dest_type *)pnewdest, m_pmemfun);
1864
virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6, arg7_type a7)
1866
(m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6, a7);
1869
virtual bool exist(base_type* conn)
1871
this_type* pconn = static_cast<this_type*>(conn);
1872
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1875
virtual has_slots<mt_policy>* getdest() const
1881
dest_type* m_pobject;
1882
void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type);
1885
template <typename dest_type, typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename arg7_type, typename arg8_type, typename mt_policy>
1886
class _connection8 :
1887
public _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>
1890
typedef _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> base_type;
1891
typedef _connection8<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> this_type;
1899
_connection8(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type))
1901
m_pobject = pobject;
1902
m_pmemfun = pmemfun;
1905
virtual base_type* clone()
1907
return new this_type(*this);
1910
virtual base_type* duplicate(has_slots<mt_policy>* pnewdest)
1912
return new this_type((dest_type *)pnewdest, m_pmemfun);
1915
virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8)
1917
(m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6, a7, a8);
1920
virtual bool exist(base_type* conn)
1922
this_type* pconn = static_cast<this_type*>(conn);
1923
return pconn->m_pobject == m_pobject && pconn->m_pmemfun == m_pmemfun;
1926
virtual has_slots<mt_policy>* getdest() const
1932
dest_type* m_pobject;
1933
void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type);
1936
template <typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
1938
public _signal_base0<mt_policy>
1941
typedef _signal_base0<mt_policy> base_type;
1947
signal0(const signal0<mt_policy>& s) :
1948
_signal_base0<mt_policy>(s)
1952
template <typename desttype>
1953
void connect(desttype* pclass, void (desttype::*pmemfun)())
1955
lock_block<mt_policy> lockblock(this);
1956
_connection0<desttype, mt_policy>* conn = new _connection0<desttype, mt_policy>(pclass, pmemfun);
1957
base_type::m_connected_slots.push_back(conn);
1958
pclass->signal_connect(this);
1963
lock_block<mt_policy> lockblock(this);
1964
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
1965
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
1980
lock_block<mt_policy> lockblock(this);
1981
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
1982
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
1996
template <typename arg1_type, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
1998
public _signal_base1<arg1_type, mt_policy>
2001
typedef _signal_base1<arg1_type, mt_policy> base_type;
2007
signal1(const signal1<arg1_type, mt_policy>& s) :
2008
_signal_base1<arg1_type, mt_policy>(s)
2012
template <typename desttype>
2013
void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type))
2015
lock_block<mt_policy> lockblock(this);
2016
_connection1<desttype, arg1_type, mt_policy>* conn = new _connection1<desttype, arg1_type, mt_policy>(pclass, pmemfun);
2017
base_type::m_connected_slots.push_back(conn);
2018
pclass->signal_connect(this);
2021
template <typename desttype>
2022
bool exist(desttype* pclass, void (desttype::*pmemfun)(arg1_type))
2024
lock_block<mt_policy> lockblock(this);
2025
_connection1<desttype, arg1_type, mt_policy>* conn = new _connection1<desttype, arg1_type, mt_policy>(pclass, pmemfun);
2026
typename base_type::connections_list::const_iterator it = base_type::m_connected_slots.begin();
2027
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2029
bool result = false;
2033
if ((*it)->exist(conn))
2046
void emit(arg1_type a1)
2048
lock_block<mt_policy> lockblock(this);
2049
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2050
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2063
void operator()(arg1_type a1)
2065
lock_block<mt_policy> lockblock(this);
2066
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2067
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2081
template <typename arg1_type, typename arg2_type, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
2083
public _signal_base2<arg1_type, arg2_type, mt_policy>
2086
typedef _signal_base2<arg1_type, arg2_type, mt_policy> base_type;
2092
signal2(const signal2<arg1_type, arg2_type, mt_policy>& s)
2093
: _signal_base2<arg1_type, arg2_type, mt_policy>(s)
2097
template <typename desttype>
2098
void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, arg2_type))
2100
lock_block<mt_policy> lockblock(this);
2101
_connection2<desttype, arg1_type, arg2_type, mt_policy>* conn = new _connection2<desttype, arg1_type, arg2_type, mt_policy>(pclass, pmemfun);
2102
base_type::m_connected_slots.push_back(conn);
2103
pclass->signal_connect(this);
2106
void emit(arg1_type a1, arg2_type a2)
2108
lock_block<mt_policy> lockblock(this);
2109
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2110
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2117
(*it)->emit(a1, a2);
2123
void operator()(arg1_type a1, arg2_type a2)
2125
lock_block<mt_policy> lockblock(this);
2126
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2127
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2134
(*it)->emit(a1, a2);
2141
template <typename arg1_type, typename arg2_type, typename arg3_type, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
2143
public _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy>
2146
typedef _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy> base_type;
2152
signal3(const signal3<arg1_type, arg2_type, arg3_type, mt_policy>& s)
2153
: _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy>(s)
2157
template <typename desttype>
2158
void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, arg2_type, arg3_type))
2160
lock_block<mt_policy> lockblock(this);
2161
_connection3<desttype, arg1_type, arg2_type, arg3_type, mt_policy>* conn = new _connection3<desttype, arg1_type, arg2_type, arg3_type, mt_policy>(pclass, pmemfun);
2162
base_type::m_connected_slots.push_back(conn);
2163
pclass->signal_connect(this);
2166
void emit(arg1_type a1, arg2_type a2, arg3_type a3)
2168
lock_block<mt_policy> lockblock(this);
2169
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2170
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2177
(*it)->emit(a1, a2, a3);
2183
void operator()(arg1_type a1, arg2_type a2, arg3_type a3)
2185
lock_block<mt_policy> lockblock(this);
2186
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2187
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2194
(*it)->emit(a1, a2, a3);
2201
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
2203
public _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>
2206
typedef _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy> base_type;
2212
signal4(const signal4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>& s) :
2213
_signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>(s)
2217
template <typename desttype>
2218
void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type))
2220
lock_block<mt_policy> lockblock(this);
2221
_connection4<desttype, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* conn = new _connection4<desttype, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>(pclass, pmemfun);
2222
base_type::m_connected_slots.push_back(conn);
2223
pclass->signal_connect(this);
2226
void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4)
2228
lock_block<mt_policy> lockblock(this);
2229
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2230
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2237
(*it)->emit(a1, a2, a3, a4);
2243
void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4)
2245
lock_block<mt_policy> lockblock(this);
2246
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2247
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2254
(*it)->emit(a1, a2, a3, a4);
2261
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
2263
public _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>
2266
typedef _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy> base_type;
2272
signal5(const signal5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>& s) :
2273
_signal_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>(s)
2277
template <typename desttype>
2278
void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type))
2280
lock_block<mt_policy> lockblock(this);
2281
_connection5<desttype, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>* conn = new _connection5<desttype, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy>(pclass, pmemfun);
2282
base_type::m_connected_slots.push_back(conn);
2283
pclass->signal_connect(this);
2286
void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
2289
lock_block<mt_policy> lockblock(this);
2290
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2291
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2298
(*it)->emit(a1, a2, a3, a4, a5);
2304
void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
2307
lock_block<mt_policy> lockblock(this);
2308
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2309
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2316
(*it)->emit(a1, a2, a3, a4, a5);
2324
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
2326
public _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>
2329
typedef _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy> base_type;
2335
signal6(const signal6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>& s) :
2336
_signal_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>(s)
2340
template <typename desttype>
2341
void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type))
2343
lock_block<mt_policy> lockblock(this);
2344
_connection6<desttype, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>* conn = new _connection6<desttype, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>(pclass, pmemfun);
2345
base_type::m_connected_slots.push_back(conn);
2346
pclass->signal_connect(this);
2349
void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6)
2351
lock_block<mt_policy> lockblock(this);
2352
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2353
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2360
(*it)->emit(a1, a2, a3, a4, a5, a6);
2366
void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6)
2368
lock_block<mt_policy> lockblock(this);
2369
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2370
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2377
(*it)->emit(a1, a2, a3, a4, a5, a6);
2384
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename arg7_type, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
2386
public _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>
2389
typedef _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy> base_type;
2395
signal7(const signal7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>& s) :
2396
_signal_base7<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>(s)
2400
template <typename desttype>
2401
void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type))
2403
lock_block<mt_policy> lockblock(this);
2404
_connection7<desttype, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>* conn = new _connection7<desttype, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>(pclass, pmemfun);
2405
base_type::m_connected_slots.push_back(conn);
2406
pclass->signal_connect(this);
2409
void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6, arg7_type a7)
2411
lock_block<mt_policy> lockblock(this);
2412
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2413
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2420
(*it)->emit(a1, a2, a3, a4, a5, a6, a7);
2426
void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6, arg7_type a7)
2428
lock_block<mt_policy> lockblock(this);
2429
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2430
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2437
(*it)->emit(a1, a2, a3, a4, a5, a6, a7);
2444
template <typename arg1_type, typename arg2_type, typename arg3_type, typename arg4_type, typename arg5_type, typename arg6_type, typename arg7_type, typename arg8_type, typename mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
2446
public _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>
2449
typedef _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> base_type;
2455
signal8(const signal8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>& s) :
2456
_signal_base8<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>(s)
2460
template <typename desttype>
2461
void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type))
2463
lock_block<mt_policy> lockblock(this);
2464
_connection8<desttype, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* conn = new _connection8<desttype, arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>(pclass, pmemfun);
2465
base_type::m_connected_slots.push_back(conn);
2466
pclass->signal_connect(this);
2469
void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8)
2471
lock_block<mt_policy> lockblock(this);
2472
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2473
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2480
(*it)->emit(a1, a2, a3, a4, a5, a6, a7, a8);
2486
void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8)
2488
lock_block<mt_policy> lockblock(this);
2489
typename base_type::connections_list::const_iterator itNext, it = base_type::m_connected_slots.begin();
2490
typename base_type::connections_list::const_iterator itEnd = base_type::m_connected_slots.end();
2497
(*it)->emit(a1, a2, a3, a4, a5, a6, a7, a8);