diff --git a/src/collections.h b/src/collections.h index a9199bda..91befa32 100644 --- a/src/collections.h +++ b/src/collections.h @@ -33,12 +33,12 @@ KHASH_SET_INIT_STR(str_set) // Vectors -VECTOR_INIT_NUMERIC(int32_array, int32_t) -VECTOR_INIT_NUMERIC(uint32_array, uint32_t) -VECTOR_INIT_NUMERIC(int64_array, int64_t) -VECTOR_INIT_NUMERIC(uint64_array, uint64_t) -VECTOR_INIT_NUMERIC_FLOAT(float_array, float) -VECTOR_INIT_NUMERIC_FLOAT(double_array, double) +VECTOR_INIT_NUMERIC(int32_array, int32_t, uint32_t, abs) +VECTOR_INIT_NUMERIC(uint32_array, uint32_t, uint32_t, abs) +VECTOR_INIT_NUMERIC(int64_array, int64_t, uint64_t, llabs) +VECTOR_INIT_NUMERIC(uint64_array, uint64_t, uint64_t, llabs) +VECTOR_INIT_NUMERIC_FLOAT(float_array, float, fabsf) +VECTOR_INIT_NUMERIC_FLOAT(double_array, double, fabs) VECTOR_INIT(char_array, char) VECTOR_INIT(uchar_array, unsigned char) diff --git a/src/geodb_builder.c b/src/geodb_builder.c index 1cb333f0..adea7601 100644 --- a/src/geodb_builder.c +++ b/src/geodb_builder.c @@ -24,7 +24,7 @@ #define DEFAULT_GEONAMES_TSV LIBPOSTAL_GEONAMES_DIR PATH_SEPARATOR "geonames.tsv"; static bool read_geoname_from_line(geoname_t *g, char *line) { - int token_count; + size_t token_count; char *token; @@ -185,7 +185,8 @@ exit_geoname_free_tokens: } static bool read_gn_postal_code_from_line(gn_postal_code_t *postal, char *line) { - int token_count, i; + size_t token_count; + int i; gn_postal_code_clear(postal); @@ -225,7 +226,7 @@ static bool read_gn_postal_code_from_line(gn_postal_code_t *postal, char *line) size_t admin1_field_len = strlen(admin1_field); if (admin1_field_len > 0) { - int admin1_token_count; + size_t admin1_token_count; cstring_array *admin1_tokens = cstring_array_split(admin1_field, COMMA_SEPARATOR, COMMA_SEPARATOR_LEN, &admin1_token_count); uint32_t admin1_id; if (admin1_token_count > 0) { @@ -244,7 +245,7 @@ static bool read_gn_postal_code_from_line(gn_postal_code_t *postal, char *line) size_t admin2_field_len = strlen(admin2_field); if (admin2_field_len > 0) { - int admin2_token_count; + size_t admin2_token_count; cstring_array *admin2_tokens = cstring_array_split(admin2_field, COMMA_SEPARATOR, COMMA_SEPARATOR_LEN, &admin2_token_count); uint32_t admin2_id; if (admin2_token_count > 0) { @@ -263,7 +264,7 @@ static bool read_gn_postal_code_from_line(gn_postal_code_t *postal, char *line) size_t admin3_field_len = strlen(admin3_field); if (admin3_field_len > 0) { - int admin3_token_count; + size_t admin3_token_count; cstring_array *admin3_tokens = cstring_array_split(admin3_field, COMMA_SEPARATOR, COMMA_SEPARATOR_LEN, &admin3_token_count); uint32_t admin3_id; if (admin3_token_count > 0) { diff --git a/src/string_utils.c b/src/string_utils.c index 248da12e..9d401f56 100644 --- a/src/string_utils.c +++ b/src/string_utils.c @@ -65,8 +65,8 @@ inline bool string_starts_with(const char *str, const char *start) { } inline bool string_ends_with(const char *str, const char *ending) { - int end_len = strlen(ending); - int str_len = strlen(str); + size_t end_len = strlen(ending); + size_t str_len = strlen(str); return str_len < end_len ? false : !strcmp(str + str_len - end_len, ending); } @@ -704,7 +704,7 @@ void cstring_array_clear(cstring_array *self) { } inline uint32_t cstring_array_start_token(cstring_array *self) { - uint32_t index = self->str->n; + uint32_t index = (uint32_t)self->str->n; uint32_array_push(self->indices, index); return index; } @@ -759,7 +759,7 @@ inline int64_t cstring_array_token_length(cstring_array *self, uint32_t i) { } } -cstring_array *cstring_array_split(char *str, const char *separator, size_t separator_len, int *count) { +cstring_array *cstring_array_split(char *str, const char *separator, size_t separator_len, size_t *count) { *count = 0; char_array *array = char_array_new_size(strlen(str)); @@ -780,13 +780,11 @@ cstring_array *cstring_array_split(char *str, const char *separator, size_t sepa return string_array; } -cstring_array *cstring_array_split_no_copy(char *str, char separator, int *count) { +cstring_array *cstring_array_split_no_copy(char *str, char separator, size_t *count) { *count = 0; char *ptr = str; size_t len = strlen(str); - size_t skip_len = 1; - for (int i = 0; i < len; i++, ptr++) { if (*ptr == separator) { *ptr = '\0'; @@ -844,7 +842,7 @@ string_tree_t *string_tree_new(void) { return string_tree_new_size((size_t)DEFAULT_STRING_TREE_SIZE); } -inline char *string_tree_get_alternative(string_tree_t *self, size_t token_index, size_t alternative) { +inline char *string_tree_get_alternative(string_tree_t *self, size_t token_index, uint32_t alternative) { if (token_index >= self->token_indices->n) return NULL; uint32_t token_start = self->token_indices->a[token_index]; @@ -853,7 +851,7 @@ inline char *string_tree_get_alternative(string_tree_t *self, size_t token_index } inline void string_tree_finalize_token(string_tree_t *self) { - uint32_array_push(self->token_indices, cstring_array_num_strings(self->strings)); + uint32_array_push(self->token_indices, (uint32_t)cstring_array_num_strings(self->strings)); } // terminated @@ -875,11 +873,11 @@ inline void string_tree_append_string_len(string_tree_t *self, char *str, size_t } inline uint32_t string_tree_num_tokens(string_tree_t *self) { - return self->token_indices->n - 1; + return (uint32_t)self->token_indices->n - 1; } inline uint32_t string_tree_num_strings(string_tree_t *self) { - return cstring_array_num_strings(self->strings); + return (uint32_t)cstring_array_num_strings(self->strings); } inline uint32_t string_tree_num_alternatives(string_tree_t *self, uint32_t i) { @@ -917,7 +915,7 @@ string_tree_iterator_t *string_tree_iterator_new(string_tree_t *tree) { self->num_alternatives = calloc(num_tokens, sizeof(uint32_t)); - uint64_t permutations = 1; + uint32_t permutations = 1; uint32_t num_strings; for (int i = 0; i < num_tokens; i++) { @@ -931,7 +929,7 @@ string_tree_iterator_t *string_tree_iterator_new(string_tree_t *tree) { } if (permutations > 1) { - self->remaining = permutations; + self->remaining = (uint32_t)permutations; self->single_path = false; } else{ self->remaining = 1; diff --git a/src/string_utils.h b/src/string_utils.h index a95bec02..359ecd4f 100644 --- a/src/string_utils.h +++ b/src/string_utils.h @@ -165,10 +165,10 @@ cstring_array *cstring_array_from_char_array(char_array *str); char **cstring_array_to_strings(cstring_array *self); // Split on delimiter -cstring_array *cstring_array_split(char *str, const char *separator, size_t separator_len, int *count); +cstring_array *cstring_array_split(char *str, const char *separator, size_t separator_len, size_t *count); // Split on delimiter by replacing (single character) separator with the NUL byte in the original string -cstring_array *cstring_array_split_no_copy(char *str, char separator, int *count); +cstring_array *cstring_array_split_no_copy(char *str, char separator, size_t *count); uint32_t cstring_array_start_token(cstring_array *self); uint32_t cstring_array_add_string(cstring_array *self, char *str); @@ -221,7 +221,7 @@ string_tree_t *string_tree_new(void); string_tree_t *string_tree_new_size(size_t size); // get -char *string_tree_get_alternative(string_tree_t *self, size_t token_index, size_t alternative); +char *string_tree_get_alternative(string_tree_t *self, size_t token_index, uint32_t alternative); // finalize void string_tree_finalize_token(string_tree_t *self); diff --git a/src/vector_math.h b/src/vector_math.h index 1295e4ac..be10b8de 100644 --- a/src/vector_math.h +++ b/src/vector_math.h @@ -6,7 +6,7 @@ #include #include "vector.h" -#define VECTOR_INIT_NUMERIC(name, type) \ +#define VECTOR_INIT_NUMERIC(name, type, unsigned_type, type_abs) \ __VECTOR_BASE(name, type) \ __VECTOR_DESTROY(name, type) \ \ @@ -119,16 +119,16 @@ return result; \ } \ \ - static inline type type##_array_l1_norm(type *array, size_t n) { \ - type result = 0; \ + static inline unsigned_type type##_array_l1_norm(type *array, size_t n) { \ + unsigned_type result = 0; \ for (int i = 0; i < n; i++) { \ - result += abs(array[i]); \ + result += type_abs(array[i]); \ } \ return result; \ } \ \ - static inline type type##_array_l2_norm(type *array, size_t n) { \ - type result = 0; \ + static inline unsigned_type type##_array_l2_norm(type *array, size_t n) { \ + unsigned_type result = 0; \ for (int i = 0; i < n; i++) { \ result += array[i] * array[i]; \ } \ @@ -177,8 +177,8 @@ -#define VECTOR_INIT_NUMERIC_FLOAT(name, type) \ - VECTOR_INIT_NUMERIC(name, type) \ +#define VECTOR_INIT_NUMERIC_FLOAT(name, type, type_abs) \ + VECTOR_INIT_NUMERIC(name, type, type, type_abs) \ \ static inline void type##_array_log(type *array, type c, size_t n) { \ for (int i = 0; i < n; i++) { \