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:
@@ -22,6 +22,8 @@
|
||||
|
||||
#include "InputStream.hxx"
|
||||
#include "Ptr.hxx"
|
||||
#include "Handler.hxx"
|
||||
#include "thread/Cond.hxx"
|
||||
|
||||
struct Tag;
|
||||
|
||||
@@ -33,7 +35,9 @@ struct Tag;
|
||||
* The inner #InputStream instance may be nullptr initially, to be set
|
||||
* later.
|
||||
*/
|
||||
class ProxyInputStream : public InputStream {
|
||||
class ProxyInputStream : public InputStream, protected InputStreamHandler {
|
||||
Cond set_input_cond;
|
||||
|
||||
protected:
|
||||
InputStreamPtr input;
|
||||
|
||||
@@ -45,8 +49,8 @@ public:
|
||||
* Once that instance becomes available, call SetInput().
|
||||
*/
|
||||
ProxyInputStream(const char *_uri,
|
||||
Mutex &_mutex, Cond &_cond) noexcept
|
||||
:InputStream(_uri, _mutex, _cond) {}
|
||||
Mutex &_mutex) noexcept
|
||||
:InputStream(_uri, _mutex) {}
|
||||
|
||||
virtual ~ProxyInputStream() noexcept;
|
||||
|
||||
@@ -78,6 +82,15 @@ protected:
|
||||
* attributes.
|
||||
*/
|
||||
void CopyAttributes();
|
||||
|
||||
/* virtual methods from class InputStreamHandler */
|
||||
void OnInputStreamReady() noexcept override {
|
||||
InvokeOnReady();
|
||||
}
|
||||
|
||||
void OnInputStreamAvailable() noexcept override {
|
||||
InvokeOnAvailable();
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user