From 4ae1a16a1e19186b6ed893c30759fe25c4b37b32 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Thu, 28 Nov 2013 22:06:55 +0000 Subject: [PATCH] added caching to be able to quickly generate the inflection table for Finnish --- .../ui/android/Translator.java | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java index 0c03f4ad3..dddc59108 100644 --- a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java +++ b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java @@ -17,6 +17,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -223,9 +224,10 @@ public class Translator { if (res == 0) return ""; + Map> cache = new HashMap>(); + String cat = getGrammar().getFunctionType(lemma).getCategory(); - Expr expr = Expr.readExpr(lemma); - Map lins = targetLang.tabularLinearize(expr); + XmlResourceParser parser = mContext.getResources().getXml(res); StringBuilder builder = new StringBuilder(); builder.append(""); @@ -282,11 +284,18 @@ public class Translator { } else if (state == 4 && "form".equals(parser.getName())) { form = false; } else if (state == 4 && lin && "lin".equals(parser.getName())) { - Expr expr2 = Expr.readExpr(abstrBuilder.toString()); - if (formName == null) - builder.append(TextUtils.htmlEncode(targetLang.linearize(expr2))); - else { - String elin = targetLang.tabularLinearize(expr2).get(formName); + String s = abstrBuilder.toString(); + if (formName == null) { + Expr expr = Expr.readExpr(s); + builder.append(TextUtils.htmlEncode(targetLang.linearize(expr))); + } else { + Map elins = cache.get(s); + if (elins == null) { + Expr expr = Expr.readExpr(s); + elins = targetLang.tabularLinearize(expr); + cache.put(s, elins); + } + String elin = elins.get(formName); builder.append(TextUtils.htmlEncode(elin)); } @@ -302,7 +311,13 @@ public class Translator { emit = true; } else if (state == 4 && emit) { if (form) { - String s = lins.get(parser.getText()); + Map elins = cache.get(lemma); + if (elins == null) { + Expr expr = Expr.readExpr(lemma); + elins = targetLang.tabularLinearize(expr); + cache.put(lemma, elins); + } + String s = elins.get(parser.getText()); if (s != null) builder.append(TextUtils.htmlEncode(s)); } else {