1f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// sigslot.h: Signal/Slot classes 2f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 3f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// Written by Sarah Thompson (sarah@telergy.com) 2002. 4f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 5f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// License: Public domain. You are free to use this code however you like, with the proviso that 6f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// the author takes on no responsibility or liability for any use. 7f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 8f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// QUICK DOCUMENTATION 9f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 10f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// (see also the full documentation at http://sigslot.sourceforge.net/) 11f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 12f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// #define switches 13f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// SIGSLOT_PURE_ISO - Define this to force ISO C++ compliance. This also disables 14f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// all of the thread safety support on platforms where it is 15f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// available. 16f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 17f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// SIGSLOT_USE_POSIX_THREADS - Force use of Posix threads when using a C++ compiler other than 18f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// gcc on a platform that supports Posix threads. (When using gcc, 19f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// this is the default - use SIGSLOT_PURE_ISO to disable this if 20f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// necessary) 21f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 22f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// SIGSLOT_DEFAULT_MT_POLICY - Where thread support is enabled, this defaults to multi_threaded_global. 23f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// Otherwise, the default is single_threaded. #define this yourself to 24f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// override the default. In pure ISO mode, anything other than 25f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// single_threaded will cause a compiler error. 26f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 27f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// PLATFORM NOTES 28f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 29f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// Win32 - On Win32, the WIN32 symbol must be #defined. Most mainstream 30f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// compilers do this by default, but you may need to define it 31f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// yourself if your build environment is less standard. This causes 32f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// the Win32 thread support to be compiled in and used automatically. 33f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 34f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// Unix/Linux/BSD, etc. - If you're using gcc, it is assumed that you have Posix threads 35f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// available, so they are used automatically. You can override this 36f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// (as under Windows) with the SIGSLOT_PURE_ISO switch. If you're using 37f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// something other than gcc but still want to use Posix threads, you 38f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// need to #define SIGSLOT_USE_POSIX_THREADS. 39f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 40f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// ISO C++ - If none of the supported platforms are detected, or if 41f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// SIGSLOT_PURE_ISO is defined, all multithreading support is turned off, 42f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// along with any code that might cause a pure ISO C++ environment to 43f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// complain. Before you ask, gcc -ansi -pedantic won't compile this 44f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// library, but gcc -ansi is fine. Pedantic mode seems to throw a lot of 45f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// errors that aren't really there. If you feel like investigating this, 46f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// please contact the author. 47f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 48f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 49f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// THREADING MODES 50f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 51f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// single_threaded - Your program is assumed to be single threaded from the point of view 52f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// of signal/slot usage (i.e. all objects using signals and slots are 53f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// created and destroyed from a single thread). Behaviour if objects are 54f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// destroyed concurrently is undefined (i.e. you'll get the occasional 55f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// segmentation fault/memory exception). 56f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 57f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// multi_threaded_global - Your program is assumed to be multi threaded. Objects using signals and 58f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// slots can be safely created and destroyed from any thread, even when 59f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// connections exist. In multi_threaded_global mode, this is achieved by a 60f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// single global mutex (actually a critical section on Windows because they 61f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// are faster). This option uses less OS resources, but results in more 62f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// opportunities for contention, possibly resulting in more context switches 63f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// than are strictly necessary. 64f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 65f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// multi_threaded_local - Behaviour in this mode is essentially the same as multi_threaded_global, 66f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// except that each signal, and each object that inherits has_slots, all 67f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// have their own mutex/critical section. In practice, this means that 68f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// mutex collisions (and hence context switches) only happen if they are 69f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// absolutely essential. However, on some platforms, creating a lot of 70f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// mutexes can slow down the whole OS, so use this option with care. 71f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 72f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// USING THE LIBRARY 73f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 74f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// See the full documentation at http://sigslot.sourceforge.net/ 75f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 76f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// 77f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 78f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifndef TALK_BASE_SIGSLOT_H__ 79f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#define TALK_BASE_SIGSLOT_H__ 80f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 81f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include <set> 82f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include <list> 83f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 84f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// On our copy of sigslot.h, we force single threading 85f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#define SIGSLOT_PURE_ISO 86f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 87f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#if defined(SIGSLOT_PURE_ISO) || (!defined(WIN32) && !defined(__GNUG__) && !defined(SIGSLOT_USE_POSIX_THREADS)) 88f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# define _SIGSLOT_SINGLE_THREADED 89f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#elif defined(WIN32) 90f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# define _SIGSLOT_HAS_WIN32_THREADS 91f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# include <windows.h> 92f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#elif defined(__GNUG__) || defined(SIGSLOT_USE_POSIX_THREADS) 93f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# define _SIGSLOT_HAS_POSIX_THREADS 94f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# include <pthread.h> 95f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#else 96f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# define _SIGSLOT_SINGLE_THREADED 97f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 98f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 99f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifndef SIGSLOT_DEFAULT_MT_POLICY 100f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# ifdef _SIGSLOT_SINGLE_THREADED 101f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# define SIGSLOT_DEFAULT_MT_POLICY single_threaded 102f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# else 103f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# define SIGSLOT_DEFAULT_MT_POLICY multi_threaded_local 104f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch# endif 105f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 106f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 107f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch// TODO: change this namespace to talk_base? 108f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochnamespace sigslot { 109f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 110f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class single_threaded 111f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 112f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 113f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch single_threaded() 114f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 115f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 116f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 117f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 118f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~single_threaded() 119f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 120f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 121f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 122f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 123f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void lock() 124f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 125f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 126f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 127f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 128f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void unlock() 129f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 130f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 131f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 132f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 133f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 134f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _SIGSLOT_HAS_WIN32_THREADS 135f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // The multi threading policies only get compiled in if they are enabled. 136f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class multi_threaded_global 137f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 138f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 139f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch multi_threaded_global() 140f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 141f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch static bool isinitialised = false; 142f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 143f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if(!isinitialised) 144f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 145f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch InitializeCriticalSection(get_critsec()); 146f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch isinitialised = true; 147f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 148f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 149f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 150f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch multi_threaded_global(const multi_threaded_global&) 151f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 152f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 153f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 154f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 155f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~multi_threaded_global() 156f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 157f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 158f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 159f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 160f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void lock() 161f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 162f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch EnterCriticalSection(get_critsec()); 163f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 164f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 165f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void unlock() 166f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 167f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch LeaveCriticalSection(get_critsec()); 168f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 169f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 170f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 171f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch CRITICAL_SECTION* get_critsec() 172f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 173f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch static CRITICAL_SECTION g_critsec; 174f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return &g_critsec; 175f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 176f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 177f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 178f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class multi_threaded_local 179f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 180f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 181f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch multi_threaded_local() 182f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 183f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch InitializeCriticalSection(&m_critsec); 184f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 185f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 186f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch multi_threaded_local(const multi_threaded_local&) 187f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 188f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch InitializeCriticalSection(&m_critsec); 189f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 190f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 191f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~multi_threaded_local() 192f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 193f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch DeleteCriticalSection(&m_critsec); 194f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 195f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 196f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void lock() 197f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 198f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch EnterCriticalSection(&m_critsec); 199f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 200f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 201f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void unlock() 202f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 203f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch LeaveCriticalSection(&m_critsec); 204f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 205f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 206f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 207f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch CRITICAL_SECTION m_critsec; 208f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 209f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif // _SIGSLOT_HAS_WIN32_THREADS 210f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 211f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _SIGSLOT_HAS_POSIX_THREADS 212f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // The multi threading policies only get compiled in if they are enabled. 213f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class multi_threaded_global 214f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 215f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 216f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch multi_threaded_global() 217f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 218f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_init(get_mutex(), NULL); 219f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 220f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 221f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch multi_threaded_global(const multi_threaded_global&) 222f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 223f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 224f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 225f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 226f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~multi_threaded_global() 227f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 228f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 229f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 230f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 231f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void lock() 232f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 233f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_lock(get_mutex()); 234f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 235f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 236f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void unlock() 237f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 238f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_unlock(get_mutex()); 239f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 240f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 241f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 242f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_t* get_mutex() 243f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 244f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch static pthread_mutex_t g_mutex; 245f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return &g_mutex; 246f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 247f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 248f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 249f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class multi_threaded_local 250f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 251f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 252f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch multi_threaded_local() 253f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 254f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_init(&m_mutex, NULL); 255f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 256f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 257f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch multi_threaded_local(const multi_threaded_local&) 258f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 259f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_init(&m_mutex, NULL); 260f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 261f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 262f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~multi_threaded_local() 263f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 264f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_destroy(&m_mutex); 265f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 266f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 267f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void lock() 268f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 269f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_lock(&m_mutex); 270f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 271f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 272f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void unlock() 273f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 274f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_unlock(&m_mutex); 275f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 276f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 277f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 278f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pthread_mutex_t m_mutex; 279f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 280f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif // _SIGSLOT_HAS_POSIX_THREADS 281f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 282f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class mt_policy> 283f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class lock_block 284f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 285f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 286f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch mt_policy *m_mutex; 287f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 288f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block(mt_policy *mtx) 289f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : m_mutex(mtx) 290f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 291f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_mutex->lock(); 292f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 293f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 294f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~lock_block() 295f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 296f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_mutex->unlock(); 297f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 298f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 299f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 300f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class mt_policy> 301f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class has_slots; 302f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 303f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class mt_policy> 304f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base0 305f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 306f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 307f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base0() {} 308f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 309f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit() = 0; 310f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base0* clone() = 0; 311f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base0* duplicate(has_slots<mt_policy>* pnewdest) = 0; 312f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 313f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 314f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class mt_policy> 315f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base1 316f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 317f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 318f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base1() {} 319f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 320f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type) = 0; 321f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base1<arg1_type, mt_policy>* clone() = 0; 322f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base1<arg1_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0; 323f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 324f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 325f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class mt_policy> 326f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base2 327f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 328f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 329f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base2() {} 330f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 331f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type, arg2_type) = 0; 332f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base2<arg1_type, arg2_type, mt_policy>* clone() = 0; 333f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base2<arg1_type, arg2_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0; 334f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 335f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 336f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class mt_policy> 337f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base3 338f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 339f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 340f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base3() {} 341f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 342f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type, arg2_type, arg3_type) = 0; 343f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* clone() = 0; 344f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0; 345f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 346f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 347f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, class mt_policy> 348f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base4 349f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 350f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 351f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base4() {} 352f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 353f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type) = 0; 354f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* clone() = 0; 355f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0; 356f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 357f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 358f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 359f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class mt_policy> 360f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base5 361f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 362f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 363f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base5() {} 364f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 365f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, 366f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type) = 0; 367f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, 368f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>* clone() = 0; 369f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, 370f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0; 371f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 372f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 373f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 374f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class mt_policy> 375f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base6 376f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 377f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 378f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base6() {} 379f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 380f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, 381f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg6_type) = 0; 382f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, 383f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>* clone() = 0; 384f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, 385f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0; 386f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 387f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 388f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 389f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class arg7_type, class mt_policy> 390f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base7 391f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 392f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 393f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base7() {} 394f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 395f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, 396f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg6_type, arg7_type) = 0; 397f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, 398f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>* clone() = 0; 399f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, 400f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0; 401f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 402f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 403f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 404f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class arg7_type, class arg8_type, class mt_policy> 405f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection_base8 406f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 407f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 408f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection_base8() {} 409f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const = 0; 410f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, 411f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg6_type, arg7_type, arg8_type) = 0; 412f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, 413f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* clone() = 0; 414f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, 415f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) = 0; 416f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 417f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 418f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class mt_policy> 419f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base : public mt_policy 420f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 421f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 422f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void slot_disconnect(has_slots<mt_policy>* pslot) = 0; 423f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void slot_duplicate(const has_slots<mt_policy>* poldslot, has_slots<mt_policy>* pnewslot) = 0; 424f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 425f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 426f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 427f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class has_slots : public mt_policy 428f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 429f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 430f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename std::set<_signal_base<mt_policy> *> sender_set; 431f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename sender_set::const_iterator const_iterator; 432f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 433f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 434f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch has_slots() 435f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 436f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 437f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 438f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 439f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch has_slots(const has_slots& hs) 440f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : mt_policy(hs) 441f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 442f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 443f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const_iterator it = hs.m_senders.begin(); 444f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const_iterator itEnd = hs.m_senders.end(); 445f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 446f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 447f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 448f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->slot_duplicate(&hs, this); 449f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_senders.insert(*it); 450f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 451f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 452f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 453f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 454f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void signal_connect(_signal_base<mt_policy>* sender) 455f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 456f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 457f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_senders.insert(sender); 458f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 459f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 460f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void signal_disconnect(_signal_base<mt_policy>* sender) 461f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 462f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 463f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_senders.erase(sender); 464f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 465f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 466f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~has_slots() 467f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 468f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 469f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 470f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 471f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 472f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 473f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 474f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const_iterator it = m_senders.begin(); 475f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const_iterator itEnd = m_senders.end(); 476f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 477f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 478f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 479f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->slot_disconnect(this); 480f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 481f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 482f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 483f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_senders.erase(m_senders.begin(), m_senders.end()); 484f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 485f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 486f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 487f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch sender_set m_senders; 488f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 489f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 490f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class mt_policy> 491f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base0 : public _signal_base<mt_policy> 492f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 493f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 494f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base0<mt_policy> *> connections_list; 495f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 496f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base0() 497f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 498f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 499f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 500f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 501f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base0(const _signal_base0& s) 502f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 503f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 504f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 505f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 506f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 507f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 508f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 509f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 510f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 511f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 512f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 513f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 514f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 515f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 516f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 517f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base0() 518f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 519f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 520f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 521f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 522f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 523f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 524f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 525f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 526f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 527f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 528f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 529f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 530f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 531f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 532f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 533f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 534f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 535f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 536f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 537f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 538f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 539f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 540f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 541f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 542f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 543f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 544f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 545f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 546f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 547f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 548f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 549f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 550f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 551f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 552f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 553f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 554f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 555f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 556f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 557f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 558f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 559f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 560f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 561f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 562f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 563f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 564f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 565f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 566f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 567f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 568f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 569f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 570f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 571f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 572f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 573f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 574f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 575f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 576f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 577f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 578f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 579f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 580f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 581f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 582f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 583f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 584f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 585f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 586f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 587f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 588f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 589f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 590f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 591f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 592f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 593f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 594f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 595f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 596f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 597f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 598f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 599f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 600f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 601f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 602f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 603f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 604f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 605f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 606f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 607f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 608f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 609f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 610f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 611f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 612f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 613f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 614f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 615f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 616f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 617f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 618f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 619f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 620f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 621f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 622f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 623f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 624f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 625f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 626f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 627f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class mt_policy> 628f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base1 : public _signal_base<mt_policy> 629f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 630f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 631f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base1<arg1_type, mt_policy> *> connections_list; 632f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 633f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base1() 634f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 635f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 636f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 637f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 638f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base1(const _signal_base1<arg1_type, mt_policy>& s) 639f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 640f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 641f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 642f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 643f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 644f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 645f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 646f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 647f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 648f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 649f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 650f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 651f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 652f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 653f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 654f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 655f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 656f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 657f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 658f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 659f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 660f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 661f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 662f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 663f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 664f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 665f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 666f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 667f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 668f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 669f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 670f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 671f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base1() 672f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 673f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 674f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 675f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 676f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 677f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 678f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 679f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 680f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 681f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 682f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 683f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 684f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 685f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 686f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 687f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 688f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 689f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 690f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 691f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 692f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 693f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 694f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 695f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 696f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 697f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 698f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 699f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 700f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 701f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 702f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 703f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 704f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 705f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 706f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 707f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 708f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 709f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 710f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 711f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 712f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 713f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 714f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 715f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 716f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 717f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 718f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 719f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 720f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 721f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 722f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 723f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 724f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 725f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 726f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 727f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 728f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 729f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 730f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 731f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 732f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 733f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 734f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 735f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 736f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 737f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 738f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 739f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 740f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 741f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 742f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 743f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 744f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 745f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 746f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 747f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 748f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 749f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 750f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 751f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 752f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 753f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 754f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 755f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 756f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 757f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 758f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 759f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 760f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 761f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 762f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 763f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 764f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 765f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class mt_policy> 766f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base2 : public _signal_base<mt_policy> 767f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 768f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 769f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base2<arg1_type, arg2_type, mt_policy> *> 770f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list; 771f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 772f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base2() 773f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 774f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 775f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 776f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 777f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base2(const _signal_base2<arg1_type, arg2_type, mt_policy>& s) 778f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 779f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 780f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 781f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 782f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 783f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 784f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 785f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 786f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 787f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 788f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 789f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 790f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 791f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 792f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 793f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 794f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 795f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 796f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 797f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 798f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 799f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 800f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 801f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 802f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 803f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 804f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 805f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 806f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 807f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 808f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 809f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 810f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base2() 811f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 812f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 813f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 814f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 815f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 816f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 817f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 818f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 819f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 820f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 821f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 822f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 823f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 824f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 825f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 826f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 827f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 828f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 829f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 830f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 831f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 832f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 833f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 834f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 835f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 836f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 837f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 838f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 839f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 840f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 841f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 842f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 843f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 844f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 845f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 846f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 847f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 848f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 849f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 850f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 851f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 852f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 853f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 854f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 855f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 856f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 857f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 858f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 859f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 860f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 861f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 862f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 863f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 864f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 865f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 866f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 867f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 868f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 869f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 870f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 871f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 872f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 873f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 874f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 875f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 876f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 877f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 878f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 879f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 880f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 881f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 882f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 883f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 884f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 885f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 886f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 887f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 888f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 889f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 890f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 891f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 892f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 893f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 894f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 895f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 896f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 897f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 898f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 899f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 900f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 901f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 902f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 903f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class mt_policy> 904f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base3 : public _signal_base<mt_policy> 905f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 906f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 907f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base3<arg1_type, arg2_type, arg3_type, mt_policy> *> 908f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list; 909f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 910f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base3() 911f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 912f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 913f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 914f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 915f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base3(const _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy>& s) 916f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 917f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 918f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 919f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 920f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 921f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 922f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 923f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 924f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 925f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 926f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 927f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 928f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 929f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 930f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 931f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 932f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 933f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 934f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 935f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 936f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 937f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 938f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 939f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 940f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 941f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 942f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 943f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 944f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 945f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 946f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 947f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 948f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base3() 949f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 950f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 951f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 952f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 953f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 954f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 955f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 956f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 957f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 958f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 959f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 960f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 961f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 962f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 963f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 964f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 965f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 966f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 967f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 968f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 969f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 970f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 971f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 972f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 973f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 974f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 975f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 976f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 977f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 978f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 979f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 980f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 981f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 982f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 983f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 984f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 985f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 986f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 987f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 988f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 989f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 990f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 991f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 992f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 993f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 994f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 995f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 996f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 997f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 998f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 999f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1000f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1001f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1002f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1003f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1004f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 1005f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1006f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1007f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1008f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 1009f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 1010f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1011f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1012f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1013f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1014f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1015f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1016f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 1017f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1018f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1019f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1020f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1021f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1022f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1023f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1024f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 1025f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1026f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1027f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 1028f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1029f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1030f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1031f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1032f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1033f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1034f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1035f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1036f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1037f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 1038f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 1039f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1040f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1041f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, class mt_policy> 1042f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base4 : public _signal_base<mt_policy> 1043f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1044f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1045f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base4<arg1_type, arg2_type, arg3_type, 1046f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, mt_policy> *> connections_list; 1047f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1048f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base4() 1049f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1050f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 1051f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1052f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1053f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base4(const _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>& s) 1054f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 1055f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1056f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1057f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 1058f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 1059f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1060f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1061f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1062f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 1063f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 1064f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1065f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1066f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1067f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1068f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1069f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 1070f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1071f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1072f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1073f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1074f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1075f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1076f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1077f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 1078f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1079f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 1080f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1081f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1082f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1083f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1084f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1085f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1086f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base4() 1087f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1088f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 1089f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1090f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1091f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 1092f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1093f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1094f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1095f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1096f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 1097f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1098f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1099f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 1100f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1101f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1102f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1103f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1104f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1105f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1106f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1107f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 1108f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1109f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1110f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1111f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1112f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1113f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 1114f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1115f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1116f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 1117f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 1118f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1119f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1120f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 1121f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1122f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1123f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1124f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 1125f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1126f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 1127f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 1128f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1129f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1130f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 1131f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1132f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 1133f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1134f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 1135f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1136f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1137f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1138f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1139f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1140f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1141f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1142f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 1143f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1144f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1145f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1146f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 1147f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 1148f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1149f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1150f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1151f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1152f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1153f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1154f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 1155f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1156f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1157f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1158f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1159f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1160f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1161f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1162f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 1163f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1164f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1165f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 1166f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1167f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1168f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1169f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1170f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1171f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1172f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1173f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1174f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1175f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 1176f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 1177f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1178f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1179f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 1180f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class mt_policy> 1181f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base5 : public _signal_base<mt_policy> 1182f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1183f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1184f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base5<arg1_type, arg2_type, arg3_type, 1185f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, mt_policy> *> connections_list; 1186f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1187f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base5() 1188f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1189f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 1190f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1191f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1192f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base5(const _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type, 1193f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>& s) 1194f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 1195f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1196f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1197f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 1198f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 1199f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1200f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1201f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1202f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 1203f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 1204f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1205f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1206f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1207f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1208f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1209f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 1210f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1211f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1212f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1213f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1214f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1215f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1216f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1217f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 1218f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1219f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 1220f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1221f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1222f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1223f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1224f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1225f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1226f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base5() 1227f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1228f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 1229f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1230f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1231f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 1232f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1233f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1234f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1235f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1236f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 1237f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1238f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1239f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 1240f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1241f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1242f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1243f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1244f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1245f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1246f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1247f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 1248f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1249f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1250f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1251f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1252f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1253f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 1254f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1255f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1256f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 1257f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 1258f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1259f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1260f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 1261f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1262f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1263f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1264f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 1265f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1266f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 1267f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 1268f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1269f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1270f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 1271f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1272f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 1273f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1274f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 1275f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1276f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1277f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1278f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1279f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1280f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1281f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1282f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 1283f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1284f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1285f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1286f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 1287f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 1288f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1289f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1290f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1291f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1292f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1293f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1294f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 1295f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1296f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1297f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1298f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1299f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1300f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1301f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1302f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 1303f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1304f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1305f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 1306f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1307f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1308f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1309f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1310f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1311f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1312f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1313f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1314f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1315f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 1316f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 1317f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1318f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1319f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 1320f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class mt_policy> 1321f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base6 : public _signal_base<mt_policy> 1322f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1323f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1324f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base6<arg1_type, arg2_type, arg3_type, 1325f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, mt_policy> *> connections_list; 1326f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1327f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base6() 1328f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1329f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 1330f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1331f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1332f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base6(const _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type, 1333f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>& s) 1334f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 1335f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1336f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1337f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 1338f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 1339f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1340f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1341f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1342f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 1343f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 1344f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1345f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1346f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1347f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1348f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1349f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 1350f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1351f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1352f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1353f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1354f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1355f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1356f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1357f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 1358f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1359f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 1360f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1361f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1362f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1363f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1364f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1365f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1366f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base6() 1367f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1368f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 1369f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1370f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1371f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 1372f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1373f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1374f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1375f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1376f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 1377f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1378f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1379f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 1380f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1381f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1382f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1383f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1384f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1385f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1386f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1387f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 1388f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1389f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1390f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1391f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1392f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1393f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 1394f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1395f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1396f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 1397f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 1398f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1399f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1400f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 1401f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1402f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1403f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1404f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 1405f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1406f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 1407f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 1408f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1409f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1410f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 1411f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1412f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 1413f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1414f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 1415f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1416f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1417f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1418f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1419f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1420f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1421f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1422f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 1423f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1424f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1425f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1426f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 1427f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 1428f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1429f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1430f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1431f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1432f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1433f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1434f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 1435f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1436f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1437f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1438f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1439f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1440f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1441f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1442f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 1443f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1444f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1445f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 1446f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1447f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1448f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1449f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1450f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1451f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1452f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1453f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1454f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1455f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 1456f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 1457f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1458f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1459f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 1460f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class arg7_type, class mt_policy> 1461f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base7 : public _signal_base<mt_policy> 1462f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1463f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1464f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base7<arg1_type, arg2_type, arg3_type, 1465f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, arg7_type, mt_policy> *> connections_list; 1466f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1467f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base7() 1468f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1469f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 1470f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1471f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1472f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base7(const _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type, 1473f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>& s) 1474f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 1475f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1476f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1477f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 1478f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 1479f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1480f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1481f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1482f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 1483f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 1484f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1485f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1486f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1487f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1488f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1489f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 1490f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1491f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1492f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1493f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1494f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1495f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1496f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1497f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 1498f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1499f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 1500f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1501f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1502f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1503f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1504f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1505f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1506f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base7() 1507f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1508f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 1509f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1510f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1511f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 1512f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1513f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1514f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1515f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1516f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 1517f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1518f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1519f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 1520f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1521f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1522f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1523f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1524f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1525f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1526f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1527f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 1528f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1529f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1530f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1531f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1532f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1533f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 1534f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1535f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1536f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 1537f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 1538f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1539f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1540f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 1541f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1542f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1543f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1544f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 1545f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1546f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 1547f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 1548f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1549f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1550f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 1551f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1552f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 1553f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1554f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 1555f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1556f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1557f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1558f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1559f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1560f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1561f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1562f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 1563f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1564f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1565f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1566f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 1567f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 1568f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1569f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1570f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1571f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1572f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1573f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1574f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 1575f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1576f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1577f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1578f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1579f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1580f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1581f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1582f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 1583f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1584f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1585f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 1586f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1587f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1588f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1589f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1590f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1591f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1592f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1593f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1594f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1595f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 1596f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 1597f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1598f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1599f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 1600f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class arg7_type, class arg8_type, class mt_policy> 1601f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _signal_base8 : public _signal_base<mt_policy> 1602f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1603f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1604f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef std::list<_connection_base8<arg1_type, arg2_type, arg3_type, 1605f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> *> 1606f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list; 1607f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1608f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base8() 1609f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1610f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 1611f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1612f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1613f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _signal_base8(const _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type, 1614f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>& s) 1615f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base<mt_policy>(s) 1616f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1617f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1618f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = s.m_connected_slots.begin(); 1619f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = s.m_connected_slots.end(); 1620f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1621f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1622f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1623f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_connect(this); 1624f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->clone()); 1625f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1626f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1627f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1628f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1629f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1630f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* newtarget) 1631f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1632f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1633f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1634f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1635f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1636f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1637f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1638f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == oldtarget) 1639f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1640f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back((*it)->duplicate(newtarget)); 1641f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1642f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1643f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1644f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1645f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1646f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1647f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ~_signal_base8() 1648f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1649f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch disconnect_all(); 1650f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1651f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1652f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool is_empty() 1653f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1654f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1655f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1656f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1657f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return it == itEnd; 1658f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1659f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1660f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect_all() 1661f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1662f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1663f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator it = m_connected_slots.begin(); 1664f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1665f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1666f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1667f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1668f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->getdest()->signal_disconnect(this); 1669f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1670f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1671f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1672f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1673f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1674f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end()); 1675f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1676f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1677f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef _DEBUG 1678f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool connected(has_slots<mt_policy>* pclass) 1679f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1680f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1681f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 1682f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 1683f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1684f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1685f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 1686f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1687f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if ((*it)->getdest() == pclass) 1688f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return true; 1689f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1690f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1691f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return false; 1692f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1693f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 1694f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1695f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void disconnect(has_slots<mt_policy>* pclass) 1696f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1697f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1698f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1699f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1700f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1701f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1702f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1703f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pclass) 1704f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1705f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1706f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1707f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_disconnect(this); 1708f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return; 1709f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1710f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1711f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++it; 1712f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1713f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1714f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1715f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void slot_disconnect(has_slots<mt_policy>* pslot) 1716f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1717f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 1718f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator it = m_connected_slots.begin(); 1719f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itEnd = m_connected_slots.end(); 1720f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1721f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 1722f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1723f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::iterator itNext = it; 1724f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 1725f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1726f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch if((*it)->getdest() == pslot) 1727f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1728f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch delete *it; 1729f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.erase(it); 1730f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1731f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1732f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 1733f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1734f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1735f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1736f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch protected: 1737f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch connections_list m_connected_slots; 1738f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1739f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1740f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1741f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class mt_policy> 1742f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection0 : public _connection_base0<mt_policy> 1743f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1744f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1745f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection0() 1746f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1747f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 1748f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 1749f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1750f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1751f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection0(dest_type* pobject, void (dest_type::*pmemfun)()) 1752f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1753f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 1754f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 1755f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1756f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1757f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection0() 1758f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1759f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1760f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1761f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base0<mt_policy>* clone() 1762f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1763f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection0<dest_type, mt_policy>(*this); 1764f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1765f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1766f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base0<mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 1767f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1768f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection0<dest_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 1769f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1770f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1771f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit() 1772f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1773f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(); 1774f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1775f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1776f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 1777f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1778f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 1779f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1780f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1781f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 1782f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 1783f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(); 1784f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1785f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1786f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class arg1_type, class mt_policy> 1787f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection1 : public _connection_base1<arg1_type, mt_policy> 1788f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1789f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1790f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection1() 1791f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1792f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 1793f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 1794f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1795f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1796f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection1(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type)) 1797f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1798f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 1799f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 1800f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1801f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1802f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection1() 1803f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1804f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1805f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1806f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base1<arg1_type, mt_policy>* clone() 1807f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1808f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection1<dest_type, arg1_type, mt_policy>(*this); 1809f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1810f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1811f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base1<arg1_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 1812f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1813f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection1<dest_type, arg1_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 1814f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1815f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1816f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type a1) 1817f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1818f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(a1); 1819f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1820f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1821f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 1822f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1823f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 1824f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1825f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1826f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 1827f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 1828f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(arg1_type); 1829f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1830f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1831f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class arg1_type, class arg2_type, class mt_policy> 1832f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection2 : public _connection_base2<arg1_type, arg2_type, mt_policy> 1833f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1834f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1835f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection2() 1836f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1837f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 1838f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 1839f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1840f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1841f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection2(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, 1842f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type)) 1843f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1844f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 1845f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 1846f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1847f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1848f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection2() 1849f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1850f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1851f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1852f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base2<arg1_type, arg2_type, mt_policy>* clone() 1853f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1854f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection2<dest_type, arg1_type, arg2_type, mt_policy>(*this); 1855f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1856f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1857f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base2<arg1_type, arg2_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 1858f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1859f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection2<dest_type, arg1_type, arg2_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 1860f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1861f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1862f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type a1, arg2_type a2) 1863f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1864f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(a1, a2); 1865f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1866f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1867f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 1868f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1869f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 1870f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1871f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1872f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 1873f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 1874f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(arg1_type, arg2_type); 1875f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1876f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1877f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class arg1_type, class arg2_type, class arg3_type, class mt_policy> 1878f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection3 : public _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy> 1879f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1880f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1881f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection3() 1882f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1883f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 1884f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 1885f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1886f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1887f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection3(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, 1888f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type)) 1889f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1890f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 1891f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 1892f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1893f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1894f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection3() 1895f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1896f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1897f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1898f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* clone() 1899f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1900f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection3<dest_type, arg1_type, arg2_type, arg3_type, mt_policy>(*this); 1901f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1902f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1903f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 1904f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1905f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection3<dest_type, arg1_type, arg2_type, arg3_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 1906f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1907f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1908f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3) 1909f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1910f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(a1, a2, a3); 1911f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1912f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1913f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 1914f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1915f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 1916f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1917f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1918f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 1919f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 1920f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type); 1921f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1922f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1923f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class arg1_type, class arg2_type, class arg3_type, 1924f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg4_type, class mt_policy> 1925f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection4 : public _connection_base4<arg1_type, arg2_type, 1926f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg3_type, arg4_type, mt_policy> 1927f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1928f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1929f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection4() 1930f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1931f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 1932f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 1933f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1934f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1935f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection4(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, 1936f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type)) 1937f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1938f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 1939f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 1940f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1941f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1942f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection4() 1943f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1944f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1945f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1946f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* clone() 1947f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1948f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection4<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>(*this); 1949f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1950f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1951f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 1952f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1953f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection4<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 1954f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1955f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1956f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, 1957f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type a4) 1958f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1959f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(a1, a2, a3, a4); 1960f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1961f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1962f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 1963f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1964f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 1965f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1966f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1967f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 1968f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 1969f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, 1970f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type); 1971f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 1972f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1973f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class arg1_type, class arg2_type, class arg3_type, 1974f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg4_type, class arg5_type, class mt_policy> 1975f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection5 : public _connection_base5<arg1_type, arg2_type, 1976f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg3_type, arg4_type, arg5_type, mt_policy> 1977f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1978f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 1979f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection5() 1980f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1981f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 1982f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 1983f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1984f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1985f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection5(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, 1986f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type, arg5_type)) 1987f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1988f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 1989f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 1990f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1991f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1992f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection5() 1993f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1994f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 1995f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 1996f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, 1997f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>* clone() 1998f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 1999f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection5<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, 2000f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>(*this); 2001f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2002f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2003f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type, 2004f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 2005f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2006f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection5<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, 2007f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 2008f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2009f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2010f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2011f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5) 2012f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2013f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5); 2014f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2015f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2016f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 2017f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2018f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 2019f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2020f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2021f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 2022f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 2023f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, 2024f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type); 2025f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2026f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2027f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class arg1_type, class arg2_type, class arg3_type, 2028f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg4_type, class arg5_type, class arg6_type, class mt_policy> 2029f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection6 : public _connection_base6<arg1_type, arg2_type, 2030f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg3_type, arg4_type, arg5_type, arg6_type, mt_policy> 2031f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2032f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2033f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection6() 2034f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2035f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 2036f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 2037f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2038f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2039f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection6(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, 2040f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type, arg5_type, arg6_type)) 2041f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2042f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 2043f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 2044f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2045f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2046f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection6() 2047f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2048f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2049f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2050f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, 2051f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>* clone() 2052f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2053f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection6<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, 2054f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>(*this); 2055f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2056f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2057f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type, 2058f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 2059f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2060f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection6<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, 2061f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 2062f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2063f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2064f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2065f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6) 2066f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2067f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6); 2068f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2069f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2070f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 2071f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2072f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 2073f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2074f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2075f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 2076f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 2077f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, 2078f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type); 2079f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2080f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2081f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class arg1_type, class arg2_type, class arg3_type, 2082f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg4_type, class arg5_type, class arg6_type, class arg7_type, class mt_policy> 2083f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection7 : public _connection_base7<arg1_type, arg2_type, 2084f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy> 2085f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2086f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2087f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection7() 2088f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2089f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 2090f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 2091f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2092f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2093f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection7(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, 2094f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type)) 2095f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2096f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 2097f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 2098f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2099f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2100f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection7() 2101f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2102f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2103f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2104f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, 2105f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>* clone() 2106f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2107f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection7<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, 2108f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>(*this); 2109f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2110f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2111f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type, 2112f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 2113f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2114f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection7<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, 2115f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 2116f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2117f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2118f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2119f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6, arg7_type a7) 2120f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2121f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6, a7); 2122f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2123f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2124f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 2125f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2126f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 2127f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2128f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2129f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 2130f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 2131f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, 2132f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type); 2133f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2134f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2135f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class dest_type, class arg1_type, class arg2_type, class arg3_type, 2136f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg4_type, class arg5_type, class arg6_type, class arg7_type, 2137f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg8_type, class mt_policy> 2138f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class _connection8 : public _connection_base8<arg1_type, arg2_type, 2139f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> 2140f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2141f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2142f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection8() 2143f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2144f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = NULL; 2145f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = NULL; 2146f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2147f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2148f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection8(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type, 2149f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, 2150f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg7_type, arg8_type)) 2151f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2152f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pobject = pobject; 2153f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_pmemfun = pmemfun; 2154f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2155f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2156f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~_connection8() 2157f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2158f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2159f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2160f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, 2161f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* clone() 2162f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2163f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection8<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, 2164f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>(*this); 2165f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2166f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2167f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type, 2168f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* duplicate(has_slots<mt_policy>* pnewdest) 2169f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2170f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return new _connection8<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, 2171f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>((dest_type *)pnewdest, m_pmemfun); 2172f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2173f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2174f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2175f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8) 2176f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2177f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6, a7, a8); 2178f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2179f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2180f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual has_slots<mt_policy>* getdest() const 2181f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2182f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return m_pobject; 2183f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2184f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2185f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch private: 2186f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch dest_type* m_pobject; 2187f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type, 2188f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type); 2189f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2190f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2191f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2192f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal0 : public _signal_base0<mt_policy> 2193f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2194f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2195f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base0<mt_policy> base; 2196f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2197f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2198f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2199f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal0() 2200f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2201f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2202f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2203f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2204f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal0(const signal0<mt_policy>& s) 2205f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base0<mt_policy>(s) 2206f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2207f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2208f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2209f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2210f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2211f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)()) 2212f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2213f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2214f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection0<desttype, mt_policy>* conn = 2215f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch new _connection0<desttype, mt_policy>(pclass, pmemfun); 2216f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2217f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2218f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2219f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2220f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit() 2221f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2222f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2223f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2224f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2225f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2226f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2227f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2228f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2229f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2230f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2231f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(); 2232f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2233f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2234f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2235f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2236f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2237f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()() 2238f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2239f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2240f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2241f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2242f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2243f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2244f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2245f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2246f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2247f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2248f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(); 2249f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2250f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2251f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2252f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2253f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2254f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2255f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2256f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal1 : public _signal_base1<arg1_type, mt_policy> 2257f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2258f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2259f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base1<arg1_type, mt_policy> base; 2260f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2261f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2262f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2263f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal1() 2264f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2265f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2266f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2267f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2268f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal1(const signal1<arg1_type, mt_policy>& s) 2269f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base1<arg1_type, mt_policy>(s) 2270f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2271f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2272f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2273f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2274f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2275f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type)) 2276f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2277f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2278f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection1<desttype, arg1_type, mt_policy>* conn = 2279f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch new _connection1<desttype, arg1_type, mt_policy>(pclass, pmemfun); 2280f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2281f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2282f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2283f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2284f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit(arg1_type a1) 2285f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2286f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2287f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2288f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2289f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2290f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2291f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2292f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2293f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2294f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2295f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1); 2296f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2297f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2298f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2299f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2300f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2301f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()(arg1_type a1) 2302f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2303f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2304f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2305f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2306f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2307f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2308f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2309f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2310f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2311f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2312f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1); 2313f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2314f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2315f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2316f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2317f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2318f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2319f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2320f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal2 : public _signal_base2<arg1_type, arg2_type, mt_policy> 2321f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2322f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2323f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base2<arg1_type, arg2_type, mt_policy> base; 2324f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2325f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2326f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2327f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal2() 2328f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2329f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2330f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2331f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2332f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal2(const signal2<arg1_type, arg2_type, mt_policy>& s) 2333f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base2<arg1_type, arg2_type, mt_policy>(s) 2334f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2335f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2336f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2337f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2338f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2339f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, 2340f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type)) 2341f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2342f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2343f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection2<desttype, arg1_type, arg2_type, mt_policy>* conn = new 2344f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection2<desttype, arg1_type, arg2_type, mt_policy>(pclass, pmemfun); 2345f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2346f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2347f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2348f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2349f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit(arg1_type a1, arg2_type a2) 2350f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2351f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2352f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2353f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2354f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2355f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2356f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2357f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2358f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2359f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2360f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2); 2361f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2362f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2363f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2364f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2365f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2366f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()(arg1_type a1, arg2_type a2) 2367f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2368f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2369f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2370f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2371f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2372f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2373f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2374f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2375f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2376f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2377f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2); 2378f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2379f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2380f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2381f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2382f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2383f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2384f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2385f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal3 : public _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy> 2386f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2387f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2388f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy> base; 2389f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2390f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2391f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2392f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal3() 2393f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2394f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2395f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2396f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2397f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal3(const signal3<arg1_type, arg2_type, arg3_type, mt_policy>& s) 2398f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy>(s) 2399f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2400f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2401f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2402f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2403f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2404f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, 2405f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type)) 2406f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2407f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2408f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection3<desttype, arg1_type, arg2_type, arg3_type, mt_policy>* conn = 2409f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch new _connection3<desttype, arg1_type, arg2_type, arg3_type, mt_policy>(pclass, 2410f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pmemfun); 2411f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2412f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2413f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2414f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2415f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit(arg1_type a1, arg2_type a2, arg3_type a3) 2416f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2417f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2418f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2419f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2420f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2421f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2422f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2423f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2424f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2425f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2426f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3); 2427f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2428f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2429f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2430f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2431f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2432f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()(arg1_type a1, arg2_type a2, arg3_type a3) 2433f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2434f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2435f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2436f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2437f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2438f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2439f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2440f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2441f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2442f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2443f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3); 2444f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2445f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2446f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2447f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2448f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2449f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2450f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2451f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal4 : public _signal_base4<arg1_type, arg2_type, arg3_type, 2452f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, mt_policy> 2453f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2454f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2455f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy> base; 2456f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2457f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2458f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2459f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal4() 2460f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2461f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2462f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2463f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2464f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal4(const signal4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>& s) 2465f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>(s) 2466f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2467f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2468f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2469f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2470f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2471f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, 2472f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type)) 2473f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2474f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2475f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection4<desttype, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* 2476f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch conn = new _connection4<desttype, arg1_type, arg2_type, arg3_type, 2477f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, mt_policy>(pclass, pmemfun); 2478f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2479f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2480f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2481f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2482f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4) 2483f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2484f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2485f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2486f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2487f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2488f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2489f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2490f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2491f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2492f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2493f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4); 2494f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2495f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2496f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2497f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2498f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2499f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4) 2500f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2501f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2502f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2503f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2504f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2505f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2506f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2507f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2508f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2509f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2510f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4); 2511f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2512f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2513f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2514f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2515f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2516f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2517f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 2518f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2519f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal5 : public _signal_base5<arg1_type, arg2_type, arg3_type, 2520f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, mt_policy> 2521f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2522f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2523f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy> base; 2524f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2525f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2526f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2527f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal5() 2528f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2529f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2530f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2531f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2532f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal5(const signal5<arg1_type, arg2_type, arg3_type, arg4_type, 2533f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>& s) 2534f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type, 2535f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>(s) 2536f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2537f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2538f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2539f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2540f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2541f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, 2542f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type, arg5_type)) 2543f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2544f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2545f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection5<desttype, arg1_type, arg2_type, arg3_type, arg4_type, 2546f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, mt_policy>* conn = new _connection5<desttype, arg1_type, arg2_type, 2547f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg3_type, arg4_type, arg5_type, mt_policy>(pclass, pmemfun); 2548f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2549f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2550f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2551f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2552f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2553f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5) 2554f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2555f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2556f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2557f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2558f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2559f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2560f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2561f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2562f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2563f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2564f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4, a5); 2565f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2566f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2567f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2568f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2569f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2570f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2571f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5) 2572f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2573f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2574f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2575f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2576f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2577f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2578f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2579f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2580f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2581f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2582f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4, a5); 2583f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2584f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2585f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2586f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2587f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2588f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2589f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2590f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 2591f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2592f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal6 : public _signal_base6<arg1_type, arg2_type, arg3_type, 2593f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, mt_policy> 2594f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2595f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2596f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy> base; 2597f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2598f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2599f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2600f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal6() 2601f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2602f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2603f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2604f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2605f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal6(const signal6<arg1_type, arg2_type, arg3_type, arg4_type, 2606f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>& s) 2607f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type, 2608f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>(s) 2609f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2610f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2611f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2612f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2613f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2614f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, 2615f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type, arg5_type, arg6_type)) 2616f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2617f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2618f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection6<desttype, arg1_type, arg2_type, arg3_type, arg4_type, 2619f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, mt_policy>* conn = 2620f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch new _connection6<desttype, arg1_type, arg2_type, arg3_type, 2621f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, mt_policy>(pclass, pmemfun); 2622f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2623f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2624f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2625f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2626f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2627f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6) 2628f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2629f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2630f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2631f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2632f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2633f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2634f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2635f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2636f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2637f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2638f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4, a5, a6); 2639f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2640f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2641f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2642f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2643f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2644f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2645f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6) 2646f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2647f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2648f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2649f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2650f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2651f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2652f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2653f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2654f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2655f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2656f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4, a5, a6); 2657f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2658f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2659f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2660f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2661f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2662f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2663f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 2664f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class arg7_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2665f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal7 : public _signal_base7<arg1_type, arg2_type, arg3_type, 2666f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, arg7_type, mt_policy> 2667f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2668f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2669f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type, 2670f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy> base; 2671f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2672f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2673f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2674f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal7() 2675f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2676f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2677f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2678f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2679f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal7(const signal7<arg1_type, arg2_type, arg3_type, arg4_type, 2680f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>& s) 2681f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type, 2682f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>(s) 2683f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2684f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2685f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2686f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2687f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2688f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, 2689f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, 2690f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg7_type)) 2691f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2692f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2693f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection7<desttype, arg1_type, arg2_type, arg3_type, arg4_type, 2694f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, mt_policy>* conn = 2695f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch new _connection7<desttype, arg1_type, arg2_type, arg3_type, 2696f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>(pclass, pmemfun); 2697f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2698f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2699f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2700f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2701f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2702f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6, arg7_type a7) 2703f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2704f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2705f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2706f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2707f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2708f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2709f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2710f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2711f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2712f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2713f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4, a5, a6, a7); 2714f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2715f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2716f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2717f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2718f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2719f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2720f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6, arg7_type a7) 2721f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2722f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2723f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2724f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2725f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2726f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2727f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2728f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2729f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2730f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2731f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4, a5, a6, a7); 2732f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2733f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2734f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2735f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2736f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2737f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2738f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, 2739f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class arg5_type, class arg6_type, class arg7_type, class arg8_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY> 2740f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch class signal8 : public _signal_base8<arg1_type, arg2_type, arg3_type, 2741f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> 2742f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2743f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch public: 2744f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type, 2745f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> base; 2746f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typedef typename base::connections_list connections_list; 2747f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch using base::m_connected_slots; 2748f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2749f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal8() 2750f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2751f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2752f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2753f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2754f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch signal8(const signal8<arg1_type, arg2_type, arg3_type, arg4_type, 2755f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>& s) 2756f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type, 2757f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>(s) 2758f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2759f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ; 2760f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2761f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2762f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch template<class desttype> 2763f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type, 2764f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, 2765f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg7_type, arg8_type)) 2766f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2767f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2768f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch _connection8<desttype, arg1_type, arg2_type, arg3_type, arg4_type, 2769f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* conn = 2770f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch new _connection8<desttype, arg1_type, arg2_type, arg3_type, 2771f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg4_type, arg5_type, arg6_type, arg7_type, 2772f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg8_type, mt_policy>(pclass, pmemfun); 2773f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch m_connected_slots.push_back(conn); 2774f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pclass->signal_connect(this); 2775f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2776f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2777f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2778f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8) 2779f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2780f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2781f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2782f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2783f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2784f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2785f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2786f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2787f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2788f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2789f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4, a5, a6, a7, a8); 2790f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2791f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2792f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2793f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2794f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2795f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4, 2796f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8) 2797f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2798f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch lock_block<mt_policy> lock(this); 2799f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itNext, it = m_connected_slots.begin(); 2800f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch typename connections_list::const_iterator itEnd = m_connected_slots.end(); 2801f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2802f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch while(it != itEnd) 2803f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { 2804f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch itNext = it; 2805f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch ++itNext; 2806f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2807f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch (*it)->emit(a1, a2, a3, a4, a5, a6, a7, a8); 2808f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2809f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch it = itNext; 2810f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2811f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 2812f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch }; 2813f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2814f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch}; // namespace sigslot 2815f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 2816f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif // TALK_BASE_SIGSLOT_H__ 2817