diff --git a/src/SinkImpl.cpp b/src/SinkImpl.cpp index b0c381b4fc..977d4988cb 100644 --- a/src/SinkImpl.cpp +++ b/src/SinkImpl.cpp @@ -7,6 +7,7 @@ #include "SinkImpl.h" +#include "Notifier.h" #include "SourceImpl.h" using namespace cs; @@ -32,6 +33,37 @@ llvm::StringRef SinkImpl::GetDescription( return llvm::StringRef{buf.data(), buf.size()}; } +void SinkImpl::Enable() { + std::lock_guard lock(m_mutex); + ++m_enabledCount; + if (m_enabledCount == 1) { + if (m_source) m_source->EnableSink(); + Notifier::GetInstance().NotifySink(*this, CS_SINK_ENABLED); + } +} + +void SinkImpl::Disable() { + std::lock_guard lock(m_mutex); + --m_enabledCount; + if (m_enabledCount == 0) { + if (m_source) m_source->DisableSink(); + Notifier::GetInstance().NotifySink(*this, CS_SINK_DISABLED); + } +} + +void SinkImpl::SetEnabled(bool enabled) { + std::lock_guard lock(m_mutex); + if (enabled && m_enabledCount == 0) { + if (m_source) m_source->EnableSink(); + m_enabledCount = 1; + Notifier::GetInstance().NotifySink(*this, CS_SINK_ENABLED); + } else if (!enabled && m_enabledCount > 0) { + if (m_source) m_source->DisableSink(); + m_enabledCount = 0; + Notifier::GetInstance().NotifySink(*this, CS_SINK_DISABLED); + } +} + void SinkImpl::SetSource(std::shared_ptr source) { { std::lock_guard lock(m_mutex); diff --git a/src/SinkImpl.h b/src/SinkImpl.h index af155a09d4..d73145bf51 100644 --- a/src/SinkImpl.h +++ b/src/SinkImpl.h @@ -32,28 +32,9 @@ class SinkImpl { void SetDescription(llvm::StringRef description); llvm::StringRef GetDescription(llvm::SmallVectorImpl& buf) const; - void Enable() { - std::lock_guard lock(m_mutex); - if (m_enabledCount == 0 && m_source) m_source->EnableSink(); - ++m_enabledCount; - } - - void Disable() { - std::lock_guard lock(m_mutex); - --m_enabledCount; - if (m_enabledCount == 0 && m_source) m_source->DisableSink(); - } - - void SetEnabled(bool enabled) { - std::lock_guard lock(m_mutex); - if (enabled && m_enabledCount == 0) { - if (m_source) m_source->EnableSink(); - m_enabledCount = 1; - } else if (!enabled && m_enabledCount > 0) { - if (m_source) m_source->DisableSink(); - m_enabledCount = 0; - } - } + void Enable(); + void Disable(); + void SetEnabled(bool enabled); void SetSource(std::shared_ptr source);