Commit 1412cb1a authored by pixhawk's avatar pixhawk

Speeded up logfile compression from quadratic to near-linear complexity

parent 38941da9
......@@ -125,7 +125,9 @@ void LogCompressor::run()
file.reset();
QTextStream data(&file);
int linecounter = 0;
while (!data.atEnd()) {
quint64 lastTimeIndex = 0;
while (!data.atEnd())
{
linecounter++;
currentDataLine = linecounter;
QString line = data.readLine();
......@@ -140,7 +142,33 @@ void LogCompressor::run()
value = "NaN";
}
// Get matching output line
quint64 index = times->indexOf(time);
// Constraining the search area might result in not finding a key,
// but it significantly reduces the time needed for the search
// setting a window of 1000 entries means that a 1 Hz data point
// can still be located
int offsetLimit = 200;
quint64 offset;
quint64 index = -1;
while (index == -1)
{
if (lastTimeIndex > offsetLimit)
{
offset = lastTimeIndex - offsetLimit;
}
else
{
offset = 0;
}
quint64 index = times->indexOf(time, offset);
if (index == -1)
{
qDebug() << "INDEX NOT FOUND DURING LOGFILE PROCESSING, RESTARTING SEARCH";
// FIXME Reset and start without offset heuristic again
offsetLimit+=1000;
}
}
lastTimeIndex = index;
QString outLine = outLines->at(index);
QStringList outParts = outLine.split(separator);
// Replace measurement placeholder with current value
......
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