]> Git trees. - libqmvoc.git/commitdiff
make lessons in document on the stack instead of the heap, and react to these changes...
authorJeremy Paul Whiting <jpwhiting@kde.org>
Mon, 3 Sep 2007 14:41:39 +0000 (14:41 +0000)
committerJeremy Paul Whiting <jpwhiting@kde.org>
Mon, 3 Sep 2007 14:41:39 +0000 (14:41 +0000)
svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=707982

keduvocdocument/keduvocdocument.cpp
keduvocdocument/keduvocdocument.h
keduvocdocument/keduvockvtml2reader.cpp
keduvocdocument/keduvockvtml2writer.cpp
keduvocdocument/keduvockvtmlreader.cpp
keduvocdocument/keduvockvtmlwriter.cpp
keduvocdocument/keduvoclesson.cpp
keduvocdocument/keduvoclesson.h

index dde171f0a8c53cc176a0db4af4975a0f20f59860..82137a6c42ce1a757e686565255ace747af39f4d 100644 (file)
@@ -64,9 +64,6 @@ public:
 
     void init();
 
-
-    void ClearLessons();
-
     KEduVocDocument* q;
 
     bool                      m_dirty;
@@ -102,7 +99,7 @@ public:
     QString                   m_category;
 
     // make this a map so removals don't require renumbering :)
-    QMap<int, KEduVocLesson*>  m_lessons;
+    QMap<int, KEduVocLesson>  m_lessons;
 
     KEduVocWordType*          m_wordTypes;
 
@@ -112,22 +109,11 @@ public:
 
 KEduVocDocument::KEduVocDocumentPrivate::~KEduVocDocumentPrivate()
 {
-    ClearLessons();
-}
-
-void KEduVocDocument::KEduVocDocumentPrivate::ClearLessons()
-{
-    QList<int> keys = m_lessons.keys();
-    for (int i = 0; i < keys.size(); ++i)
-    {
-        delete m_lessons.value(keys[i]);
-    }
-    m_lessons.clear();
 }
 
 void KEduVocDocument::KEduVocDocumentPrivate::init()
 {
-    ClearLessons();
+    m_lessons.clear();
     m_tenseDescriptions.clear();
     m_identifiers.clear();
     m_sortIdentifier.clear();
@@ -871,24 +857,20 @@ int KEduVocDocument::addLesson( const QString &lessonName, int position )
         }
     }
 
-    KEduVocLesson *lesson = new KEduVocLesson;
-    lesson->setName( lessonName );
+    KEduVocLesson lesson;
+    lesson.setName( lessonName );
     d->m_lessons.insert( position, lesson );
     return position;
 }
 
-QMap<int, KEduVocLesson *> KEduVocDocument::lessons() const
+QMap<int, KEduVocLesson> & KEduVocDocument::lessons() const
 {
     return d->m_lessons;
 }
 
-KEduVocLesson * KEduVocDocument::lesson( int index )
+KEduVocLesson & KEduVocDocument::lesson( int index )
 {
-    KEduVocLesson * retval( NULL );
-    if ( d->m_lessons.contains( index ) ) {
-        retval = d->m_lessons[index];
-    }
-    return retval;
+    return d->m_lessons[index];
 }
 
 //void KEduVocDocument::renameLesson(const int lessonIndex, const QString &lessonName)
@@ -1044,9 +1026,9 @@ void KEduVocDocument::setCurrentLesson( int lesson )
 QStringList KEduVocDocument::lessonNames() const
 {
     QStringList descriptions;
-    QList<KEduVocLesson*> lessonObjects = lessons().values();
+    QList<KEduVocLesson> lessonObjects = lessons().values();
     for ( int i = 0; i < lessonObjects.count(); ++i ) {
-        descriptions.append( lessonObjects[i]->name() );
+        descriptions.append( lessonObjects[i].name() );
     }
     return descriptions;
 }
index 44d009f9d90c7573e69343a30129a0224337771f..5d8819a631bf3c5c5238029b436a06821d2bb584 100644 (file)
@@ -390,14 +390,15 @@ public:
     void setCurrentLesson( int lesson );
 
     /** get a lesson object
-     * @returns a pointer to the lesson object at the specified index or NULL if there isn't one
+     * @returns a pointer to the lesson object at the specified index
+     * NOTE: this will create one if it doesn't exist
      */
-    KEduVocLesson *lesson( int index );
+    KEduVocLesson lesson( int index );
 
     /** get all lesson objects
      * @returns a map of pointers to lesson objects
      */
