Skip to content

Commit

Permalink
Prepared aircraft track for saving and reading from/to arbitrary stream.
Browse files Browse the repository at this point in the history
  • Loading branch information
albar965 committed Jul 3, 2019
1 parent 6ccaedf commit d215524
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 21 deletions.
58 changes: 37 additions & 21 deletions src/common/aircrafttrack.cpp
Expand Up @@ -58,10 +58,7 @@ void AircraftTrack::saveState()
if(trackFile.open(QIODevice::WriteOnly))
{
QDataStream out(&trackFile);
out.setVersion(QDataStream::Qt_5_5);
out.setFloatingPointPrecision(QDataStream::SinglePrecision);

out << FILE_MAGIC_NUMBER << FILE_VERSION << *this;
saveToStream(out);
trackFile.close();
}
else
Expand All @@ -77,31 +74,50 @@ void AircraftTrack::restoreState()
{
if(trackFile.open(QIODevice::ReadOnly))
{
quint32 magic;
quint16 version;
QDataStream in(&trackFile);
in.setVersion(QDataStream::Qt_5_5);
in.setFloatingPointPrecision(QDataStream::SinglePrecision);
in >> magic;

if(magic == FILE_MAGIC_NUMBER)
{
in >> version;
if(version == FILE_VERSION)
in >> *this;
else
qWarning() << "Cannot read track" << trackFile.fileName() << ". Invalid version number:" << version;
}
else
qWarning() << "Cannot read track" << trackFile.fileName() << ". Invalid magic number:" << magic;

readFromStream(in);
trackFile.close();
}
else
qWarning() << "Cannot read track" << trackFile.fileName() << ":" << trackFile.errorString();
}
}

void AircraftTrack::saveToStream(QDataStream& out)
{
out.setVersion(QDataStream::Qt_5_5);
out.setFloatingPointPrecision(QDataStream::SinglePrecision);
out << FILE_MAGIC_NUMBER << FILE_VERSION << *this;
}

bool AircraftTrack::readFromStream(QDataStream& in)
{
bool retval = false;
clear();

quint32 magic;
quint16 version;
in.setVersion(QDataStream::Qt_5_5);
in.setFloatingPointPrecision(QDataStream::SinglePrecision);
in >> magic;

if(magic == FILE_MAGIC_NUMBER)
{
in >> version;
if(version == FILE_VERSION)
{
in >> *this;
retval = true;
}
else
qWarning() << "Cannot read track. Invalid version number:" << version;
}
else
qWarning() << "Cannot read track. Invalid magic number:" << magic;

return retval;
}

bool AircraftTrack::appendTrackPos(const atools::geo::Pos& pos, const QDateTime& timestamp, bool onGround)
{
bool pruned = false;
Expand Down
6 changes: 6 additions & 0 deletions src/common/aircrafttrack.h
Expand Up @@ -74,11 +74,17 @@ class AircraftTrack :
using QList::begin;
using QList::end;

/* Track will be pruned if it contains more track entries than this value. Default is 20000. */
void setMaxTrackEntries(int value)
{
maxTrackEntries = value;
}

/* Write and read the whole track to and from a binary stream */
void saveToStream(QDataStream& out);

bool readFromStream(QDataStream & in);

private:
/* Maximum number of track points. If exceeded entries will be removed from beginning of the list */
int maxTrackEntries = 20000;
Expand Down

0 comments on commit d215524

Please sign in to comment.