[fix] making *_hash_sort_keys_by_value static

This commit is contained in:
Al
2016-01-06 23:01:00 -05:00
parent 0d5cf0d6d7
commit a8b9a2c153

View File

@@ -53,37 +53,37 @@ KSORT_INIT_STR
// Sort by value (must be defined after the vectors) // Sort by value (must be defined after the vectors)
#define KHASH_SORT_BY_VALUE(name, key_type, val_type, val_array_name) \ #define KHASH_SORT_BY_VALUE(name, key_type, val_type, val_array_name) \
key_type *name##_hash_sort_keys_by_value(khash_t(name) *h, bool reversed) { \ static key_type *name##_hash_sort_keys_by_value(khash_t(name) *h, bool reversed) { \
size_t n = kh_size(h); \ size_t n = kh_size(h); \
key_type *keys = malloc(sizeof(key_type) * n); \ key_type *keys = malloc(sizeof(key_type) * n); \
val_type *values = malloc(sizeof(val_type) * n); \ val_type *values = malloc(sizeof(val_type) * n); \
\ \
size_t i = 0; \ size_t i = 0; \
const key_type key; \ const key_type key; \
val_type value; \ val_type value; \
kh_foreach(h, key, value, { \ kh_foreach(h, key, value, { \
values[i] = value; \ values[i] = value; \
i++; \ i++; \
}) \ }) \
\ \
size_t *sorted_indices = val_array_name##_argsort(values, n); \ size_t *sorted_indices = val_array_name##_argsort(values, n); \
key_type *sorted_keys = malloc(sizeof(key_type) * n); \ key_type *sorted_keys = malloc(sizeof(key_type) * n); \
\ \
if (!reversed) { \ if (!reversed) { \
for (i = 0; i < n; i++) { \ for (i = 0; i < n; i++) { \
sorted_keys[i] = keys[sorted_indices[i]]; \ sorted_keys[i] = keys[sorted_indices[i]]; \
} \ } \
} else { \ } else { \
for (i = n; i >= 0; i--) { \ for (i = n; i >= 0; i--) { \
sorted_keys[i] = keys[sorted_indices[i]]; \ sorted_keys[i] = keys[sorted_indices[i]]; \
} \ } \
} \ } \
\ \
free(keys); \ free(keys); \
free(values); \ free(values); \
free(sorted_indices); \ free(sorted_indices); \
return sorted_keys; \ return sorted_keys; \
} }
KHASH_SORT_BY_VALUE(str_uint32, char *, uint32_t, uint32_array) KHASH_SORT_BY_VALUE(str_uint32, char *, uint32_t, uint32_array)