| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | 
							- #include "StdAfx.h"
 
- namespace DuiLib {
 
- CDelegateBase::CDelegateBase(void* pObject, void* pFn) 
 
- {
 
-     m_pObject = pObject;
 
-     m_pFn = pFn; 
 
- }
 
- CDelegateBase::CDelegateBase(const CDelegateBase& rhs) 
 
- {
 
-     m_pObject = rhs.m_pObject;
 
-     m_pFn = rhs.m_pFn; 
 
- }
 
- CDelegateBase::~CDelegateBase()
 
- {
 
- }
 
- bool CDelegateBase::Equals(const CDelegateBase& rhs) const 
 
- {
 
-     return m_pObject == rhs.m_pObject && m_pFn == rhs.m_pFn; 
 
- }
 
- bool CDelegateBase::operator() (void* param) 
 
- {
 
-     return Invoke(param); 
 
- }
 
- void* CDelegateBase::GetFn() 
 
- {
 
-     return m_pFn; 
 
- }
 
- void* CDelegateBase::GetObject() 
 
- {
 
-     return m_pObject; 
 
- }
 
- CEventSource::~CEventSource()
 
- {
 
-     for( int i = 0; i < m_aDelegates.GetSize(); i++ ) {
 
-         CDelegateBase* pObject = static_cast<CDelegateBase*>(m_aDelegates[i]);
 
-         if( pObject) delete pObject;
 
-     }
 
- }
 
- CEventSource::operator bool()
 
- {
 
-     return m_aDelegates.GetSize() > 0;
 
- }
 
- void CEventSource::operator+= (const CDelegateBase& d)
 
- { 
 
-     for( int i = 0; i < m_aDelegates.GetSize(); i++ ) {
 
-         CDelegateBase* pObject = static_cast<CDelegateBase*>(m_aDelegates[i]);
 
-         if( pObject && pObject->Equals(d) ) return;
 
-     }
 
-     m_aDelegates.Add(d.Copy());
 
- }
 
- void CEventSource::operator+= (FnType pFn)
 
- { 
 
-     (*this) += MakeDelegate(pFn);
 
- }
 
- void CEventSource::operator-= (const CDelegateBase& d) 
 
- {
 
-     for( int i = 0; i < m_aDelegates.GetSize(); i++ ) {
 
-         CDelegateBase* pObject = static_cast<CDelegateBase*>(m_aDelegates[i]);
 
-         if( pObject && pObject->Equals(d) ) {
 
-             delete pObject;
 
-             m_aDelegates.Remove(i);
 
-             return;
 
-         }
 
-     }
 
- }
 
- void CEventSource::operator-= (FnType pFn)
 
- { 
 
-     (*this) -= MakeDelegate(pFn);
 
- }
 
- bool CEventSource::operator() (void* param) 
 
- {
 
-     for( int i = 0; i < m_aDelegates.GetSize(); i++ ) {
 
-         CDelegateBase* pObject = static_cast<CDelegateBase*>(m_aDelegates[i]);
 
-         if( pObject && !(*pObject)(param) ) return false;
 
-     }
 
-     return true;
 
- }
 
- } // namespace DuiLib
 
 
  |