Notify sink enable and disable events.

This commit is contained in:
Peter Johnson
2016-11-18 10:20:56 -08:00
parent 22c11fad36
commit 9945459a41
2 changed files with 35 additions and 22 deletions

View File

@@ -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<std::mutex> 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<std::mutex> 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<std::mutex> 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<SourceImpl> source) {
{
std::lock_guard<std::mutex> lock(m_mutex);