From 2d6079b06f3a5be427f108ddf3dd42321774c790 Mon Sep 17 00:00:00 2001 From: Al Date: Sat, 28 Oct 2017 02:40:14 -0400 Subject: [PATCH] [expand] added search_address_dictionaries_substring to support the new use case (i.e. returns "does this substring in the trie?" regardless of if it's stored under the special prefixes/suffixes namespaces) --- src/address_dictionary.c | 25 +++++++++++++++++++++++++ src/address_dictionary.h | 1 + 2 files changed, 26 insertions(+) diff --git a/src/address_dictionary.c b/src/address_dictionary.c index ed1116f6..fd3fe471 100644 --- a/src/address_dictionary.c +++ b/src/address_dictionary.c @@ -251,6 +251,31 @@ phrase_array *search_address_dictionaries_tokens(char *str, token_array *tokens, return phrases; } + +phrase_t search_address_dictionaries_substring(char *str, size_t len, char *lang) { + if (str == NULL) return NULL_PHRASE; + if (address_dict == NULL) { + log_error(ADDRESS_DICTIONARY_SETUP_ERROR); + return NULL_PHRASE; + } + + trie_prefix_result_t prefix = get_language_prefix(lang); + + if (prefix.node_id == NULL_NODE_ID) { + log_debug("prefix.node_id == NULL_NODE_ID\n"); + return NULL_PHRASE; + } + + phrase_t phrase = trie_search_prefixes_from_index(address_dict->trie, str, len, prefix.node_id); + if (phrase.len == len) { + return phrase; + } else { + return NULL_PHRASE; + } + +} + + phrase_t search_address_dictionaries_prefix(char *str, size_t len, char *lang) { if (str == NULL) return NULL_PHRASE; if (address_dict == NULL) { diff --git a/src/address_dictionary.h b/src/address_dictionary.h index cc5e8748..1a80ed6c 100644 --- a/src/address_dictionary.h +++ b/src/address_dictionary.h @@ -63,6 +63,7 @@ bool search_address_dictionaries_with_phrases(char *str, char *lang, phrase_arra phrase_array *search_address_dictionaries_tokens(char *str, token_array *tokens, char *lang); bool search_address_dictionaries_tokens_with_phrases(char *str, token_array *tokens, char *lang, phrase_array **phrases); +phrase_t search_address_dictionaries_substring(char *str, size_t len, char *lang); phrase_t search_address_dictionaries_prefix(char *str, size_t len, char *lang); phrase_t search_address_dictionaries_suffix(char *str, size_t len, char *lang);