[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [marble] /: turn SimpleArrayData into pointer to avoid memory
From:       Niko Sams <niko.sams () gmail ! com>
Date:       2011-12-31 15:16:59
Message-ID: 20111231151659.5688B580C3 () git ! kde ! org
[Download RAW message or body]

Git commit a9cfdf1d2ef329d7d870a60a0b7ce4da1d5f02bf by Niko Sams.
Committed on 08/12/2011 at 19:38.
Pushed by nsams into branch 'master'.

turn SimpleArrayData into pointer to avoid memory management issues

M  +3    -2    src/lib/geodata/data/GeoDataExtendedData.cpp
M  +2    -2    src/lib/geodata/data/GeoDataExtendedData.h
M  +1    -1    src/lib/geodata/data/GeoDataExtendedData_p.h
M  +2    -2    src/lib/geodata/handlers/kml/KmlSimpleArrayDataTagHandler.cpp
M  +12   -12   tests/TestGeoDataTrack.cpp

http://commits.kde.org/marble/a9cfdf1d2ef329d7d870a60a0b7ce4da1d5f02bf

diff --git a/src/lib/geodata/data/GeoDataExtendedData.cpp b/src/lib/geodata/data/GeoDataExtendedData.cpp
index 17a1fe2..4437216 100644
--- a/src/lib/geodata/data/GeoDataExtendedData.cpp
+++ b/src/lib/geodata/data/GeoDataExtendedData.cpp
@@ -85,13 +85,14 @@ bool GeoDataExtendedData::contains( const QString &key ) const
     return d->hash.contains( key );
 }
 
-void GeoDataExtendedData::setSimpleArrayData( const QString& key, const GeoDataSimpleArrayData& values )
+void GeoDataExtendedData::setSimpleArrayData( const QString& key, GeoDataSimpleArrayData *values )
 {
     d->arrayHash[ key ] = values;
 }
 
-GeoDataSimpleArrayData& GeoDataExtendedData::simpleArrayData( const QString& key )
+GeoDataSimpleArrayData* GeoDataExtendedData::simpleArrayData( const QString& key ) const
 {
+    if ( !d->arrayHash.contains( key ) ) return 0;
     return d->arrayHash[ key ];
 }
 
diff --git a/src/lib/geodata/data/GeoDataExtendedData.h b/src/lib/geodata/data/GeoDataExtendedData.h
index b534544..d318fa6 100644
--- a/src/lib/geodata/data/GeoDataExtendedData.h
+++ b/src/lib/geodata/data/GeoDataExtendedData.h
@@ -92,12 +92,12 @@ class GEODATA_EXPORT GeoDataExtendedData : public GeoDataObject
     /**
      * @brief set SimpleArrayData for given @p key
      */
-    void setSimpleArrayData( const QString& key, const GeoDataSimpleArrayData& values );
+    void setSimpleArrayData( const QString& key, GeoDataSimpleArrayData* values );
 
     /**
      * @brief return SimpleArrayData for given @p key as a modifiable reference
      */
