From 2d5d854754f46bbec7bda749fe838be687393884 Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 2 Jun 2015 13:43:16 -0400 Subject: [PATCH] [fix] compilation/warnings --- src/numex.c | 58 ++++++++++++++++++++++++++++------------------------- src/numex.h | 19 ++++++++++++------ 2 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/numex.c b/src/numex.c index e737ccf4..f0a4bd79 100644 --- a/src/numex.c +++ b/src/numex.c @@ -21,7 +21,7 @@ void numex_table_destroy(void) { if (numex_table->languages != NULL) { numex_language_t *language; - kh_foreach(numex_table->languages, language, { + kh_foreach_value(numex_table->languages, language, { numex_language_destroy(language); }) @@ -36,7 +36,7 @@ void numex_table_destroy(void) { ordinal_indicator_array_destroy(numex_table->ordinal_indicators); } - free(self); + free(numex_table); } numex_table_t *numex_table_init(void) { @@ -79,7 +79,8 @@ exit_numex_table_created: numex_table_t *numex_table_new(void) { numex_table_t *numex_table = numex_table_init(); if (numex_table != NULL) { - numex_rule_array_push(numex_table->rules, NUMEX_STOPWORD_RULE); + numex_rule_t stopword_rule = NUMEX_STOPWORD_RULE; + numex_rule_array_push(numex_table->rules, stopword_rule); } return numex_table; } @@ -127,7 +128,7 @@ numex_language_t *get_numex_language(char *name) { khiter_t k; k = kh_get(str_numex_language, numex_table->languages, name); - return (k != kh_end(numex_table->languages) ? kh_value(numex_table->languages, k) : NULL); + return k != kh_end(numex_table->languages) ? kh_value(numex_table->languages, k) : NULL; } numex_language_t *numex_language_read(FILE *f) { @@ -201,27 +202,27 @@ bool numex_language_write(numex_language_t *language, FILE *f) { } bool numex_rule_read(FILE *f, numex_rule_t *rule) { - if (!file_read_uint64(f, rule->left_context_type)) { + if (!file_read_uint64(f, (uint64_t *)&rule->left_context_type)) { return false; } - if (!file_read_uint64(f, rule->right_context_type)) { + if (!file_read_uint64(f, (uint64_t *)&rule->right_context_type)) { return false; } - if (!file_read_uint64(f, rule->rule_type)) { + if (!file_read_uint64(f, (uint64_t *)&rule->rule_type)) { return false; } - if (!file_read_uint64(f, rule->gender)) { + if (!file_read_uint64(f, (uint64_t *)&rule->gender)) { return false; } - if (!file_read_uint32(f, rule->radix)) { + if (!file_read_uint32(f, &rule->radix)) { return false; } - if (!file_read_uint64(f, (uint64_t *)rule->value)) { + if (!file_read_uint64(f, (uint64_t *)&rule->value)) { return false; } @@ -259,21 +260,21 @@ bool numex_rule_write(numex_rule_t rule, FILE *f) { void ordinal_indicator_destroy(ordinal_indicator_t *self) { if (self == NULL) return; - if (self->name != NULL) { - free(self->name); + if (self->suffix != NULL) { + free(self->suffix); } free(self); } -ordinal_indicator_t *ordinal_indicator_new(uint8_t number, gender_t gender, char *name) { +ordinal_indicator_t *ordinal_indicator_new(uint8_t number, gender_t gender, char *suffix) { ordinal_indicator_t *ordinal = malloc(sizeof(ordinal_indicator_t)); if (ordinal == NULL) { return NULL; } - ordinal->name = strdup(name); - if (ordinal->name == NULL) { + ordinal->suffix = strdup(suffix); + if (ordinal->suffix == NULL) { ordinal_indicator_destroy(ordinal); return NULL; } @@ -295,18 +296,18 @@ ordinal_indicator_t *ordinal_indicator_read(FILE *f) { return NULL; } - size_t ordinal_name_len; - if (!file_read_uint64(f, &ordinal_name_len)) { + size_t ordinal_suffix_len; + if (!file_read_uint64(f, (uint64_t *)&ordinal_suffix_len)) { return NULL; } - char ordinal_name[ordinal_name_len]; + char ordinal_suffix[ordinal_suffix_len]; - if (!file_read_chars(f, ordinal_name, ordinal_name_len)) { + if (!file_read_chars(f, ordinal_suffix, ordinal_suffix_len)) { return NULL; } - return ordinal_indicator_new(number, gender, ordinal_name); + return ordinal_indicator_new(number, gender, ordinal_suffix); } @@ -319,9 +320,9 @@ bool ordinal_indicator_write(ordinal_indicator_t *ordinal, FILE *f) { return false; } - size_t name_len = strlen(ordinal->name) + 1; + size_t name_len = strlen(ordinal->suffix) + 1; if (!file_write_uint64(f, name_len) || - !file_write_chars(f, ordinal->name, name_len)) { + !file_write_chars(f, ordinal->suffix, name_len)) { return false; } @@ -396,7 +397,7 @@ bool numex_table_read(FILE *f) { } numex_table->trie = trie_read(f); - if (numex_table->trie == MNULL) { + if (numex_table->trie == NULL) { goto exit_numex_table_load_error; } @@ -407,7 +408,7 @@ exit_numex_table_load_error: return false; } -numex_table_t *numex_table_load(char *filename) { +bool numex_table_load(char *filename) { FILE *f; if ((f = fopen(filename, "rb")) == NULL) { return NULL; @@ -442,6 +443,8 @@ bool numex_table_write(FILE *f) { numex_rule_t rule; + int i = 0; + for (i = 0; i < num_rules; i++) { rule = numex_table->rules->a[i]; @@ -492,11 +495,12 @@ bool numex_table_save(char *filename) { /* Initializes numex trie/module Must be called only once before the module can be used */ -void numex_module_setup(char *filename) { +bool numex_module_setup(char *filename) { if (filename == NULL) { - numex_table_new(); + numex_table = numex_table_new(); + return numex_table != NULL; } else if (numex_table == NULL) { - numex_table = numex_table_load(filename); + return numex_table_load(filename); } } diff --git a/src/numex.h b/src/numex.h index ca8b4564..0f6157b2 100644 --- a/src/numex.h +++ b/src/numex.h @@ -12,9 +12,12 @@ extern "C" { #include #include "collections.h" +#include "config.h" #include "constants.h" +#include "klib/khash.h" #include "string_utils.h" #include "tokens.h" +#include "trie.h" #define DEFAULT_NUMEX_PATH LIBPOSTAL_DATA_DIR "/numex/numex.dat" @@ -45,14 +48,16 @@ typedef enum { } numex_rule_type; typedef struct numex_rule { - numex_left_context_type left_context_type; - numex_right_context_type right_context_type; + numex_left_context left_context_type; + numex_right_context right_context_type; numex_rule_type rule_type; gender_t gender; uint32_t radix; int64_t value; } numex_rule_t; +#define NUMEX_STOPWORD_INDEX 0 + #define NUMEX_STOPWORD_RULE (numex_rule_t) {NUMEX_LEFT_CONTEXT_NONE, NUMEX_RIGHT_CONTEXT_NONE, NUMEX_STOPWORD, GENDER_NONE, 0, 0}; VECTOR_INIT(numex_rule_array, numex_rule_t) @@ -60,9 +65,11 @@ VECTOR_INIT(numex_rule_array, numex_rule_t) typedef struct ordinal_indicator { uint8_t number; gender_t gender; - char *indicator; + char *suffix; } ordinal_indicator_t; + +ordinal_indicator_t *ordinal_indicator_new(uint8_t number, gender_t gender, char *suffix); void ordinal_indicator_destroy(ordinal_indicator_t *self); VECTOR_INIT_FREE_DATA(ordinal_indicator_array, ordinal_indicator_t *, ordinal_indicator_destroy) @@ -86,18 +93,18 @@ typedef struct { numex_table_t *get_numex_table(void); -numex_language_t *numex_language_new(char *name, size_t rules_index, size_t num_rules, size_t ordinals_index, size_t num_ordinals) +numex_language_t *numex_language_new(char *name, size_t rules_index, size_t num_rules, size_t ordinals_index, size_t num_ordinals); void numex_language_destroy(numex_language_t *self); bool numex_table_add_language(numex_language_t *language); numex_language_t *get_numex_language(char *name); -char *convert_numeric_expressions(char *input, token_array *input); +char *convert_numeric_expressions(char *input, token_array *tokens); bool numex_table_write(FILE *file); bool numex_table_save(char *filename); -void numex_module_setup(char *filename); +bool numex_module_setup(char *filename); void numex_module_teardown(void); #ifdef __cplusplus