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 }