-    QMap<int, KEduVocLesson *> lessons() const;
+    QMap<int, KEduVocLesson> & lessons() const;
 
     /**
      * @returns                the number of lessons defined
index 1ad98f828537318876846e9a33bd3154f2d97c06..3372776117794917cfc4801be0ac36e5fe9864bd 100644 (file)
@@ -470,7 +470,7 @@ bool KEduVocKvtml2Reader::readLesson( QDomElement &lessonElement )
         // TODO: once we have a lesson class, add each of these entryids to the lesson
         // set this lesson for the given enty
         m_doc->entry( entryId )->setLesson( lessonId );
-        m_doc->lesson( lessonId )->addEntry( entryId );
+        m_doc->lesson( lessonId ).addEntry( entryId );
         currentElement = currentElement.nextSiblingElement( KVTML_ENTRYID );
     }
 
index 0241b1aa0b1316b13564b739db809047400fb13e..35aaf6dad90c506b1316b99a1b3d8e53e2a8f39a 100644 (file)
@@ -172,16 +172,16 @@ bool KEduVocKvtml2Writer::writeLessons( QDomElement &lessonsElement )
     if ( m_doc->lessonCount() == 0 )
         return true;
 
-    QMap<int, KEduVocLesson*> lessons = m_doc->lessons();
+    QMap<int, KEduVocLesson> lessons = m_doc->lessons();
 
     foreach( int lessonid, lessons.keys() ) {
-        KEduVocLesson thisLesson = lessons[lessonid];
+        KEduVocLesson thisLesson = lessons[lessonid];
 
         // make lesson element
         QDomElement thisLessonElement = m_domDoc.createElement( KVTML_LESSON );
 
         // add a name
-        thisLessonElement.appendChild( newTextElement( KVTML_NAME, thisLesson->name() ) );
+        thisLessonElement.appendChild( newTextElement( KVTML_NAME, thisLesson.name() ) );
 
         // add a inquery tag
         thisLessonElement.appendChild( newTextElement( KVTML_QUERY, m_doc->lessonInQuery( lessonid ) ? KVTML_TRUE : KVTML_FALSE ) );
index fb5d4c08520730f86986625606f51e65ded99b0e..142a3985f8ab22e20cdc6be9db7f0b345755b553 100644 (file)
@@ -1075,9 +1075,7 @@ bool KEduVocKvtmlReader::readExpression( QDomElement &domElementParent )
     m_doc->appendEntry( &expr );
 
     // also add this entryid to the lesson it's part of
-    if ( m_doc->lesson( lesson ) != NULL ) {
-        m_doc->lesson( lesson )->addEntry( m_doc->entryCount() );
-    }
+    m_doc->lesson( lesson ).addEntry( m_doc->entryCount() );
 
     return true;
 }
index 3b24cbdf0f24fe689a3a2bda733c499892f7a29a..c78f535e5e7041df6d927811782a31e97246c5da 100644 (file)
@@ -299,12 +299,12 @@ bool KEduVocKvtmlWriter::writeLesson( QDomDocument &domDoc, QDomElement &domElem
     QDomElement domElementLesson = domDoc.createElement( KV_LESS_GRP );
     domElementLesson.setAttribute( KV_SIZEHINT, m_doc->sizeHint( -1 ) );
 
-    const QMap<int, KEduVocLesson*> lessons = m_doc->lessons();
+    QMap<int, KEduVocLesson> lessons = m_doc->lessons();
     QList<int> keys = lessons.keys();
     for ( int i = 0; i < keys.size(); ++i ) {
         int thiskey = keys[i];
         QDomElement domElementDesc = domDoc.createElement( KV_LESS_DESC );
-        QDomText domTextDesc = domDoc.createTextNode( lessons[thiskey]->name() );
+        QDomText domTextDesc = domDoc.createTextNode( lessons[thiskey].name() );
 
         domElementDesc.setAttribute( KV_LESS_NO, thiskey );
         if ( m_doc->currentLesson() == thiskey )
index 2c773aef19886ac546a9137c9048c10017ad8a56..8c4d2fdf357484c7da70e2dd2de75d81e99d6a24 100644 (file)
@@ -53,6 +53,11 @@ KEduVocLesson& KEduVocLesson::operator= ( const KEduVocLesson &other )
     return *this;
 }
 
+bool KEduVocLesson::operator==(const KEduVocLesson &other)
+{
+    return d->m_entries == other.d->m_entries && d->m_name == other.d->m_name;
+}
+
 void KEduVocLesson::setName( const QString &name )
 {
     d->m_name = name;
index 3201fd03f9981b16a7a5a229a9d5bed389bf2b67..10a4b11dd82a04ba29ad3847efba54850f2d507e 100644 (file)
@@ -62,6 +62,9 @@ public:
      * @param entryid id of the entry to remove
      */
     void removeEntry( int entryid );
+    
+    /** equality operator */
+    bool operator==(const KEduVocLesson &other);
 
 private:
     class Private;