-    GeoDataSimpleArrayData& simpleArrayData( const QString& key );
+    GeoDataSimpleArrayData* simpleArrayData( const QString& key ) const;
 
 
     /**
diff --git a/src/lib/geodata/data/GeoDataExtendedData_p.h b/src/lib/geodata/data/GeoDataExtendedData_p.h
index d52fe7e..9646e10 100644
--- a/src/lib/geodata/data/GeoDataExtendedData_p.h
+++ b/src/lib/geodata/data/GeoDataExtendedData_p.h
@@ -32,7 +32,7 @@ class GeoDataExtendedDataPrivate
     }
 
     QHash< QString, GeoDataData > hash;
-    QHash< QString, GeoDataSimpleArrayData > arrayHash;
+    QHash< QString, GeoDataSimpleArrayData* > arrayHash;
 
 };
 
diff --git a/src/lib/geodata/handlers/kml/KmlSimpleArrayDataTagHandler.cpp \
b/src/lib/geodata/handlers/kml/KmlSimpleArrayDataTagHandler.cpp index 4fd8224..bb71d3c 100644
--- a/src/lib/geodata/handlers/kml/KmlSimpleArrayDataTagHandler.cpp
+++ b/src/lib/geodata/handlers/kml/KmlSimpleArrayDataTagHandler.cpp
@@ -43,14 +43,14 @@ GeoNode* KmlSimpleArrayDataTagHandler::parse( GeoParser& parser ) const
     GeoStackItem parentItem = parser.parentElement();
 
     if ( parentItem.is<GeoDataExtendedData>() ) {
-        GeoDataSimpleArrayData arrayData;
+        GeoDataSimpleArrayData *arrayData = new GeoDataSimpleArrayData();
         QString name = parser.attribute( "name" ).trimmed();
         parentItem.nodeAs<GeoDataExtendedData>()->setSimpleArrayData( name, arrayData );
 #ifdef DEBUG_TAGS
         mDebug() << "Parsed <" << kmlTag_SimpleArrayData << ">"
                  << " parent item name: " << parentItem.qualifiedName().first;
 #endif // DEBUG_TAGS
-        return &parentItem.nodeAs<GeoDataExtendedData>()->simpleArrayData( name );
+        return arrayData;
     }
 
     return 0;
diff --git a/tests/TestGeoDataTrack.cpp b/tests/TestGeoDataTrack.cpp
index a00b3bb..c6bf16f 100644
--- a/tests/TestGeoDataTrack.cpp
+++ b/tests/TestGeoDataTrack.cpp
@@ -258,22 +258,22 @@ void TestGeoDataTrack::extendedDataParseTest()
     QCOMPARE( track->size(), 7 );
 
     {
-        GeoDataSimpleArrayData cadence = track->extendedData().simpleArrayData( "cadence" );
-        QCOMPARE( cadence.size(), 7 );
-        QCOMPARE( cadence.valueAt( 0 ), QVariant( "86" ) );
-        QCOMPARE( cadence.valueAt( 6 ), QVariant( "113" ) );
+        GeoDataSimpleArrayData *cadence = track->extendedData().simpleArrayData( "cadence" );
+        QCOMPARE( cadence->size(), 7 );
+        QCOMPARE( cadence->valueAt( 0 ), QVariant( "86" ) );
+        QCOMPARE( cadence->valueAt( 6 ), QVariant( "113" ) );
     }
     {
-        GeoDataSimpleArrayData hr = track->extendedData().simpleArrayData( "heartrate" );
-        QCOMPARE( hr.size(), 7 );
-        QCOMPARE( hr.valueAt( 0 ), QVariant( "181" ) );
-        QCOMPARE( hr.valueAt( 6 ), QVariant( "173" ) );
+        GeoDataSimpleArrayData *hr = track->extendedData().simpleArrayData( "heartrate" );
+        QCOMPARE( hr->size(), 7 );
+        QCOMPARE( hr->valueAt( 0 ), QVariant( "181" ) );
+        QCOMPARE( hr->valueAt( 6 ), QVariant( "173" ) );
     }
     {
-        GeoDataSimpleArrayData power = track->extendedData().simpleArrayData( "power" );
-        QCOMPARE( power.size(), 7 );
-        QCOMPARE( power.valueAt( 0 ), QVariant( "327.0" ) );
-        QCOMPARE( power.valueAt( 6 ), QVariant( "183.0" ) );
+        GeoDataSimpleArrayData *power = track->extendedData().simpleArrayData( "power" );
+        QCOMPARE( power->size(), 7 );
+        QCOMPARE( power->valueAt( 0 ), QVariant( "327.0" ) );
+        QCOMPARE( power->valueAt( 6 ), QVariant( "183.0" ) );
     }
 
     delete dataDocument;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic