From fc65a0926de9cbfb2f55dd167860170ecc11a3c5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nguy=E1=BB=85n=20H=E1=BB=93ng=20Qu=C3=A2n?= Date: Sun, 28 Oct 2012 17:15:18 +0700 Subject: [PATCH] Improve speed of conjugating. --- mainwindow.cpp | 37 +++++++++++++++++++++++++----- mainwindow.h | 4 ++++ qtc_packaging/debian_fremantle/changelog | 7 +++--- qtc_packaging/debian_fremantle/control | 2 +- qtc_packaging/debian_harmattan/changelog | 10 ++++++++ qtc_packaging/debian_harmattan/control | 2 +- 6 files changed, 50 insertions(+), 12 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 08bb3f9..f194fc1 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -122,12 +122,16 @@ void MainWindow::initverbiste() void MainWindow::startLookup() { + QString input = wordinput->text().trimmed(); + if (input.isEmpty()) { + return; + } + btnLookup->setText(tr("Please wait...")); btnLookup->setEnabled(false); clearResults(); /* Pending the lookup job to the next event loop (redraw the button right now) */ QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); - QString input = wordinput->text(); /* Get input word to look up */ const std::string word = input.toLower().toUtf8().constData(); @@ -143,11 +147,29 @@ void MainWindow::startLookup() freVerbDic->deconjugate(word, infles); resultPages->setUpdatesEnabled(false); - std::string prevUTF8Infinitive, prevTemplateName; + std::string prevUTF8Infinitive, prevTemplateName; /* Remember found word + to avoid conjugating again */ + for (std::vector::const_iterator it = infles.begin(); it != infles.end(); it++) { const InflectionDesc &d = *it; + +#ifndef QT_NO_DEBUG + qDebug() << ">> Infinitive " << d.infinitive.c_str(); + qDebug() << " Template " << d.templateName.c_str(); +#endif + /* If this infinitive has been conjugated, we skip to the next infinitive */ + if (d.infinitive == prevUTF8Infinitive && d.templateName == prevTemplateName) { + continue; + } + /* FIXME: + * In original source (Verbiste), this checking is done later, + * after getConjugation(). I place it here to avoid calling again + * multitimes getConjugation(), which is very slow. + * We need to test more to see which place is more correct. + */ + VVVS conjug; getConjugation(freVerbDic, d.infinitive, d.templateName, conjug, includePronouns); @@ -160,11 +182,13 @@ void MainWindow::startLookup() } std::string utf8Infinitive = conjug[0][0][0]; - if (utf8Infinitive == prevUTF8Infinitive && d.templateName == prevTemplateName) - // This result is duplicated - continue; +#ifndef QT_NO_DEBUG + qDebug() << " getConjugation() returns:"; + qDebug() << " Infinitive " << utf8Infinitive.c_str() << " at " << timer.elapsed(); + qDebug() << " Template " << d.templateName.c_str(); +#endif - /* Show on GUI */ + /* Add result to GUI (not show yet) */ ResultPage *rsp = addResultPage(utf8Infinitive); /* Get modes and tenses of the verb */ @@ -187,6 +211,7 @@ void MainWindow::startLookup() QVBoxLayout *cell = makeResultCell(*t, utf8TenseName, word, freVerbDic); rsp->grid->addLayout(cell, row, col); } + /* Show the result on GUI */ rsp->packContent(); prevUTF8Infinitive = utf8Infinitive; prevTemplateName = d.templateName; diff --git a/mainwindow.h b/mainwindow.h index f4ac2e1..cb38a10 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -19,6 +19,7 @@ #ifndef QT_NO_DEBUG #include +#include #endif using namespace verbiste; @@ -84,6 +85,9 @@ private: FrenchVerbDictionary *freVerbDic; ResultPage* addResultPage(const std::string &labelText); +#ifndef QT_NO_DEBUG + QElapsedTimer timer; +#endif private slots: void clearResults(); diff --git a/qtc_packaging/debian_fremantle/changelog b/qtc_packaging/debian_fremantle/changelog index 80b9733..6a842ab 100644 --- a/qtc_packaging/debian_fremantle/changelog +++ b/qtc_packaging/debian_fremantle/changelog @@ -1,5 +1,4 @@ -mverbiste (0.0.1) unstable; urgency=low +mverbiste (1.0.0) unstable; urgency=low + * Initial Release. - * Initial Release. - - -- Nguyễn Hồng Quân Wed, 24 Oct 2012 22:43:33 +0700 + -- Nguyễn Hồng Quân Sun, 28 Oct 2012 17:08:52 +0700 diff --git a/qtc_packaging/debian_fremantle/control b/qtc_packaging/debian_fremantle/control index d6c123b..8a75af3 100644 --- a/qtc_packaging/debian_fremantle/control +++ b/qtc_packaging/debian_fremantle/control @@ -12,5 +12,5 @@ Depends: ${shlibs:Depends}, ${misc:Depends} Description: MVerbiste is to help conjugation French verbs. MVerbiste is an effort to bring Verbiste, a program to help conjugate French verbs, to Maemo & MeeGo. Created with Qt GUI and the library from Verbiste. -XB-Maemo-Display-Name: mverbiste +XB-Maemo-Display-Name: MVerbiste XB-Maemo-Icon-26: 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 diff --git a/qtc_packaging/debian_harmattan/changelog b/qtc_packaging/debian_harmattan/changelog index afe756b..69502e9 100644 --- a/qtc_packaging/debian_harmattan/changelog +++ b/qtc_packaging/debian_harmattan/changelog @@ -1,3 +1,13 @@ +mverbiste (1.0.0) unstable; urgency=low + * + + -- Nguyễn Hồng Quân Sun, 28 Oct 2012 17:08:52 +0700 + +mverbiste (1.0.1) unstable; urgency=low + * + + -- Nguyễn Hồng Quân Sun, 28 Oct 2012 17:08:50 +0700 + mverbiste (0.0.1) unstable; urgency=low * Initial Release. diff --git a/qtc_packaging/debian_harmattan/control b/qtc_packaging/debian_harmattan/control index aafb186..da8c6e7 100644 --- a/qtc_packaging/debian_harmattan/control +++ b/qtc_packaging/debian_harmattan/control @@ -11,5 +11,5 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: -XSBC-Maemo-Display-Name: mverbiste +XSBC-Maemo-Display-Name: MVerbiste XB-Maemo-Icon-26: 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 -- 1.7.9.5