no need to allocate MemRingBuffer separately in OMarkableOutputStream

Change-Id: I80d64f18480a2c078caeaa161f55767f66021253
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139781
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2022-09-10 19:17:43 +02:00
committed by Noel Grandin
parent 23118ce68a
commit 5bb826373f

View File

@@ -115,7 +115,7 @@ private:
Reference< XOutputStream > m_output; Reference< XOutputStream > m_output;
bool m_bValidStream; bool m_bValidStream;
std::unique_ptr<MemRingBuffer> m_pBuffer; MemRingBuffer m_aRingBuffer;
map<sal_Int32,sal_Int32,less< sal_Int32 > > m_mapMarks; map<sal_Int32,sal_Int32,less< sal_Int32 > > m_mapMarks;
sal_Int32 m_nCurrentPos; sal_Int32 m_nCurrentPos;
sal_Int32 m_nCurrentMark; sal_Int32 m_nCurrentMark;
@@ -127,7 +127,6 @@ private:
OMarkableOutputStream::OMarkableOutputStream( ) OMarkableOutputStream::OMarkableOutputStream( )
: m_bValidStream(false) : m_bValidStream(false)
, m_pBuffer( new MemRingBuffer )
, m_nCurrentPos(0) , m_nCurrentPos(0)
, m_nCurrentMark(0) , m_nCurrentMark(0)
{ {
@@ -139,14 +138,14 @@ void OMarkableOutputStream::writeBytes(const Sequence< sal_Int8 >& aData)
if( !m_bValidStream ) { if( !m_bValidStream ) {
throw NotConnectedException(); throw NotConnectedException();
} }
if( m_mapMarks.empty() && ( m_pBuffer->getSize() == 0 ) ) { if( m_mapMarks.empty() && ( m_aRingBuffer.getSize() == 0 ) ) {
// no mark and buffer active, simple write through // no mark and buffer active, simple write through
m_output->writeBytes( aData ); m_output->writeBytes( aData );
} }
else { else {
std::unique_lock guard( m_mutex ); std::unique_lock guard( m_mutex );
// new data must be buffered // new data must be buffered
m_pBuffer->writeAt( m_nCurrentPos , aData ); m_aRingBuffer.writeAt( m_nCurrentPos , aData );
m_nCurrentPos += aData.getLength(); m_nCurrentPos += aData.getLength();
checkMarksAndFlush(); checkMarksAndFlush();
} }
@@ -179,7 +178,7 @@ void OMarkableOutputStream::closeOutput()
// all marks must be cleared and all // all marks must be cleared and all
m_mapMarks.clear(); m_mapMarks.clear();
m_nCurrentPos = m_pBuffer->getSize(); m_nCurrentPos = m_aRingBuffer.getSize();
checkMarksAndFlush(); checkMarksAndFlush();
m_output->closeOutput(); m_output->closeOutput();
@@ -232,7 +231,7 @@ void OMarkableOutputStream::jumpToMark(sal_Int32 nMark)
void OMarkableOutputStream::jumpToFurthest() void OMarkableOutputStream::jumpToFurthest()
{ {
std::unique_lock guard( m_mutex ); std::unique_lock guard( m_mutex );
m_nCurrentPos = m_pBuffer->getSize(); m_nCurrentPos = m_aRingBuffer.getSize();
checkMarksAndFlush(); checkMarksAndFlush();
} }
@@ -328,8 +327,8 @@ void OMarkableOutputStream::checkMarksAndFlush()
} }
Sequence<sal_Int8> seq(nNextFound); Sequence<sal_Int8> seq(nNextFound);
m_pBuffer->readAt( 0 , seq , nNextFound ); m_aRingBuffer.readAt( 0 , seq , nNextFound );
m_pBuffer->forgetFromStart( nNextFound ); m_aRingBuffer.forgetFromStart( nNextFound );
// now write data through to streams // now write data through to streams
m_output->writeBytes( seq ); m_output->writeBytes( seq );