Mercurial > dedupe
changeset 42:4c283daa42c7
Optimize diacritics removal.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Sun, 09 Sep 2012 16:09:52 +0200 |
| parents | e0898020af08 |
| children | 1334d1417c0b |
| files | EditDistance.cpp EditDistance.hpp |
| diffstat | 2 files changed, 16 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- 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)
--- 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<OrderedPair<QString>, 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;
