view CachedEditDistance.cpp @ 78:9744ec195be3

Encapsulate EditDistance with caching.
author Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no>
date Thu, 10 Oct 2013 01:07:52 +0200
parents
children
line wrap: on
line source

#include "CachedEditDistance.hpp"

#include "CompileTimeConstants.h"
#include "ConfigurationProcessing.hpp"

CachedEditDistance::cacheType* CachedEditDistance::cache = 0;
//CachedEditDistance::cacheType CachedEditDistance::cache;

int CachedEditDistance::Compute(QString a, QString b, bool remove) {
  if (remove) {
    removeDiacriticsNoCopy(a);
    removeDiacriticsNoCopy(b);
  }

  if ( a == b)
    return 0;

  OrderedPair<UniqueString> lup(a, b);

  if (cache == 0) {
    QString cacheLocation = processSetupVariables(EDITDISTANCE_CACHE_LOCATION);
    CachedEditDistance::cache = new cacheType(cacheLocation, "EditLUT");
  }
  boost::optional<int> res = cache->value(lup);
  if (res)
    return *res;

  int retVal = EditDistance::Compute(a, b, false);

  cache->insert(lup, retVal);

  return retVal;
}