11 #include "threads/CriticalSection.h"    20 using RegistrationIdentifierType = int;
    28   virtual void Unregister(RegistrationIdentifierType 
id) = 0;
    33   std::weak_ptr<ISignalHandlerData> m_list;
    34   RegistrationIdentifierType m_registration;
    36   template<
typename ManagedT>
    39   CSignalRegistration(std::shared_ptr<ISignalHandlerData> 
const& list, RegistrationIdentifierType registration)
    40   : m_list{list}, m_registration{registration}
    52     *
this = std::move(other);
    58     std::swap(m_list, other.m_list);
    59     m_registration = other.m_registration;
    68   inline void Unregister()
    70     if (
auto list = m_list.lock())
    72       list->Unregister(m_registration);
    78 template<
typename ManagedT>
    89     CCriticalSection m_handlerCriticalSection;
    90     std::map<RegistrationIdentifierType, ManagedT> m_handlers;
    92     void Unregister(RegistrationIdentifierType 
id)
 override    94       std::unique_lock<CCriticalSection> lock(m_handlerCriticalSection);
    99   std::shared_ptr<Data> m_data;
   100   RegistrationIdentifierType m_lastRegistrationId{};
   112     std::unique_lock<CCriticalSection> lock(m_data->m_handlerCriticalSection);
   113     bool inserted{
false};
   116       inserted = m_data->m_handlers.emplace(++m_lastRegistrationId, handler).second;
   118     return {m_data, m_lastRegistrationId};
   126   template<
typename... ArgsT>
   129     std::unique_lock<CCriticalSection> lock(m_data->m_handlerCriticalSection);
   130     for (
auto const& handler : *
this)
   132       handler.second(std::forward<ArgsT>(args)...);
   136   auto begin()
 const { 
return m_data->m_handlers.cbegin(); }
   138   auto end()
 const { 
return m_data->m_handlers.cend(); }
   147     return m_data->m_handlerCriticalSection;
 void Invoke(ArgsT &&... args)
Invoke all registered signal handlers with the provided arguments when the signal type is a std::func...
Definition: Signals.h:127
CCriticalSection const  & CriticalSection() const
Get critical section for accessing the handler list. 
Definition: Signals.h:145
Definition: AudioDecoder.h:18