LibreOffice Module package (master) 1
|
#include <XBufferedThreadedStream.hxx>
Public Member Functions | |
XBufferedThreadedStream (const css::uno::Reference< XInputStream > &xSrcStream, sal_Int64 nStreamSize) | |
virtual | ~XBufferedThreadedStream () override |
void | produce () |
Reads from UnbufferedStream in a separate thread and stores the buffer blocks in maPendingBuffers queue for further use. More... | |
void | setTerminateThread () |
void | saveException (const std::exception_ptr &exception) |
virtual sal_Int32 SAL_CALL | readBytes (css::uno::Sequence< sal_Int8 > &aData, sal_Int32 nBytesToRead) override |
virtual sal_Int32 SAL_CALL | readSomeBytes (css::uno::Sequence< sal_Int8 > &aData, sal_Int32 nMaxBytesToRead) override |
virtual void SAL_CALL | skipBytes (sal_Int32 nBytesToSkip) override |
virtual sal_Int32 SAL_CALL | available () override |
virtual void SAL_CALL | closeInput () override |
Private Member Functions | |
const Buffer & | getNextBlock () |
Fetches next available block from maPendingBuffers for use in Reading thread. More... | |
sal_Int64 | remainingSize () const |
bool | hasBytes () const |
bool | canProduce () const |
bool | canConsume () const |
Private Attributes | |
const css::uno::Reference< XInputStream > | mxSrcStream |
sal_Int64 | mnPos |
sal_Int64 | mnStreamSize |
position in stream More... | |
Buffer | maInUseBuffer |
available size of stream More... | |
int | mnOffset |
Buffer block in use. More... | |
std::queue< Buffer > | maPendingBuffers |
position in maInUseBuffer More... | |
std::queue< Buffer > | maUsedBuffers |
Buffers that are available for use. More... | |
rtl::Reference< salhelper::Thread > | mxUnzippingThread |
std::mutex | maBufferProtector |
std::condition_variable | maBufferConsumeResume |
mutex protecting Buffer queues. More... | |
std::condition_variable | maBufferProduceResume |
bool | mbTerminateThread |
std::exception_ptr | maSavedException |
indicates the failure of one of the threads More... | |
Static Private Attributes | |
static const size_t | nBufferLowWater = 2 |
exception caught during unzipping is saved to be thrown during reading More... | |
static const size_t | nBufferHighWater = 4 |
static const size_t | nBufferSize = 32 * 1024 |
Definition at line 26 of file XBufferedThreadedStream.hxx.
XBufferedThreadedStream::XBufferedThreadedStream | ( | const css::uno::Reference< XInputStream > & | xSrcStream, |
sal_Int64 | nStreamSize | ||
) |
Definition at line 39 of file XBufferedThreadedStream.cxx.
References mxUnzippingThread.
|
overridevirtual |
Definition at line 52 of file XBufferedThreadedStream.cxx.
References mxUnzippingThread, and setTerminateThread().
|
overridevirtual |
Definition at line 174 of file XBufferedThreadedStream.cxx.
References hasBytes(), remainingSize(), and SAL_MAX_INT32.
|
inlineprivate |
Definition at line 59 of file XBufferedThreadedStream.hxx.
References maPendingBuffers, and mbTerminateThread.
Referenced by getNextBlock().
|
inlineprivate |
Definition at line 54 of file XBufferedThreadedStream.hxx.
References maPendingBuffers, mbTerminateThread, and nBufferHighWater.
Referenced by produce().
|
overridevirtual |
Definition at line 182 of file XBufferedThreadedStream.cxx.
References mxSrcStream, mxUnzippingThread, and setTerminateThread().
|
private |
Fetches next available block from maPendingBuffers for use in Reading thread.
Definition at line 91 of file XBufferedThreadedStream.cxx.
References canConsume(), maBufferConsumeResume, maBufferProduceResume, maBufferProtector, maInUseBuffer, maPendingBuffers, maSavedException, maUsedBuffers, mnOffset, and nBufferLowWater.
Referenced by readBytes().
|
inlineprivate |
Definition at line 52 of file XBufferedThreadedStream.hxx.
References mnPos, and mnStreamSize.
Referenced by available(), and readBytes().
void XBufferedThreadedStream::produce | ( | ) |
Reads from UnbufferedStream in a separate thread and stores the buffer blocks in maPendingBuffers queue for further use.
Definition at line 62 of file XBufferedThreadedStream.cxx.
References canProduce(), maBufferConsumeResume, maBufferProduceResume, maBufferProtector, maPendingBuffers, maUsedBuffers, mbTerminateThread, mnStreamSize, mxSrcStream, and nBufferSize.
|
overridevirtual |
Definition at line 130 of file XBufferedThreadedStream.cxx.
References getNextBlock(), hasBytes(), i, mnOffset, mnPos, pData, and remainingSize().
Referenced by readSomeBytes(), and skipBytes().
|
overridevirtual |
Definition at line 161 of file XBufferedThreadedStream.cxx.
References aData, and readBytes().
|
inlineprivate |
Definition at line 51 of file XBufferedThreadedStream.hxx.
References mnPos, and mnStreamSize.
Referenced by available(), and readBytes().
|
inline |
Definition at line 73 of file XBufferedThreadedStream.hxx.
References maSavedException.
void XBufferedThreadedStream::setTerminateThread | ( | ) |
Definition at line 122 of file XBufferedThreadedStream.cxx.
References maBufferConsumeResume, maBufferProduceResume, maBufferProtector, and mbTerminateThread.
Referenced by closeInput(), and ~XBufferedThreadedStream().
|
overridevirtual |
Definition at line 165 of file XBufferedThreadedStream.cxx.
References readBytes().
|
private |
mutex protecting Buffer queues.
Definition at line 40 of file XBufferedThreadedStream.hxx.
Referenced by getNextBlock(), produce(), and setTerminateThread().
|
private |
Definition at line 41 of file XBufferedThreadedStream.hxx.
Referenced by getNextBlock(), produce(), and setTerminateThread().
|
private |
Definition at line 39 of file XBufferedThreadedStream.hxx.
Referenced by getNextBlock(), produce(), and setTerminateThread().
|
private |
available size of stream
Definition at line 33 of file XBufferedThreadedStream.hxx.
Referenced by getNextBlock().
|
private |
position in maInUseBuffer
Definition at line 35 of file XBufferedThreadedStream.hxx.
Referenced by canConsume(), canProduce(), getNextBlock(), and produce().
|
private |
indicates the failure of one of the threads
Definition at line 44 of file XBufferedThreadedStream.hxx.
Referenced by getNextBlock(), and saveException().
|
private |
Buffers that are available for use.
Definition at line 36 of file XBufferedThreadedStream.hxx.
Referenced by getNextBlock(), and produce().
|
private |
Definition at line 42 of file XBufferedThreadedStream.hxx.
Referenced by canConsume(), canProduce(), produce(), and setTerminateThread().
|
private |
Buffer block in use.
Definition at line 34 of file XBufferedThreadedStream.hxx.
Referenced by getNextBlock(), and readBytes().
|
private |
Definition at line 30 of file XBufferedThreadedStream.hxx.
Referenced by hasBytes(), readBytes(), and remainingSize().
|
private |
position in stream
Definition at line 31 of file XBufferedThreadedStream.hxx.
Referenced by hasBytes(), produce(), and remainingSize().
|
private |
Definition at line 29 of file XBufferedThreadedStream.hxx.
Referenced by closeInput(), and produce().
|
private |
Definition at line 38 of file XBufferedThreadedStream.hxx.
Referenced by closeInput(), XBufferedThreadedStream(), and ~XBufferedThreadedStream().
|
staticprivate |
Definition at line 47 of file XBufferedThreadedStream.hxx.
Referenced by canProduce().
|
staticprivate |
exception caught during unzipping is saved to be thrown during reading
Definition at line 46 of file XBufferedThreadedStream.hxx.
Referenced by getNextBlock().
|
staticprivate |
Definition at line 48 of file XBufferedThreadedStream.hxx.
Referenced by produce().