LibreOffice Module package (master) 1
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
XBufferedThreadedStream Class Reference

#include <XBufferedThreadedStream.hxx>

Inheritance diagram for XBufferedThreadedStream:
[legend]
Collaboration diagram for XBufferedThreadedStream:
[legend]

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 BuffergetNextBlock ()
 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< BuffermaPendingBuffers
 position in maInUseBuffer More...
 
std::queue< BuffermaUsedBuffers
 Buffers that are available for use. More...
 
rtl::Reference< salhelper::ThreadmxUnzippingThread
 
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
 

Detailed Description

Definition at line 26 of file XBufferedThreadedStream.hxx.

Constructor & Destructor Documentation

◆ XBufferedThreadedStream()

XBufferedThreadedStream::XBufferedThreadedStream ( const css::uno::Reference< XInputStream > &  xSrcStream,
sal_Int64  nStreamSize 
)

Definition at line 39 of file XBufferedThreadedStream.cxx.

References mxUnzippingThread.

◆ ~XBufferedThreadedStream()

XBufferedThreadedStream::~XBufferedThreadedStream ( )
overridevirtual

Definition at line 52 of file XBufferedThreadedStream.cxx.

References mxUnzippingThread, and setTerminateThread().

Member Function Documentation

◆ available()

sal_Int32 SAL_CALL XBufferedThreadedStream::available ( )
overridevirtual

Definition at line 174 of file XBufferedThreadedStream.cxx.

References hasBytes(), remainingSize(), and SAL_MAX_INT32.

◆ canConsume()

bool XBufferedThreadedStream::canConsume ( ) const
inlineprivate

Definition at line 59 of file XBufferedThreadedStream.hxx.

References maPendingBuffers, and mbTerminateThread.

Referenced by getNextBlock().

◆ canProduce()

bool XBufferedThreadedStream::canProduce ( ) const
inlineprivate

Definition at line 54 of file XBufferedThreadedStream.hxx.

References maPendingBuffers, mbTerminateThread, and nBufferHighWater.

Referenced by produce().

◆ closeInput()

void SAL_CALL XBufferedThreadedStream::closeInput ( )
overridevirtual

Definition at line 182 of file XBufferedThreadedStream.cxx.

References mxSrcStream, mxUnzippingThread, and setTerminateThread().

◆ getNextBlock()

const Buffer & XBufferedThreadedStream::getNextBlock ( )
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().

◆ hasBytes()

bool XBufferedThreadedStream::hasBytes ( ) const
inlineprivate

Definition at line 52 of file XBufferedThreadedStream.hxx.

References mnPos, and mnStreamSize.

Referenced by available(), and readBytes().

◆ produce()

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.

◆ readBytes()

sal_Int32 SAL_CALL XBufferedThreadedStream::readBytes ( css::uno::Sequence< sal_Int8 > &  aData,
sal_Int32  nBytesToRead 
)
overridevirtual

Definition at line 130 of file XBufferedThreadedStream.cxx.

References getNextBlock(), hasBytes(), i, mnOffset, mnPos, pData, and remainingSize().

Referenced by readSomeBytes(), and skipBytes().

◆ readSomeBytes()

sal_Int32 SAL_CALL XBufferedThreadedStream::readSomeBytes ( css::uno::Sequence< sal_Int8 > &  aData,
sal_Int32  nMaxBytesToRead 
)
overridevirtual

Definition at line 161 of file XBufferedThreadedStream.cxx.

References aData, and readBytes().

◆ remainingSize()

sal_Int64 XBufferedThreadedStream::remainingSize ( ) const
inlineprivate

Definition at line 51 of file XBufferedThreadedStream.hxx.

References mnPos, and mnStreamSize.

Referenced by available(), and readBytes().

◆ saveException()

void XBufferedThreadedStream::saveException ( const std::exception_ptr &  exception)
inline

Definition at line 73 of file XBufferedThreadedStream.hxx.

References maSavedException.

◆ setTerminateThread()

void XBufferedThreadedStream::setTerminateThread ( )

