/* See LICENSE file for copyright and license details. */ #ifndef UTIL_H #define UTIL_H #include #include #include "types.h" #define LEN(x) (sizeof (x) / sizeof *(x)) struct property_spec { const char *enumname; const char *file; const char *ucdname; }; struct properties { int_least64_t property; }; struct properties_compressed { size_t *offset; struct properties *data; size_t datalen; }; struct properties_major_minor { size_t *major; size_t *minor; size_t minorlen; }; int hextocp(const char *, size_t, uint_least32_t *cp); void parse_file_with_callback(const char *, int (*callback)(const char *, char **, size_t, char *, void *), void *payload); void properties_compress(const struct properties *, struct properties_compressed *comp); double properties_get_major_minor(const struct properties_compressed *, struct properties_major_minor *); void properties_print_lookup_table(char *, size_t *, size_t); void properties_print_derived_lookup_table(char *, char *, size_t *, size_t, int_least64_t (*get_value)(const struct properties *, size_t), const void *); void properties_generate_break_property(const struct property_spec *, uint_least8_t, uint_least8_t (*handle_conflict)(uint_least32_t, uint_least8_t, uint_least8_t), uint_least8_t (*post_process) (uint_least8_t), const char *, const char *); void break_test_list_parse(char *, struct break_test **, size_t *); void break_test_list_print(const struct break_test *, size_t, const char *, const char *); void break_test_list_free(struct break_test *, size_t); #endif /* UTIL_H */