From 56b8ca62c666a1b747766a5ede70db070977ad37 Mon Sep 17 00:00:00 2001 From: Nicolas 'Pixel' Noble Date: Mon, 21 Jan 2013 00:53:12 -0800 Subject: ZStreams's close, read and write are now fully interruptible. Will need some testing though. --- includes/ZHandle.h | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'includes/ZHandle.h') diff --git a/includes/ZHandle.h b/includes/ZHandle.h index 5750365..8164853 100644 --- a/includes/ZHandle.h +++ b/includes/ZHandle.h @@ -2,6 +2,7 @@ #include #include +#include namespace Balau { @@ -24,13 +25,28 @@ class ZStream : public Handle { void detach() { m_detached = true; } void flush() { doFlush(false); } void setUseAsyncOp(bool useAsyncOp) { m_useAsyncOp = useAsyncOp; } - private: + virtual bool isPendingComplete(); void finish() { doFlush(true); } void doFlush(bool finish); + private: IO m_h; z_stream m_zin, m_zout; String m_name; - uint8_t * m_in = NULL; + uint8_t * m_buf = NULL; + uint8_t * m_wptr; + enum { + IDLE, + READING, + WRITING, + COMPRESSING, + COMPRESSING_IDLE, + DECOMPRESSING, + DECOMPRESSING_IDLE, + CLOSING, + } m_phase = IDLE; + size_t m_total, m_count, m_compressed; + AsyncOperation * m_op = NULL; + ssize_t m_status; bool m_detached = false, m_closed = false, m_eof = false, m_useAsyncOp = true; }; -- cgit v1.2.3