[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bmarble=5D_src/lib/geodata/handlers/kml=3A_Faster_KM?=
From: Dennis_Nienhüser <earthwings () gentoo ! org>
Date: 2011-04-30 21:42:49
Message-ID: 20110430214249.7FEEDA60A4 () git ! kde ! org
[Download RAW message or body]
Git commit 995b06039a00f9a7d45e32cec0aa5a581578e610 by Dennis Nienhüser.
Committed on 25/04/2011 at 00:11.
Pushed by nienhueser into branch 'master'.
Faster KML coordinate tag parsing.
Speeds up parsing of large routes by a factor of two.
REVIEW: 101227
M +18 -1 src/lib/geodata/handlers/kml/KmlCoordinatesTagHandler.cpp
http://commits.kde.org/marble/995b06039a00f9a7d45e32cec0aa5a581578e610
diff --git a/src/lib/geodata/handlers/kml/KmlCoordinatesTagHandler.cpp \
b/src/lib/geodata/handlers/kml/KmlCoordinatesTagHandler.cpp index ad1fed2..25cfadf \
100644
--- a/src/lib/geodata/handlers/kml/KmlCoordinatesTagHandler.cpp
+++ b/src/lib/geodata/handlers/kml/KmlCoordinatesTagHandler.cpp
@@ -50,7 +50,24 @@ GeoNode* KmlcoordinatesTagHandler::parse( GeoParser& parser ) \
const || parentItem.represents( kmlTag_LineString )
|| parentItem.represents( kmlTag_MultiGeometry )
|| parentItem.represents( kmlTag_LinearRing ) ) {
- QStringList coordinatesLines = parser.readElementText().trimmed().split( \
QRegExp("\\s"), QString::SkipEmptyParts ); + QStringList coordinatesLines;// \
= parser.readElementText().trimmed().split( QRegExp("\\s"), QString::SkipEmptyParts \
); + // Splitting using the "\\s" regexp is slow, split manually instead.
+ QString const text = parser.readElementText().trimmed();
+ int index = 0;
+ bool inside = true;
+ int const size = text.size();
+ for ( int i=0; i<size; ++i ) {
+ if ( text[i].isSpace() ) {
+ if ( inside ) {
+ coordinatesLines.append( text.mid( index, i-index ) );
+ inside = false;
+ }
+ index = i+1;
+ } else {
+ inside = true;
+ }
+ }
+ coordinatesLines.append( text.mid( index ) );
Q_FOREACH( const QString& line, coordinatesLines ) {
QStringList coordinates = line.trimmed().split( ',' );
if ( parentItem.represents( kmlTag_Point ) && \
parentItem.is<GeoDataFeature>() ) {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic