From 0305b366f7112c6b3f0c763d96a4f8986f78c71a Mon Sep 17 00:00:00 2001 From: Jeremy Paul Whiting Date: Mon, 3 Sep 2007 14:41:39 +0000 Subject: [PATCH] make lessons in document on the stack instead of the heap, and react to these changes in kvoctrain svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=707982 --- keduvocdocument/keduvocdocument.cpp | 36 +++++++------------------ keduvocdocument/keduvocdocument.h | 7 ++--- keduvocdocument/keduvockvtml2reader.cpp | 2 +- keduvocdocument/keduvockvtml2writer.cpp | 6 ++--- keduvocdocument/keduvockvtmlreader.cpp | 4 +-- keduvocdocument/keduvockvtmlwriter.cpp | 4 +-- keduvocdocument/keduvoclesson.cpp | 5 ++++ keduvocdocument/keduvoclesson.h | 3 +++ 8 files changed, 28 insertions(+), 39 deletions(-) diff --git a/keduvocdocument/keduvocdocument.cpp b/keduvocdocument/keduvocdocument.cpp index dde171f..82137a6 100644 --- a/keduvocdocument/keduvocdocument.cpp +++ b/keduvocdocument/keduvocdocument.cpp @@ -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 m_lessons; + QMap m_lessons; KEduVocWordType* m_wordTypes; @@ -112,22 +109,11 @@ public: KEduVocDocument::KEduVocDocumentPrivate::~KEduVocDocumentPrivate() { - ClearLessons(); -} - -void KEduVocDocument::KEduVocDocumentPrivate::ClearLessons() -{ - QList 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 KEduVocDocument::lessons() const +QMap & 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 lessonObjects = lessons().values(); + QList lessonObjects = lessons().values(); for ( int i = 0; i < lessonObjects.count(); ++i ) { - descriptions.append( lessonObjects[i]->name() ); + descriptions.append( lessonObjects[i].name() ); } return descriptions; } diff --git a/keduvocdocument/keduvocdocument.h b/keduvocdocument/keduvocdocument.h index 44d009f..5d8819a 100644 --- a/keduvocdocument/keduvocdocument.h +++ b/keduvocdocument/keduvocdocument.h @@ -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 lessons() const; + QMap & lessons() const; /** * @returns the number of lessons defined diff --git a/keduvocdocument/keduvockvtml2reader.cpp b/keduvocdocument/keduvockvtml2reader.cpp index 1ad98f8..3372776 100644 --- a/keduvocdocument/keduvockvtml2reader.cpp +++ b/keduvocdocument/keduvockvtml2reader.cpp @@ -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 ); } diff --git a/keduvocdocument/keduvockvtml2writer.cpp b/keduvocdocument/keduvockvtml2writer.cpp index 0241b1a..35aaf6d 100644 --- a/keduvocdocument/keduvockvtml2writer.cpp +++ b/keduvocdocument/keduvockvtml2writer.cpp @@ -172,16 +172,16 @@ bool KEduVocKvtml2Writer::writeLessons( QDomElement &lessonsElement ) if ( m_doc->lessonCount() == 0 ) return true; - QMap lessons = m_doc->lessons(); + QMap 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 ) ); diff --git a/keduvocdocument/keduvockvtmlreader.cpp b/keduvocdocument/keduvockvtmlreader.cpp index fb5d4c0..142a398 100644 --- a/keduvocdocument/keduvockvtmlreader.cpp +++ b/keduvocdocument/keduvockvtmlreader.cpp @@ -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; } diff --git a/keduvocdocument/keduvockvtmlwriter.cpp b/keduvocdocument/keduvockvtmlwriter.cpp index 3b24cbd..c78f535 100644 --- a/keduvocdocument/keduvockvtmlwriter.cpp +++ b/keduvocdocument/keduvockvtmlwriter.cpp @@ -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 lessons = m_doc->lessons(); + QMap lessons = m_doc->lessons(); QList 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 ) diff --git a/keduvocdocument/keduvoclesson.cpp b/keduvocdocument/keduvoclesson.cpp index 2c773ae..8c4d2fd 100644 --- a/keduvocdocument/keduvoclesson.cpp +++ b/keduvocdocument/keduvoclesson.cpp @@ -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; diff --git a/keduvocdocument/keduvoclesson.h b/keduvocdocument/keduvoclesson.h index 3201fd0..10a4b11 100644 --- a/keduvocdocument/keduvoclesson.h +++ b/keduvocdocument/keduvoclesson.h @@ -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; -- 2.47.3