input/Stream: remove attribute "cond", replace with handler interface
This adds a bit of overhead, but also adds flexibility to the API, because arbitrary triggers may be invoked from that virtual method implementation, not just Cond::signal(). The motivation for this is to make the handlers more dynamic, for the upcoming buffering class utilizing ProxyInputStream.
This commit is contained in:
@@ -19,8 +19,8 @@
|
||||
|
||||
#include "config.h"
|
||||
#include "InputStream.hxx"
|
||||
#include "Handler.hxx"
|
||||
#include "tag/Tag.hxx"
|
||||
#include "thread/Cond.hxx"
|
||||
#include "util/StringCompare.hxx"
|
||||
|
||||
#include <stdexcept>
|
||||
@@ -47,26 +47,8 @@ InputStream::SetReady() noexcept
|
||||
assert(!ready);
|
||||
|
||||
ready = true;
|
||||
cond.broadcast();
|
||||
}
|
||||
|
||||
void
|
||||
InputStream::WaitReady() noexcept
|
||||
{
|
||||
while (true) {
|
||||
Update();
|
||||
if (ready)
|
||||
break;
|
||||
|
||||
cond.wait(mutex);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
InputStream::LockWaitReady() noexcept
|
||||
{
|
||||
const std::lock_guard<Mutex> protect(mutex);
|
||||
WaitReady();
|
||||
InvokeOnReady();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -177,3 +159,17 @@ InputStream::LockIsEOF() noexcept
|
||||
const std::lock_guard<Mutex> protect(mutex);
|
||||
return IsEOF();
|
||||
}
|
||||
|
||||
void
|
||||
InputStream::InvokeOnReady() noexcept
|
||||
{
|
||||
if (handler != nullptr)
|
||||
handler->OnInputStreamReady();
|
||||
}
|
||||
|
||||
void
|
||||
InputStream::InvokeOnAvailable() noexcept
|
||||
{
|
||||
if (handler != nullptr)
|
||||
handler->OnInputStreamAvailable();
|
||||
}
|
||||
|
Reference in New Issue
Block a user