[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