aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2021-10-15 09:29:01 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2021-10-15 09:29:01 -0400
commit49d392f261391f1c5b238df80c937d652ebbea87 (patch)
tree77c6604bc3d77fe24dbfd9fb231b9fe9824379a6
parent248b0ccc87b7fcb4a260790d38f3e59a971abf31 (diff)
downloadjdtalk-49d392f261391f1c5b238df80c937d652ebbea87.tar.gz
Optimize dictionary search for speed
-rw-r--r--lib/jdtalk/core.d23
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/jdtalk/core.d b/lib/jdtalk/core.d
index c6a2c6b..d8f5386 100644
--- a/lib/jdtalk/core.d
+++ b/lib/jdtalk/core.d
@@ -153,24 +153,33 @@ bool wordStartsWith(ref string[] words, char ch) {
bool searchDict(dict_t dict, string pattern) {
bool has_pattern = false;
foreach (wordList; [dict.noun, dict.verb, dict.adverb, dict.adjective]) {
- foreach (word; wordList) {
- has_pattern = wordList.canFind(pattern);
- if (has_pattern) break;
+ if ((has_pattern = wordList.canFind(pattern)) == true) {
+ break;
}
- if (has_pattern) break;
}
return has_pattern;
}
-char acronymSafe(ref dict_t dict, string acronym) {
+char acronymSafe(ref dict_t dict, string acronym, string pattern=null) {
string[] words;
+ char last = 0;
+
words = dict.noun ~ dict.verb ~ dict.adverb ~ dict.adjective;
for (int i = 0; i < acronym.length; i++) {
if (!wordStartsWith(words, acronym[i])) {
- return acronym[i];
+ last = acronym[i];
+ }
+ }
+
+ bool has_pattern = false;
+ if (pattern) {
+ char check = pattern[0];
+ has_pattern = acronym.canFind(check.to!string);
+ if (!has_pattern) {
+ last = check;
}
}
- return 0;
+ return last;
}