1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860 |
- // sigslot.h: Signal/Slot classes
- //
- // Written by Sarah Thompson (sarah@telergy.com) 2002.
- //
- // License: Public domain. You are free to use this code however you like, with the proviso that
- // the author takes on no responsibility or liability for any use.
- //
- // QUICK DOCUMENTATION
- //
- // (see also the full documentation at http://sigslot.sourceforge.net/)
- //
- // #define switches
- // SIGSLOT_PURE_ISO - Define this to force ISO C++ compliance. This also disables
- // all of the thread safety support on platforms where it is
- // available.
- //
- // SIGSLOT_USE_POSIX_THREADS - Force use of Posix threads when using a C++ compiler other than
- // gcc on a platform that supports Posix threads. (When using gcc,
- // this is the default - use SIGSLOT_PURE_ISO to disable this if
- // necessary)
- //
- // SIGSLOT_DEFAULT_MT_POLICY - Where thread support is enabled, this defaults to multi_threaded_global.
- // Otherwise, the default is single_threaded. #define this yourself to
- // override the default. In pure ISO mode, anything other than
- // single_threaded will cause a compiler error.
- //
- // PLATFORM NOTES
- //
- // Win32 - On Win32, the WIN32 symbol must be #defined. Most mainstream
- // compilers do this by default, but you may need to define it
- // yourself if your build environment is less standard. This causes
- // the Win32 thread support to be compiled in and used automatically.
- //
- // Unix/Linux/BSD, etc. - If you're using gcc, it is assumed that you have Posix threads
- // available, so they are used automatically. You can override this
- // (as under Windows) with the SIGSLOT_PURE_ISO switch. If you're using
- // something other than gcc but still want to use Posix threads, you
- // need to #define SIGSLOT_USE_POSIX_THREADS.
- //
- // ISO C++ - If none of the supported platforms are detected, or if
- // SIGSLOT_PURE_ISO is defined, all multithreading support is turned off,
- // along with any code that might cause a pure ISO C++ environment to
- // complain. Before you ask, gcc -ansi -pedantic won't compile this
- // library, but gcc -ansi is fine. Pedantic mode seems to throw a lot of
- // errors that aren't really there. If you feel like investigating this,
- // please contact the author.
- //
- //
- // THREADING MODES
- //
- // single_threaded - Your program is assumed to be single threaded from the point of view
- // of signal/slot usage (i.e. all objects using signals and slots are
- // created and destroyed from a single thread). Behaviour if objects are
- // destroyed concurrently is undefined (i.e. you'll get the occasional
- // segmentation fault/memory exception).
- //
- // multi_threaded_global - Your program is assumed to be multi threaded. Objects using signals and
- // slots can be safely created and destroyed from any thread, even when
- // connections exist. In multi_threaded_global mode, this is achieved by a
- // single global mutex (actually a critical section on Windows because they
- // are faster). This option uses less OS resources, but results in more
- // opportunities for contention, possibly resulting in more context switches
- // than are strictly necessary.
- //
- // multi_threaded_local - Behaviour in this mode is essentially the same as multi_threaded_global,
- // except that each signal, and each object that inherits has_slots, all
- // have their own mutex/critical section. In practice, this means that
- // mutex collisions (and hence context switches) only happen if they are
- // absolutely essential. However, on some platforms, creating a lot of
- // mutexes can slow down the whole OS, so use this option with care.
- //
- // USING THE LIBRARY
- //
- // See the full documentation at http://sigslot.sourceforge.net/
- //
- //
- // Libjingle specific:
- // This file has been modified such that has_slots and signalx do not have to be
- // using the same threading requirements. E.g. it is possible to connect a
- // has_slots<single_threaded> and signal0<multi_threaded_local> or
- // has_slots<multi_threaded_local> and signal0<single_threaded>.
- // If has_slots is single threaded the user must ensure that it is not trying
- // to connect or disconnect to signalx concurrently or data race may occur.
- // If signalx is single threaded the user must ensure that disconnect, connect
- // or signal is not happening concurrently or data race may occur.
- #ifndef TALK_BASE_SIGSLOT_H__
- #define TALK_BASE_SIGSLOT_H__
- #include <list>
- #include <set>
- #include <stdlib.h>
- // On our copy of sigslot.h, we set single threading as default.
- #define SIGSLOT_DEFAULT_MT_POLICY single_threaded
- // For now, this avoids windows.h in bindings (PeerConnectionImpl.h) on WIN32
- // TODO: wrap win32 crit section and move to another file instead (Bug 932570)
- #define SIGSLOT_LEAVE_OUT_MULTITHREADING 1
- #if defined(SIGSLOT_PURE_ISO) || (!defined(WIN32) && !defined(__GNUG__) && !defined(SIGSLOT_USE_POSIX_THREADS))
- # define _SIGSLOT_SINGLE_THREADED
- #elif defined(WIN32)
- # define _SIGSLOT_HAS_WIN32_THREADS
- # ifndef SIGSLOT_LEAVE_OUT_MULTITHREADING
- # if !defined(WIN32_LEAN_AND_MEAN)
- # define WIN32_LEAN_AND_MEAN
- # endif
- # include "windows.h"
- # endif
- #elif defined(__GNUG__) || defined(SIGSLOT_USE_POSIX_THREADS)
- # define _SIGSLOT_HAS_POSIX_THREADS
- # include <pthread.h>
- #else
- # define _SIGSLOT_SINGLE_THREADED
- #endif
- #ifndef SIGSLOT_DEFAULT_MT_POLICY
- # ifdef _SIGSLOT_SINGLE_THREADED
- # define SIGSLOT_DEFAULT_MT_POLICY single_threaded
- # else
- # define SIGSLOT_DEFAULT_MT_POLICY multi_threaded_local
- # endif
- #endif
- // TODO: change this namespace to talk_base?
- namespace sigslot {
- class single_threaded
- {
- public:
- single_threaded()
- {
- ;
- }
- virtual ~single_threaded()
- {
- ;
- }
- virtual void lock()
- {
- ;
- }
- virtual void unlock()
- {
- ;
- }
- };
- #ifndef SIGSLOT_LEAVE_OUT_MULTITHREADING
- # ifdef _SIGSLOT_HAS_WIN32_THREADS
- // The multi threading policies only get compiled in if they are enabled.
- class multi_threaded_global
- {
- public:
- multi_threaded_global()
- {
- static bool isinitialised = false;
- if(!isinitialised)
- {
- InitializeCriticalSection(get_critsec());
- isinitialised = true;
- }
- }
- multi_threaded_global(const multi_threaded_global&)
- {
- ;
- }
- virtual ~multi_threaded_global()
- {
- ;
- }
- virtual void lock()
- {
- EnterCriticalSection(get_critsec());
- }
- virtual void unlock()
- {
- LeaveCriticalSection(get_critsec());
- }
- private:
- CRITICAL_SECTION* get_critsec()
- {
- static CRITICAL_SECTION g_critsec;
- return &g_critsec;
- }
- };
- class multi_threaded_local
- {
- public:
- multi_threaded_local()
- {
- InitializeCriticalSection(&m_critsec);
- }
- multi_threaded_local(const multi_threaded_local&)
- {
- InitializeCriticalSection(&m_critsec);
- }
- virtual ~multi_threaded_local()
- {
- DeleteCriticalSection(&m_critsec);
- }
- virtual void lock()
- {
- EnterCriticalSection(&m_critsec);
- }
- virtual void unlock()
- {
- LeaveCriticalSection(&m_critsec);
- }
- private:
- CRITICAL_SECTION m_critsec;
- };
- # endif // _SIGSLOT_HAS_WIN32_THREADS
- # ifdef _SIGSLOT_HAS_POSIX_THREADS
- // The multi threading policies only get compiled in if they are enabled.
- class multi_threaded_global
- {
- public:
- multi_threaded_global()
- {
- pthread_mutex_init(get_mutex(), NULL);
- }
- multi_threaded_global(const multi_threaded_global&)
- {
- ;
- }
- virtual ~multi_threaded_global()
- {
- ;
- }
- virtual void lock()
- {
- pthread_mutex_lock(get_mutex());
- }
- virtual void unlock()
- {
- pthread_mutex_unlock(get_mutex());
- }
- private:
- pthread_mutex_t* get_mutex()
- {
- static pthread_mutex_t g_mutex;
- return &g_mutex;
- }
- };
- class multi_threaded_local
- {
- public:
- multi_threaded_local()
- {
- pthread_mutex_init(&m_mutex, NULL);
- }
- multi_threaded_local(const multi_threaded_local&)
- {
- pthread_mutex_init(&m_mutex, NULL);
- }
- virtual ~multi_threaded_local()
- {
- pthread_mutex_destroy(&m_mutex);
- }
- virtual void lock()
- {
- pthread_mutex_lock(&m_mutex);
- }
- virtual void unlock()
- {
- pthread_mutex_unlock(&m_mutex);
- }
- private:
- pthread_mutex_t m_mutex;
- };
- # endif // _SIGSLOT_HAS_POSIX_THREADS
- #endif // SIGSLOT_LEAVE_OUT_MULTITHREADING
- template<class mt_policy>
- class lock_block
- {
- public:
- mt_policy *m_mutex;
- explicit lock_block(mt_policy *mtx)
- : m_mutex(mtx)
- {
- m_mutex->lock();
- }
- ~lock_block()
- {
- m_mutex->unlock();
- }
- };
- class has_slots_interface;
- template<class mt_policy>
- class _connection_base0
- {
- public:
- virtual ~_connection_base0() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit() = 0;
- virtual _connection_base0* clone() = 0;
- virtual _connection_base0* duplicate(has_slots_interface* pnewdest) = 0;
- };
- template<class arg1_type, class mt_policy>
- class _connection_base1
- {
- public:
- virtual ~_connection_base1() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit(arg1_type) = 0;
- virtual _connection_base1<arg1_type, mt_policy>* clone() = 0;
- virtual _connection_base1<arg1_type, mt_policy>* duplicate(has_slots_interface* pnewdest) = 0;
- };
- template<class arg1_type, class arg2_type, class mt_policy>
- class _connection_base2
- {
- public:
- virtual ~_connection_base2() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit(arg1_type, arg2_type) = 0;
- virtual _connection_base2<arg1_type, arg2_type, mt_policy>* clone() = 0;
- virtual _connection_base2<arg1_type, arg2_type, mt_policy>* duplicate(has_slots_interface* pnewdest) = 0;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class mt_policy>
- class _connection_base3
- {
- public:
- virtual ~_connection_base3() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit(arg1_type, arg2_type, arg3_type) = 0;
- virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* clone() = 0;
- virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* duplicate(has_slots_interface* pnewdest) = 0;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, class mt_policy>
- class _connection_base4
- {
- public:
- virtual ~_connection_base4() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type) = 0;
- virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* clone() = 0;
- virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* duplicate(has_slots_interface* pnewdest) = 0;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class mt_policy>
- class _connection_base5
- {
- public:
- virtual ~_connection_base5() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type) = 0;
- virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>* clone() = 0;
- virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>* duplicate(has_slots_interface* pnewdest) = 0;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class mt_policy>
- class _connection_base6
- {
- public:
- virtual ~_connection_base6() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type,
- arg6_type) = 0;
- virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>* clone() = 0;
- virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>* duplicate(has_slots_interface* pnewdest) = 0;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class arg7_type, class mt_policy>
- class _connection_base7
- {
- public:
- virtual ~_connection_base7() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type,
- arg6_type, arg7_type) = 0;
- virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>* clone() = 0;
- virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>* duplicate(has_slots_interface* pnewdest) = 0;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class arg7_type, class arg8_type, class mt_policy>
- class _connection_base8
- {
- public:
- virtual ~_connection_base8() {}
- virtual has_slots_interface* getdest() const = 0;
- virtual void emit(arg1_type, arg2_type, arg3_type, arg4_type, arg5_type,
- arg6_type, arg7_type, arg8_type) = 0;
- virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* clone() = 0;
- virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* duplicate(has_slots_interface* pnewdest) = 0;
- };
- class _signal_base_interface
- {
- public:
- virtual void slot_disconnect(has_slots_interface* pslot) = 0;
- virtual void slot_duplicate(const has_slots_interface* poldslot, has_slots_interface* pnewslot) = 0;
- };
- template<class mt_policy>
- class _signal_base : public _signal_base_interface, public mt_policy
- {
- };
- class has_slots_interface
- {
- public:
- has_slots_interface()
- {
- ;
- }
- virtual void signal_connect(_signal_base_interface* sender) = 0;
- virtual void signal_disconnect(_signal_base_interface* sender) = 0;
- virtual ~has_slots_interface()
- {
- }
- virtual void disconnect_all() = 0;
- };
- template<class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class has_slots : public has_slots_interface, public mt_policy
- {
- private:
- typedef std::set<_signal_base_interface*> sender_set;
- typedef sender_set::const_iterator const_iterator;
- public:
- has_slots()
- {
- ;
- }
- has_slots(const has_slots& hs)
- {
- lock_block<mt_policy> lock(this);
- const_iterator it = hs.m_senders.begin();
- const_iterator itEnd = hs.m_senders.end();
- while(it != itEnd)
- {
- (*it)->slot_duplicate(&hs, this);
- m_senders.insert(*it);
- ++it;
- }
- }
- void signal_connect(_signal_base_interface* sender)
- {
- lock_block<mt_policy> lock(this);
- m_senders.insert(sender);
- }
- void signal_disconnect(_signal_base_interface* sender)
- {
- lock_block<mt_policy> lock(this);
- m_senders.erase(sender);
- }
- virtual ~has_slots()
- {
- disconnect_all();
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- const_iterator it = m_senders.begin();
- const_iterator itEnd = m_senders.end();
- while(it != itEnd)
- {
- (*it)->slot_disconnect(this);
- ++it;
- }
- m_senders.erase(m_senders.begin(), m_senders.end());
- }
- private:
- sender_set m_senders;
- };
- template<class mt_policy>
- class _signal_base0 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base0<mt_policy> *> connections_list;
- _signal_base0()
- {
- ;
- }
- _signal_base0(const _signal_base0& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- ~_signal_base0()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class arg1_type, class mt_policy>
- class _signal_base1 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base1<arg1_type, mt_policy> *> connections_list;
- _signal_base1()
- {
- ;
- }
- _signal_base1(const _signal_base1<arg1_type, mt_policy>& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- ~_signal_base1()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class arg1_type, class arg2_type, class mt_policy>
- class _signal_base2 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base2<arg1_type, arg2_type, mt_policy> *>
- connections_list;
- _signal_base2()
- {
- ;
- }
- _signal_base2(const _signal_base2<arg1_type, arg2_type, mt_policy>& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- ~_signal_base2()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class mt_policy>
- class _signal_base3 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base3<arg1_type, arg2_type, arg3_type, mt_policy> *>
- connections_list;
- _signal_base3()
- {
- ;
- }
- _signal_base3(const _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy>& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- ~_signal_base3()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, class mt_policy>
- class _signal_base4 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base4<arg1_type, arg2_type, arg3_type,
- arg4_type, mt_policy> *> connections_list;
- _signal_base4()
- {
- ;
- }
- _signal_base4(const _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- ~_signal_base4()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class mt_policy>
- class _signal_base5 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base5<arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, mt_policy> *> connections_list;
- _signal_base5()
- {
- ;
- }
- _signal_base5(const _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- ~_signal_base5()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class mt_policy>
- class _signal_base6 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base6<arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, mt_policy> *> connections_list;
- _signal_base6()
- {
- ;
- }
- _signal_base6(const _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- ~_signal_base6()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class arg7_type, class mt_policy>
- class _signal_base7 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base7<arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, arg7_type, mt_policy> *> connections_list;
- _signal_base7()
- {
- ;
- }
- _signal_base7(const _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- ~_signal_base7()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class arg7_type, class arg8_type, class mt_policy>
- class _signal_base8 : public _signal_base<mt_policy>
- {
- public:
- typedef std::list<_connection_base8<arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> *>
- connections_list;
- _signal_base8()
- {
- ;
- }
- _signal_base8(const _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>& s)
- : _signal_base<mt_policy>(s)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = s.m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = s.m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_connect(this);
- m_connected_slots.push_back((*it)->clone());
- ++it;
- }
- }
- void slot_duplicate(const has_slots_interface* oldtarget, has_slots_interface* newtarget)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == oldtarget)
- {
- m_connected_slots.push_back((*it)->duplicate(newtarget));
- }
- ++it;
- }
- }
- ~_signal_base8()
- {
- disconnect_all();
- }
- bool is_empty()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- return it == itEnd;
- }
- void disconnect_all()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- (*it)->getdest()->signal_disconnect(this);
- delete *it;
- ++it;
- }
- m_connected_slots.erase(m_connected_slots.begin(), m_connected_slots.end());
- }
- #ifdef _DEBUG
- bool connected(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- if ((*it)->getdest() == pclass)
- return true;
- it = itNext;
- }
- return false;
- }
- #endif
- void disconnect(has_slots_interface* pclass)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- if((*it)->getdest() == pclass)
- {
- delete *it;
- m_connected_slots.erase(it);
- pclass->signal_disconnect(this);
- return;
- }
- ++it;
- }
- }
- void slot_disconnect(has_slots_interface* pslot)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::iterator it = m_connected_slots.begin();
- typename connections_list::iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- typename connections_list::iterator itNext = it;
- ++itNext;
- if((*it)->getdest() == pslot)
- {
- delete *it;
- m_connected_slots.erase(it);
- }
- it = itNext;
- }
- }
- protected:
- connections_list m_connected_slots;
- };
- template<class dest_type, class mt_policy>
- class _connection0 : public _connection_base0<mt_policy>
- {
- public:
- _connection0()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection0(dest_type* pobject, void (dest_type::*pmemfun)())
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection0()
- {
- }
- virtual _connection_base0<mt_policy>* clone()
- {
- return new _connection0<dest_type, mt_policy>(*this);
- }
- virtual _connection_base0<mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection0<dest_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit()
- {
- (m_pobject->*m_pmemfun)();
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)();
- };
- template<class dest_type, class arg1_type, class mt_policy>
- class _connection1 : public _connection_base1<arg1_type, mt_policy>
- {
- public:
- _connection1()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection1(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type))
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection1()
- {
- }
- virtual _connection_base1<arg1_type, mt_policy>* clone()
- {
- return new _connection1<dest_type, arg1_type, mt_policy>(*this);
- }
- virtual _connection_base1<arg1_type, mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection1<dest_type, arg1_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit(arg1_type a1)
- {
- (m_pobject->*m_pmemfun)(a1);
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)(arg1_type);
- };
- template<class dest_type, class arg1_type, class arg2_type, class mt_policy>
- class _connection2 : public _connection_base2<arg1_type, arg2_type, mt_policy>
- {
- public:
- _connection2()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection2(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type,
- arg2_type))
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection2()
- {
- }
- virtual _connection_base2<arg1_type, arg2_type, mt_policy>* clone()
- {
- return new _connection2<dest_type, arg1_type, arg2_type, mt_policy>(*this);
- }
- virtual _connection_base2<arg1_type, arg2_type, mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection2<dest_type, arg1_type, arg2_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit(arg1_type a1, arg2_type a2)
- {
- (m_pobject->*m_pmemfun)(a1, a2);
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)(arg1_type, arg2_type);
- };
- template<class dest_type, class arg1_type, class arg2_type, class arg3_type, class mt_policy>
- class _connection3 : public _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>
- {
- public:
- _connection3()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection3(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type,
- arg2_type, arg3_type))
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection3()
- {
- }
- virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* clone()
- {
- return new _connection3<dest_type, arg1_type, arg2_type, arg3_type, mt_policy>(*this);
- }
- virtual _connection_base3<arg1_type, arg2_type, arg3_type, mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection3<dest_type, arg1_type, arg2_type, arg3_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3)
- {
- (m_pobject->*m_pmemfun)(a1, a2, a3);
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type);
- };
- template<class dest_type, class arg1_type, class arg2_type, class arg3_type,
- class arg4_type, class mt_policy>
- class _connection4 : public _connection_base4<arg1_type, arg2_type,
- arg3_type, arg4_type, mt_policy>
- {
- public:
- _connection4()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection4(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type))
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection4()
- {
- }
- virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* clone()
- {
- return new _connection4<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>(*this);
- }
- virtual _connection_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection4<dest_type, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3,
- arg4_type a4)
- {
- (m_pobject->*m_pmemfun)(a1, a2, a3, a4);
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type,
- arg4_type);
- };
- template<class dest_type, class arg1_type, class arg2_type, class arg3_type,
- class arg4_type, class arg5_type, class mt_policy>
- class _connection5 : public _connection_base5<arg1_type, arg2_type,
- arg3_type, arg4_type, arg5_type, mt_policy>
- {
- public:
- _connection5()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection5(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type, arg5_type))
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection5()
- {
- }
- virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>* clone()
- {
- return new _connection5<dest_type, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>(*this);
- }
- virtual _connection_base5<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection5<dest_type, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5)
- {
- (m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5);
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type);
- };
- template<class dest_type, class arg1_type, class arg2_type, class arg3_type,
- class arg4_type, class arg5_type, class arg6_type, class mt_policy>
- class _connection6 : public _connection_base6<arg1_type, arg2_type,
- arg3_type, arg4_type, arg5_type, arg6_type, mt_policy>
- {
- public:
- _connection6()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection6(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type, arg5_type, arg6_type))
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection6()
- {
- }
- virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>* clone()
- {
- return new _connection6<dest_type, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>(*this);
- }
- virtual _connection_base6<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection6<dest_type, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6)
- {
- (m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6);
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type);
- };
- template<class dest_type, class arg1_type, class arg2_type, class arg3_type,
- class arg4_type, class arg5_type, class arg6_type, class arg7_type, class mt_policy>
- class _connection7 : public _connection_base7<arg1_type, arg2_type,
- arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>
- {
- public:
- _connection7()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection7(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, arg7_type))
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection7()
- {
- }
- virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>* clone()
- {
- return new _connection7<dest_type, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>(*this);
- }
- virtual _connection_base7<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection7<dest_type, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6, arg7_type a7)
- {
- (m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6, a7);
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type);
- };
- template<class dest_type, class arg1_type, class arg2_type, class arg3_type,
- class arg4_type, class arg5_type, class arg6_type, class arg7_type,
- class arg8_type, class mt_policy>
- class _connection8 : public _connection_base8<arg1_type, arg2_type,
- arg3_type, arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>
- {
- public:
- _connection8()
- {
- m_pobject = NULL;
- m_pmemfun = NULL;
- }
- _connection8(dest_type* pobject, void (dest_type::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type, arg5_type, arg6_type,
- arg7_type, arg8_type))
- {
- m_pobject = pobject;
- m_pmemfun = pmemfun;
- }
- virtual ~_connection8()
- {
- }
- virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* clone()
- {
- return new _connection8<dest_type, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>(*this);
- }
- virtual _connection_base8<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* duplicate(has_slots_interface* pnewdest)
- {
- return new _connection8<dest_type, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>((dest_type *)pnewdest, m_pmemfun);
- }
- virtual void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8)
- {
- (m_pobject->*m_pmemfun)(a1, a2, a3, a4, a5, a6, a7, a8);
- }
- virtual has_slots_interface* getdest() const
- {
- return m_pobject;
- }
- private:
- dest_type* m_pobject;
- void (dest_type::* m_pmemfun)(arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type);
- };
- template<class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal0 : public _signal_base0<mt_policy>
- {
- public:
- typedef _signal_base0<mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal0()
- {
- ;
- }
- signal0(const signal0<mt_policy>& s)
- : _signal_base0<mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)())
- {
- lock_block<mt_policy> lock(this);
- _connection0<desttype, mt_policy>* conn =
- new _connection0<desttype, mt_policy>(pclass, pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit();
- it = itNext;
- }
- }
- void operator()()
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit();
- it = itNext;
- }
- }
- };
- template<class arg1_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal1 : public _signal_base1<arg1_type, mt_policy>
- {
- public:
- typedef _signal_base1<arg1_type, mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal1()
- {
- ;
- }
- signal1(const signal1<arg1_type, mt_policy>& s)
- : _signal_base1<arg1_type, mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type))
- {
- lock_block<mt_policy> lock(this);
- _connection1<desttype, arg1_type, mt_policy>* conn =
- new _connection1<desttype, arg1_type, mt_policy>(pclass, pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit(arg1_type a1)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1);
- it = itNext;
- }
- }
- void operator()(arg1_type a1)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1);
- it = itNext;
- }
- }
- };
- template<class arg1_type, class arg2_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal2 : public _signal_base2<arg1_type, arg2_type, mt_policy>
- {
- public:
- typedef _signal_base2<arg1_type, arg2_type, mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal2()
- {
- ;
- }
- signal2(const signal2<arg1_type, arg2_type, mt_policy>& s)
- : _signal_base2<arg1_type, arg2_type, mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type,
- arg2_type))
- {
- lock_block<mt_policy> lock(this);
- _connection2<desttype, arg1_type, arg2_type, mt_policy>* conn = new
- _connection2<desttype, arg1_type, arg2_type, mt_policy>(pclass, pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit(arg1_type a1, arg2_type a2)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2);
- it = itNext;
- }
- }
- void operator()(arg1_type a1, arg2_type a2)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2);
- it = itNext;
- }
- }
- };
- template<class arg1_type, class arg2_type, class arg3_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal3 : public _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy>
- {
- public:
- typedef _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal3()
- {
- ;
- }
- signal3(const signal3<arg1_type, arg2_type, arg3_type, mt_policy>& s)
- : _signal_base3<arg1_type, arg2_type, arg3_type, mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type,
- arg2_type, arg3_type))
- {
- lock_block<mt_policy> lock(this);
- _connection3<desttype, arg1_type, arg2_type, arg3_type, mt_policy>* conn =
- new _connection3<desttype, arg1_type, arg2_type, arg3_type, mt_policy>(pclass,
- pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit(arg1_type a1, arg2_type a2, arg3_type a3)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3);
- it = itNext;
- }
- }
- void operator()(arg1_type a1, arg2_type a2, arg3_type a3)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3);
- it = itNext;
- }
- }
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal4 : public _signal_base4<arg1_type, arg2_type, arg3_type,
- arg4_type, mt_policy>
- {
- public:
- typedef _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal4()
- {
- ;
- }
- signal4(const signal4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>& s)
- : _signal_base4<arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type))
- {
- lock_block<mt_policy> lock(this);
- _connection4<desttype, arg1_type, arg2_type, arg3_type, arg4_type, mt_policy>*
- conn = new _connection4<desttype, arg1_type, arg2_type, arg3_type,
- arg4_type, mt_policy>(pclass, pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4);
- it = itNext;
- }
- }
- void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4);
- it = itNext;
- }
- }
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal5 : public _signal_base5<arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, mt_policy>
- {
- public:
- typedef _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal5()
- {
- ;
- }
- signal5(const signal5<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>& s)
- : _signal_base5<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type, arg5_type))
- {
- lock_block<mt_policy> lock(this);
- _connection5<desttype, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, mt_policy>* conn = new _connection5<desttype, arg1_type, arg2_type,
- arg3_type, arg4_type, arg5_type, mt_policy>(pclass, pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4, a5);
- it = itNext;
- }
- }
- void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4, a5);
- it = itNext;
- }
- }
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal6 : public _signal_base6<arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, mt_policy>
- {
- public:
- typedef _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type, arg5_type, arg6_type, mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal6()
- {
- ;
- }
- signal6(const signal6<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>& s)
- : _signal_base6<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type, arg5_type, arg6_type))
- {
- lock_block<mt_policy> lock(this);
- _connection6<desttype, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, mt_policy>* conn =
- new _connection6<desttype, arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, mt_policy>(pclass, pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4, a5, a6);
- it = itNext;
- }
- }
- void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4, a5, a6);
- it = itNext;
- }
- }
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class arg7_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal7 : public _signal_base7<arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>
- {
- public:
- typedef _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal7()
- {
- ;
- }
- signal7(const signal7<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>& s)
- : _signal_base7<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type, arg5_type, arg6_type,
- arg7_type))
- {
- lock_block<mt_policy> lock(this);
- _connection7<desttype, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, mt_policy>* conn =
- new _connection7<desttype, arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, arg7_type, mt_policy>(pclass, pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6, arg7_type a7)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4, a5, a6, a7);
- it = itNext;
- }
- }
- void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6, arg7_type a7)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4, a5, a6, a7);
- it = itNext;
- }
- }
- };
- template<class arg1_type, class arg2_type, class arg3_type, class arg4_type,
- class arg5_type, class arg6_type, class arg7_type, class arg8_type, class mt_policy = SIGSLOT_DEFAULT_MT_POLICY>
- class signal8 : public _signal_base8<arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>
- {
- public:
- typedef _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy> base;
- typedef typename base::connections_list connections_list;
- using base::m_connected_slots;
- signal8()
- {
- ;
- }
- signal8(const signal8<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>& s)
- : _signal_base8<arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>(s)
- {
- ;
- }
- template<class desttype>
- void connect(desttype* pclass, void (desttype::*pmemfun)(arg1_type,
- arg2_type, arg3_type, arg4_type, arg5_type, arg6_type,
- arg7_type, arg8_type))
- {
- lock_block<mt_policy> lock(this);
- _connection8<desttype, arg1_type, arg2_type, arg3_type, arg4_type,
- arg5_type, arg6_type, arg7_type, arg8_type, mt_policy>* conn =
- new _connection8<desttype, arg1_type, arg2_type, arg3_type,
- arg4_type, arg5_type, arg6_type, arg7_type,
- arg8_type, mt_policy>(pclass, pmemfun);
- m_connected_slots.push_back(conn);
- pclass->signal_connect(this);
- }
- void emit(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4, a5, a6, a7, a8);
- it = itNext;
- }
- }
- void operator()(arg1_type a1, arg2_type a2, arg3_type a3, arg4_type a4,
- arg5_type a5, arg6_type a6, arg7_type a7, arg8_type a8)
- {
- lock_block<mt_policy> lock(this);
- typename connections_list::const_iterator itNext, it = m_connected_slots.begin();
- typename connections_list::const_iterator itEnd = m_connected_slots.end();
- while(it != itEnd)
- {
- itNext = it;
- ++itNext;
- (*it)->emit(a1, a2, a3, a4, a5, a6, a7, a8);
- it = itNext;
- }
- }
- };
- } // namespace sigslot
- #endif // TALK_BASE_SIGSLOT_H__
|