⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sigslot.h

📁 本人收集整理的一份c/c++跨平台网络库
💻 H
📖 第 1 页 / 共 5 页
字号:
			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 + -