◆ skipBytes()

void SAL_CALL XBufferedThreadedStream::skipBytes ( sal_Int32  nBytesToSkip)
overridevirtual

Definition at line 165 of file XBufferedThreadedStream.cxx.

References readBytes().

Member Data Documentation

◆ maBufferConsumeResume

std::condition_variable XBufferedThreadedStream::maBufferConsumeResume
private

mutex protecting Buffer queues.

Definition at line 40 of file XBufferedThreadedStream.hxx.

Referenced by getNextBlock(), produce(), and setTerminateThread().

◆ maBufferProduceResume

std::condition_variable XBufferedThreadedStream::maBufferProduceResume
private

Definition at line 41 of file XBufferedThreadedStream.hxx.

Referenced by getNextBlock(), produce(), and setTerminateThread().

◆ maBufferProtector

std::mutex XBufferedThreadedStream::maBufferProtector
private

Definition at line 39 of file XBufferedThreadedStream.hxx.

Referenced by getNextBlock(), produce(), and setTerminateThread().

◆ maInUseBuffer

Buffer XBufferedThreadedStream::maInUseBuffer
private

available size of stream

Definition at line 33 of file XBufferedThreadedStream.hxx.

Referenced by getNextBlock().

◆ maPendingBuffers

std::queue< Buffer > XBufferedThreadedStream::maPendingBuffers
private

position in maInUseBuffer

Definition at line 35 of file XBufferedThreadedStream.hxx.

Referenced by canConsume(), canProduce(), getNextBlock(), and produce().

◆ maSavedException

std::exception_ptr XBufferedThreadedStream::maSavedException
private

indicates the failure of one of the threads

Definition at line 44 of file XBufferedThreadedStream.hxx.

Referenced by getNextBlock(), and saveException().

◆ maUsedBuffers

std::queue< Buffer > XBufferedThreadedStream::maUsedBuffers
private

Buffers that are available for use.

Definition at line 36 of file XBufferedThreadedStream.hxx.

Referenced by getNextBlock(), and produce().

◆ mbTerminateThread

bool XBufferedThreadedStream::mbTerminateThread
private

Definition at line 42 of file XBufferedThreadedStream.hxx.

Referenced by canConsume(), canProduce(), produce(), and setTerminateThread().

◆ mnOffset

int XBufferedThreadedStream::mnOffset
private

Buffer block in use.

Definition at line 34 of file XBufferedThreadedStream.hxx.

Referenced by getNextBlock(), and readBytes().

◆ mnPos

sal_Int64 XBufferedThreadedStream::mnPos
private

Definition at line 30 of file XBufferedThreadedStream.hxx.

Referenced by hasBytes(), readBytes(), and remainingSize().

◆ mnStreamSize

sal_Int64 XBufferedThreadedStream::mnStreamSize
private

position in stream

Definition at line 31 of file XBufferedThreadedStream.hxx.

Referenced by hasBytes(), produce(), and remainingSize().

◆ mxSrcStream

const css::uno::Reference<XInputStream> XBufferedThreadedStream::mxSrcStream
private

Definition at line 29 of file XBufferedThreadedStream.hxx.

Referenced by closeInput(), and produce().

◆ mxUnzippingThread

rtl::Reference< salhelper::Thread > XBufferedThreadedStream::mxUnzippingThread
private

◆ nBufferHighWater

const size_t XBufferedThreadedStream::nBufferHighWater = 4
staticprivate

Definition at line 47 of file XBufferedThreadedStream.hxx.

Referenced by canProduce().

◆ nBufferLowWater

const size_t XBufferedThreadedStream::nBufferLowWater = 2
staticprivate

exception caught during unzipping is saved to be thrown during reading

Definition at line 46 of file XBufferedThreadedStream.hxx.

Referenced by getNextBlock().

◆ nBufferSize

const size_t XBufferedThreadedStream::nBufferSize = 32 * 1024
staticprivate

Definition at line 48 of file XBufferedThreadedStream.hxx.

Referenced by produce().


The documentation for this class was generated from the following files: