📄 sigslot.h
字号:
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<mt_policy>* 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<mt_policy>* 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<mt_policy>* 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) { m_connected_slots.erase(it); // delete *it; } it = itNext; } } void slot_duplicate(const has_slots<mt_policy>* oldtarget, has_slots<mt_policy>* 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<mt_policy>* oldtarget, has_slots<mt_policy>* 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(); } 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<mt_policy>* 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<mt_policy>* 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<mt_policy>* 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) { m_connected_slots.erase(it); // delete *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<mt_policy>* oldtarget, has_slots<mt_policy>* 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(); } 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<mt_policy>* 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<mt_policy>* 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<mt_policy>* 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) { m_connected_slots.erase(it); // delete *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<mt_policy>* oldtarget, has_slots<mt_policy>* 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(); } 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<mt_policy>* 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<mt_policy>* 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<mt_policy>* 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) { m_connected_slots.erase(it); // delete *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; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -