Kaydet (Commit) e8cb751f authored tarafından Noel Grandin's avatar Noel Grandin

loplugin:useuniqueptr in DataStream

Change-Id: I05a22f05a7d41aa06539e05a1969f9520cc3ab31
Reviewed-on: https://gerrit.libreoffice.org/52649Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 45e1b442
...@@ -93,24 +93,15 @@ public: ...@@ -93,24 +93,15 @@ public:
namespace datastreams { namespace datastreams {
void emptyLineQueue( std::queue<DataStream::LinesType*>& rQueue )
{
while (!rQueue.empty())
{
delete rQueue.front();
rQueue.pop();
}
}
class ReaderThread : public salhelper::Thread class ReaderThread : public salhelper::Thread
{ {
SvStream *mpStream; std::unique_ptr<SvStream> mpStream;
size_t mnColCount; size_t mnColCount;
bool mbTerminate; bool mbTerminate;
osl::Mutex maMtxTerminate; osl::Mutex maMtxTerminate;
std::queue<DataStream::LinesType*> maPendingLines; std::queue<std::unique_ptr<DataStream::LinesType>> maPendingLines;
std::queue<DataStream::LinesType*> maUsedLines; std::queue<std::unique_ptr<DataStream::LinesType>> maUsedLines;
osl::Mutex maMtxLines; osl::Mutex maMtxLines;
osl::Condition maCondReadStream; osl::Condition maCondReadStream;
...@@ -120,9 +111,9 @@ class ReaderThread : public salhelper::Thread ...@@ -120,9 +111,9 @@ class ReaderThread : public salhelper::Thread
public: public:
ReaderThread(SvStream *pData, size_t nColCount): ReaderThread(std::unique_ptr<SvStream> pData, size_t nColCount):
Thread("ReaderThread"), Thread("ReaderThread"),
mpStream(pData), mpStream(std::move(pData)),
mnColCount(nColCount), mnColCount(nColCount),
mbTerminate(false) mbTerminate(false)
{ {
...@@ -130,13 +121,6 @@ public: ...@@ -130,13 +121,6 @@ public:
maConfig.text_qualifier = '"'; maConfig.text_qualifier = '"';
} }
virtual ~ReaderThread() override
{
delete mpStream;
emptyLineQueue(maPendingLines);
emptyLineQueue(maUsedLines);
}
bool isTerminateRequested() bool isTerminateRequested()
{ {
osl::MutexGuard aGuard(maMtxTerminate); osl::MutexGuard aGuard(maMtxTerminate);
...@@ -161,9 +145,9 @@ public: ...@@ -161,9 +145,9 @@ public:
maCondConsume.reset(); maCondConsume.reset();
} }
DataStream::LinesType* popNewLines() std::unique_ptr<DataStream::LinesType> popNewLines()
{ {
DataStream::LinesType* pLines = maPendingLines.front(); auto pLines = std::move(maPendingLines.front());
maPendingLines.pop(); maPendingLines.pop();
return pLines; return pLines;
} }
...@@ -179,9 +163,9 @@ public: ...@@ -179,9 +163,9 @@ public:
return !maPendingLines.empty(); return !maPendingLines.empty();
} }
void pushUsedLines( DataStream::LinesType* pLines ) void pushUsedLines( std::unique_ptr<DataStream::LinesType> pLines )
{ {
maUsedLines.push(pLines); maUsedLines.push(std::move(pLines));
} }
osl::Mutex& getLinesMutex() osl::Mutex& getLinesMutex()
...@@ -194,20 +178,20 @@ private: ...@@ -194,20 +178,20 @@ private:
{ {
while (!isTerminateRequested()) while (!isTerminateRequested())
{ {
DataStream::LinesType* pLines = nullptr; std::unique_ptr<DataStream::LinesType> pLines;
osl::ResettableMutexGuard aGuard(maMtxLines); osl::ResettableMutexGuard aGuard(maMtxLines);
if (!maUsedLines.empty()) if (!maUsedLines.empty())
{ {
// Re-use lines from previous runs. // Re-use lines from previous runs.
pLines = maUsedLines.front(); pLines = std::move(maUsedLines.front());
maUsedLines.pop(); maUsedLines.pop();
aGuard.clear(); // unlock aGuard.clear(); // unlock
} }
else else
{ {
aGuard.clear(); // unlock aGuard.clear(); // unlock
pLines = new DataStream::LinesType(10); pLines.reset(new DataStream::LinesType(10));
} }
// Read & store new lines from stream. // Read & store new lines from stream.
...@@ -229,7 +213,7 @@ private: ...@@ -229,7 +213,7 @@ private:
maCondReadStream.reset(); maCondReadStream.reset();
aGuard.reset(); // lock aGuard.reset(); // lock
} }
maPendingLines.push(pLines); maPendingLines.push(std::move(pLines));
maCondConsume.set(); maCondConsume.set();
if (!mpStream->good()) if (!mpStream->good())
requestTerminate(); requestTerminate();
...@@ -320,7 +304,7 @@ DataStream::~DataStream() ...@@ -320,7 +304,7 @@ DataStream::~DataStream()
mxReaderThread->endThread(); mxReaderThread->endThread();
mxReaderThread->join(); mxReaderThread->join();
} }
delete mpLines; mpLines.reset();
} }
DataStream::Line DataStream::ConsumeLine() DataStream::Line DataStream::ConsumeLine()
...@@ -333,7 +317,7 @@ DataStream::Line DataStream::ConsumeLine() ...@@ -333,7 +317,7 @@ DataStream::Line DataStream::ConsumeLine()
osl::ResettableMutexGuard aGuard(mxReaderThread->getLinesMutex()); osl::ResettableMutexGuard aGuard(mxReaderThread->getLinesMutex());
if (mpLines) if (mpLines)
mxReaderThread->pushUsedLines(mpLines); mxReaderThread->pushUsedLines(std::move(mpLines));
while (!mxReaderThread->hasNewLines()) while (!mxReaderThread->hasNewLines())
{ {
...@@ -397,8 +381,8 @@ void DataStream::StartImport() ...@@ -397,8 +381,8 @@ void DataStream::StartImport()
if (!mxReaderThread.is()) if (!mxReaderThread.is())
{ {
SvStream *pStream = new SvFileStream(msURL, StreamMode::READ); std::unique_ptr<SvStream> pStream(new SvFileStream(msURL, StreamMode::READ));
mxReaderThread = new datastreams::ReaderThread(pStream, maStartRange.aEnd.Col() - maStartRange.aStart.Col() + 1); mxReaderThread = new datastreams::ReaderThread(std::move(pStream), maStartRange.aEnd.Col() - maStartRange.aStart.Col() + 1);
mxReaderThread->launch(); mxReaderThread->launch();
} }
mbRunning = true; mbRunning = true;
......
...@@ -111,7 +111,7 @@ private: ...@@ -111,7 +111,7 @@ private:
bool mbRunning; bool mbRunning;
bool mbValuesInLine; bool mbValuesInLine;
bool mbRefreshOnEmptyLine; bool mbRefreshOnEmptyLine;
LinesType* mpLines; std::unique_ptr<LinesType> mpLines;
size_t mnLinesCount; size_t mnLinesCount;
size_t mnLinesSinceRefresh; size_t mnLinesSinceRefresh;
double mfLastRefreshTime; double mfLastRefreshTime;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment