[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [marble] src/lib/geodata/data: fixing GeoDataTrack sorting
From: Niko Sams <niko.sams () gmail ! com>
Date: 2011-12-31 15:16:59
Message-ID: 20111231151659.7E556580D5 () git ! kde ! org
[Download RAW message or body]
Git commit 0935f720df11f3d03d8a3f36198451b85f66e92f by Niko Sams, on behalf of Thibaut Gridel.
Committed on 24/12/2011 at 11:35.
Pushed by nsams into branch 'master'.
fixing GeoDataTrack sorting
M +27 -18 src/lib/geodata/data/GeoDataTrack.cpp
http://commits.kde.org/marble/0935f720df11f3d03d8a3f36198451b85f66e92f
diff --git a/src/lib/geodata/data/GeoDataTrack.cpp b/src/lib/geodata/data/GeoDataTrack.cpp
index eab9142..e8caa02 100644
--- a/src/lib/geodata/data/GeoDataTrack.cpp
+++ b/src/lib/geodata/data/GeoDataTrack.cpp
@@ -175,8 +175,15 @@ void GeoDataTrack::addPoint( const QDateTime &when, const GeoDataCoordinates &co
{
d->equalizeWhenSize();
d->m_lineStringNeedsUpdate = true;
- d->m_when.append( when );
- d->m_coordinates.append( coord );
+ int i=0;
+ while ( i < d->m_when.size() ) {
+ if ( d->m_when.at( i ) > when ) {
+ break;
+ }
+ ++i;
+ }
+ d->m_when.insert(i, when );
+ d->m_coordinates.insert(i, coord );
}
void GeoDataTrack::appendCoordinates( const GeoDataCoordinates &coord )
@@ -210,27 +217,29 @@ void GeoDataTrack::clear()
void GeoDataTrack::removeBefore( const QDateTime &when )
{
- for ( int i = 0; i < qMin( d->m_when.size(), d->m_coordinates.size() ); ++i ) {
- if ( d->m_when.at( i ).isValid() && d->m_when.at( i ) < when ) {
- d->m_when.removeAt( i );
- if ( i < d->m_coordinates.size() ) {
- d->m_coordinates.removeAt( i );
- }
- i--;
- }
+ Q_ASSERT( d->m_coordinates.size() == d->m_when.size() );
+ if ( d->m_when.isEmpty() ) {
+ return;
+ }
+ d->equalizeWhenSize();
+
+ while ( !d->m_when.isEmpty() && d->m_when.first() < when ) {
+ d->m_when.takeFirst();
+ d->m_coordinates.takeFirst();
}
}
void GeoDataTrack::removeAfter( const QDateTime &when )
{
- for ( int i = 0; i < d->m_when.size(); ++i ) {
- if ( d->m_when.at( i ).isValid() && d->m_when.at( i ) > when ) {
- d->m_when.removeAt( i );
- if ( i < d->m_coordinates.size() ) {
- d->m_coordinates.removeAt( i );
- }
- i--;
- }
+ Q_ASSERT( d->m_coordinates.size() == d->m_when.size() );
+ if ( d->m_when.isEmpty() ) {
+ return;
+ }
+ d->equalizeWhenSize();
+ while ( !d->m_when.isEmpty() && d->m_when.last() > when ) {
+ d->m_when.takeLast();
+ d->m_coordinates.takeLast();
+
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic