# HG changeset patch # User Tom Fredrik Blenning Klaussen # Date 1347199792 -7200 # Node ID 4c283daa42c7d012f5b149126f5b317da6231946 # Parent e0898020af08bfe672158c669e4bd7d3ad6966af Optimize diacritics removal. diff -r e0898020af08 -r 4c283daa42c7 EditDistance.cpp --- a/EditDistance.cpp Sun Sep 09 15:17:00 2012 +0200 +++ b/EditDistance.cpp Sun Sep 09 16:09:52 2012 +0200 @@ -10,25 +10,28 @@ EditDistance::cacheType* EditDistance::cache = 0; //EditDistance::cacheType EditDistance::cache; -QString EditDistance::removeDiacritics(QString in) +void EditDistance::removeDiacriticsNoCopy(QString& in) { - QString out; - foreach(QChar c, in) { - if (c.decompositionTag() == QChar::NoDecomposition) { - out.append(c); - } - else { - QString tmp = c.decomposition(); - out.append(tmp[0]); + for(QString::iterator c = in.begin(); + c != in.end(); ++c) { + if (c->decompositionTag() != QChar::NoDecomposition) { + QString tmp = c->decomposition(); + *c = tmp[0]; } } +} + +QString EditDistance::removeDiacritics(const QString& in) +{ + QString out = in; + removeDiacriticsNoCopy(out); return out; } int EditDistance::Compute(QString a, QString b, bool remove) { if (remove) { - a = removeDiacritics(a); - b = removeDiacritics(b); + removeDiacriticsNoCopy(a); + removeDiacriticsNoCopy(b); } if ( a == b) diff -r e0898020af08 -r 4c283daa42c7 EditDistance.hpp --- a/EditDistance.hpp Sun Sep 09 15:17:00 2012 +0200 +++ b/EditDistance.hpp Sun Sep 09 16:09:52 2012 +0200 @@ -18,7 +18,8 @@ //typedef QHash, int> cacheType; public: static int Compute(QString a, QString b, bool removeDiacritics = false); - static QString removeDiacritics(QString in); + static void removeDiacriticsNoCopy(QString& in); + static QString removeDiacritics(const QString& in); //static cacheType cache; static cacheType* cache;