Mercurial > dedupe
comparison EditDistance.cpp @ 16:06166d6c083b
Add configuration processing.
Cache DB values
Add a custom RBTree to save space.
Track multiple DB connections properly.
More testing.
Add ValueExistsException.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Tue, 28 Aug 2012 18:58:02 +0200 |
| parents | b5943e4bf676 |
| children | fda70a362ed5 |
comparison
equal
deleted
inserted
replaced
| 15:199fc63c60c1 | 16:06166d6c083b |
|---|---|
| 1 #include "EditDistance.hpp" | 1 #include "EditDistance.hpp" |
| 2 #include "CompileTimeConstants.h" | |
| 3 #include "ConfigurationProcessing.hpp" | |
| 2 | 4 |
| 3 #include <QtCore/QList> | 5 #include <QtCore/QList> |
| 4 | 6 |
| 5 #define CharComparer(A, B) (QChar(A) == QChar(B)) | 7 #define CharComparer(A, B) (QChar(A) == QChar(B)) |
| 6 | 8 |
| 7 EditDistance::cacheType EditDistance::cache; | 9 EditDistance::cacheType* EditDistance::cache = 0; |
| 10 //EditDistance::cacheType EditDistance::cache; | |
| 8 | 11 |
| 9 QString EditDistance::removeDiacritics(QString in) | 12 QString EditDistance::removeDiacritics(QString in) |
| 10 { | 13 { |
| 11 QString out; | 14 QString out; |
| 12 foreach(QChar c, in) { | 15 foreach(QChar c, in) { |
| 25 if (remove) { | 28 if (remove) { |
| 26 a = removeDiacritics(a); | 29 a = removeDiacritics(a); |
| 27 b = removeDiacritics(b); | 30 b = removeDiacritics(b); |
| 28 } | 31 } |
| 29 | 32 |
| 30 OrderedPair<QString> lup(a, b); | 33 OrderedPair<UniqueString> lup(a, b); |
| 31 | 34 |
| 32 boost::optional<int> res = cache.value(lup); | 35 if (cache == 0) { |
| 36 QString cacheLocation = processSetupVariables(EDITDISTANCE_CACHE_LOCATION); | |
| 37 EditDistance::cache = new cacheType(cacheLocation, "EditLUT"); | |
| 38 } | |
| 39 boost::optional<int> res = cache->value(lup); | |
| 33 if (res) | 40 if (res) |
| 34 return *res; | 41 return *res; |
| 35 | 42 |
| 36 | 43 |
| 37 // Allocate distance matrix | 44 // Allocate distance matrix |
| 72 } | 79 } |
| 73 } | 80 } |
| 74 | 81 |
| 75 // Return final value | 82 // Return final value |
| 76 int retVal = d[a.size()][ b.size()]; | 83 int retVal = d[a.size()][ b.size()]; |
| 77 cache.insert(lup, retVal); | 84 cache->insert(lup, retVal); |
| 78 | 85 |
| 79 return retVal; | 86 return retVal; |
| 80 } | 87 } |
