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;