7 #ifndef MYGUI_DELEGATE_H_
8 #define MYGUI_DELEGATE_H_
29 m_baseDelegateUnlink =
this;
33 return m_baseDelegateUnlink == _unlink->m_baseDelegateUnlink;
40 template <
typename ...Args>
49 mFunctionPointer(_functionPointer)
58 mFunctionPointer(_functionPointer)
67 mFunctionPointer(_functionPointer)
78 if (
nullptr == _delegate)
return false;
79 return _delegate->mObject == mObject && _delegate->mFunctionPointer.compare(mFunctionPointer);
84 return mUnlink == _unlink;
91 void* mObject =
nullptr;
98 template <
typename ...Args>
105 template <
typename T,
typename ...Args>
109 [=](Args&&... args) {
return (_object->*_method)(std::forward<decltype(args)>(args)...); },
117 template <
typename ...Args>
127 mDelegate = _event.mDelegate;
128 const_cast<Delegate&
>(_event).mDelegate =
nullptr;
138 return mDelegate ==
nullptr;
150 mDelegate = _delegate;
161 const_cast<Delegate&
>(_event).mDelegate =
nullptr;
163 if (mDelegate !=
nullptr && !mDelegate->
compare(del))
173 if (mDelegate ==
nullptr)
return;
174 mDelegate->
invoke(args...);
181 template <
typename ...Args>
196 for (
const auto& delegate : mListDelegates)
198 if (delegate)
return false;
205 for (
auto iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
217 for (
auto iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
219 if ((*iter) && (*iter)->compare(_unlink))
229 for (
auto iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
231 if ((*iter) && (*iter)->compare(_delegate))
236 mListDelegates.push_back(_delegate);
241 for (
auto iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
243 if ((*iter) && (*iter)->compare(_delegate))
245 if ((*iter) != _delegate)
delete (*iter);
255 auto iter = mListDelegates.begin();
256 while (iter != mListDelegates.end())
258 if (
nullptr == (*iter))
260 iter = mListDelegates.erase(iter);
264 (*iter)->invoke(args...);
278 mListDelegates = del;
289 mListDelegates = del;
305 for (
auto iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
311 delete_is_not_found(del, _delegates);
318 for (
auto iter = _delegates.begin(); iter != _delegates.end(); ++iter)
320 if ((*iter) && (*iter)->compare(_del))
335 template <
typename ...Args>
337 template <
typename ...Args>
339 template <
typename ...Args>
341 template <
typename ...Args>
343 template <
typename ...Args>
345 template <
typename ...Args>
349 template <
typename ...Args>
351 template <
typename ...Args>
353 template <
typename ...Args>
355 template <
typename ...Args>
357 template <
typename ...Args>
359 template <
typename ...Args>
366 #endif // MYGUI_DELEGATE_H_