From e122824448794431946b20af000856fbbedc4095 Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 15 Sep 2015 13:24:53 -0400 Subject: [PATCH] [expansion] Adding the ability to search address dictionary phrases with a NULL language, will return phrases in any language --- src/address_dictionary.c | 16 ++++++++++------ src/address_dictionary.h | 2 +- src/geodb.c | 4 ++-- src/numex.c | 4 ++-- src/transliterate.c | 2 +- src/trie.h | 1 + 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/address_dictionary.c b/src/address_dictionary.c index ff5ad206..33f69d41 100644 --- a/src/address_dictionary.c +++ b/src/address_dictionary.c @@ -140,6 +140,10 @@ exit_key_created: } static trie_prefix_result_t get_language_prefix(char *lang) { + if (lang == NULL) { + return ROOT_PREFIX_RESULT; + } + trie_prefix_result_t prefix = trie_get_prefix(address_dict->trie, lang); if (prefix.node_id == NULL_NODE_ID) { @@ -156,7 +160,7 @@ static trie_prefix_result_t get_language_prefix(char *lang) { } phrase_array *search_address_dictionaries(char *str, char *lang) { - if (str == NULL || lang == NULL) return NULL; + if (str == NULL) return NULL; trie_prefix_result_t prefix = get_language_prefix(lang); @@ -168,7 +172,7 @@ phrase_array *search_address_dictionaries(char *str, char *lang) { } phrase_array *search_address_dictionaries_tokens(char *str, token_array *tokens, char *lang) { - if (str == NULL || lang == NULL) return NULL; + if (str == NULL) return NULL; trie_prefix_result_t prefix = get_language_prefix(lang); @@ -180,7 +184,7 @@ phrase_array *search_address_dictionaries_tokens(char *str, token_array *tokens, } phrase_t search_address_dictionaries_prefix(char *str, size_t len, char *lang) { - if (str == NULL || lang == NULL) return NULL_PHRASE; + if (str == NULL) return NULL_PHRASE; trie_prefix_result_t prefix = get_language_prefix(lang); @@ -193,7 +197,7 @@ 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) { - if (str == NULL || lang == NULL) return NULL_PHRASE; + if (str == NULL) return NULL_PHRASE; trie_prefix_result_t prefix = get_language_prefix(lang); @@ -512,8 +516,8 @@ bool address_dictionary_save(char *path) { return ret_val; } -inline bool address_dictionary_module_setup(void) { - return address_dictionary_load(DEFAULT_ADDRESS_EXPANSION_PATH); +inline bool address_dictionary_module_setup(char *filename) { + return address_dictionary_load(filename == NULL ? DEFAULT_ADDRESS_EXPANSION_PATH: filename); } void address_dictionary_module_teardown(void) { diff --git a/src/address_dictionary.h b/src/address_dictionary.h index a5b2fc4e..331e357b 100644 --- a/src/address_dictionary.h +++ b/src/address_dictionary.h @@ -75,7 +75,7 @@ void address_dictionary_destroy(address_dictionary_t *self); bool address_dictionary_load(char *path); bool address_dictionary_save(char *path); -bool address_dictionary_module_setup(void); +bool address_dictionary_module_setup(char *filename); void address_dictionary_module_teardown(void); diff --git a/src/geodb.c b/src/geodb.c index 09bfa004..66263c4f 100644 --- a/src/geodb.c +++ b/src/geodb.c @@ -163,8 +163,8 @@ inline geonames_generic_t *geodb_get(char *key) { } bool geodb_module_setup(char *dir) { - if (db == NULL && dir != NULL) { - return geodb_load(dir); + if (db == NULL) { + return geodb_load(dir == NULL ? LIBPOSTAL_GEODB_DIR : dir); } return false; diff --git a/src/numex.c b/src/numex.c index 4e8c0154..d453d134 100644 --- a/src/numex.c +++ b/src/numex.c @@ -563,11 +563,11 @@ bool numex_table_save(char *filename) { Must be called only once before the module can be used */ bool numex_module_setup(char *filename) { - if (filename == NULL) { + if (filename == NULL && numex_table == NULL) { numex_table = numex_table_new(); return numex_table != NULL; } else if (numex_table == NULL) { - return numex_table_load(filename); + return numex_table_load(filename == NULL ? DEFAULT_NUMEX_PATH : filename); } return false; } diff --git a/src/transliterate.c b/src/transliterate.c index fc770e8e..06a723b5 100644 --- a/src/transliterate.c +++ b/src/transliterate.c @@ -1909,7 +1909,7 @@ bool transliteration_module_setup(char *filename) { trans_table = transliteration_table_new(); return true; } else if (trans_table == NULL) { - return transliteration_table_load(filename); + return transliteration_table_load(filename == NULL ? DEFAULT_TRANSLITERATION_PATH : filename); } return false; diff --git a/src/trie.h b/src/trie.h index be705098..a121c4f2 100644 --- a/src/trie.h +++ b/src/trie.h @@ -129,6 +129,7 @@ typedef struct trie_prefix_result { size_t tail_pos; } trie_prefix_result_t; +#define ROOT_PREFIX_RESULT (trie_prefix_result_t) {ROOT_NODE_ID, 0} #define NULL_PREFIX_RESULT (trie_prefix_result_t) {NULL_NODE_ID, 0} trie_prefix_result_t trie_get_prefix(trie_t *self, char *key);