// examples/utils.h #ifndef INCLUDED_UTILS_H #define INCLUDED_UTILS_H #include #include #define CMMM__STRING_VIEW__STRIP_VENDOR #define CMMM__STRING_VIEW__SHORT_NAMESPACE #define CMMM__ARENA__STRIP_VENDOR #include "cmmm/string-view.h" #include "cmmm/arena.h" #define NOP() do {} while (0) #define UNUSED(EXP) ((void) EXP) #define ARRAY_LENGTH(ARR) (sizeof (ARR)/sizeof (*(ARR))) #ifndef NDEBUG #include #define ASSERT assert #else #define ASSERT(...) NOP () #endif #define STRINGIFY(ARG) #ARG #define TO_STRING(ARG) STRINGIFY (ARG) #ifndef NDEBUG #define DEBUG(FMT, ...) \ fprintf (stderr, __FILE__ ":" TO_STRING (__LINE__) ": %s: " FMT "\n", \ __func__ __VA_OPT__ (,) __VA_ARGS__) #define LOG(FMT, ...) \ fprintf (stderr, __FILE__ ":" TO_STRING (__LINE__) ": %s: " FMT "\n", \ __func__ __VA_OPT__ (,) __VA_ARGS__) #else #define DEBUG(...) NOP () #define LOG(FMT, ...) \ fprintf (stderr, FMT "\n", __VA_OPT__ (,) __VA_ARGS__) #endif #define ERROR(FMT, ...) LOG ("error: " FMT __VA_OPT__ (,) __VA_ARGS__) #define WARNING(FMT, ...) LOG ("warning: " FMT __VA_OPT__ (,) __VA_ARGS__) #define NOTICE(FMT, ...) LOG ("notice: " FMT __VA_OPT__ (,) __VA_ARGS__) #define INFO(FMT, ...) LOG ("info: " FMT __VA_OPT__ (,) __VA_ARGS__) #ifndef NDEBUG #define ASSERT_MSG(EXP, FMT, ...) do if (!(EXP)) { \ DEBUG (FMT __VA_OPT__ (,) __VA_ARGS__); \ exit (EXIT_FAILURE); \ } while (0) #else #define ASSERT_MSG(EXP, FMT, ...) NOP () #endif struct cmmm__sv mmap_whole (int fd); struct cmmm__sv read_until_eof (ARENA, int fd); #endif // INCLUDED_UTILS_H // examples/utils.c ends here