From e62c75b9c6eea43d19d84629a7a1f106878c4c8d Mon Sep 17 00:00:00 2001 From: Al Date: Wed, 16 Sep 2015 21:24:23 -0400 Subject: [PATCH] [phrases] Adding _with_phrases versions of address dictionary methods for pre-allocated phrases --- src/address_dictionary.c | 36 +++++++++++++++++++++++++++++------- src/address_dictionary.h | 2 ++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/address_dictionary.c b/src/address_dictionary.c index 33f69d41..bd6a3791 100644 --- a/src/address_dictionary.c +++ b/src/address_dictionary.c @@ -159,28 +159,50 @@ static trie_prefix_result_t get_language_prefix(char *lang) { return prefix; } -phrase_array *search_address_dictionaries(char *str, char *lang) { - if (str == NULL) return NULL; +bool search_address_dictionaries_with_phrases(char *str, char *lang, phrase_array **phrases) { + if (str == NULL) return false; trie_prefix_result_t prefix = get_language_prefix(lang); if (prefix.node_id == NULL_NODE_ID) { - return NULL; + return false; } - return trie_search_from_index(address_dict->trie, str, prefix.node_id); + return trie_search_from_index(address_dict->trie, str, prefix.node_id, phrases); } -phrase_array *search_address_dictionaries_tokens(char *str, token_array *tokens, char *lang) { - if (str == NULL) return NULL; +phrase_array *search_address_dictionaries(char *str, char *lang) { + phrase_array *phrases = NULL; + + if (!search_address_dictionaries_with_phrases(str, lang, &phrases)) { + return NULL; + } + + return phrases; +} + + +bool search_address_dictionaries_tokens_with_phrases(char *str, token_array *tokens, char *lang, phrase_array **phrases) { + if (str == NULL) return false; trie_prefix_result_t prefix = get_language_prefix(lang); if (prefix.node_id == NULL_NODE_ID) { + return false; + } + + return trie_search_tokens_from_index(address_dict->trie, str, tokens, prefix.node_id, phrases); +} + + +phrase_array *search_address_dictionaries_tokens(char *str, token_array *tokens, char *lang) { + phrase_array *phrases = NULL; + + if (!search_address_dictionaries_tokens_with_phrases(str, tokens, lang, &phrases)) { return NULL; } - return trie_search_tokens_from_index(address_dict->trie, str, tokens, prefix.node_id); + return phrases; } phrase_t search_address_dictionaries_prefix(char *str, size_t len, char *lang) { diff --git a/src/address_dictionary.h b/src/address_dictionary.h index 331e357b..b7e1fa06 100644 --- a/src/address_dictionary.h +++ b/src/address_dictionary.h @@ -59,7 +59,9 @@ address_dictionary_t *get_address_dictionary(void); bool address_dictionary_init(void); phrase_array *search_address_dictionaries(char *str, char *lang); +bool search_address_dictionaries_with_phrases(char *str, char *lang, phrase_array **phrases); 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_prefix(char *str, size_t len, char *lang); phrase_t search_address_dictionaries_suffix(char *str, size_t len, char *lang);