1 #ifndef CHEWING_PRIVATE_H 2 #define CHEWING_PRIVATE_H 3 4 #ifdef HAVE_CONFIG_H 5 #include <config.h> 6 #endif 7 8 /* Platform-dependent declaration */ 9 #include "plat_types.h" 10 11 #define LOG_VERBOSE(fmt, ...) \ 12 do { \ 13 pgdata->logger(pgdata->loggerData, CHEWING_LOG_VERBOSE, \ 14 "[%s:%d %s] " fmt "\n", \ 15 __FILE__, __LINE__, __func__, ##__VA_ARGS__); \ 16 } while (0) 17 18 #define LOG_DEBUG(fmt, ...) \ 19 do { \ 20 pgdata->logger(pgdata->loggerData, CHEWING_LOG_DEBUG, \ 21 "[%s:%d %s] " fmt "\n", \ 22 __FILE__, __LINE__, __func__, ##__VA_ARGS__); \ 23 } while (0) 24 25 #define LOG_INFO(fmt, ...) \ 26 do { \ 27 pgdata->logger(pgdata->loggerData, CHEWING_LOG_INFO, \ 28 "[%s:%d %s] " fmt "\n", \ 29 __FILE__, __LINE__, __func__, ##__VA_ARGS__); \ 30 } while (0) 31 32 #define LOG_WARN(fmt, ...) \ 33 do { \ 34 pgdata->logger(pgdata->loggerData, CHEWING_LOG_WARN, \ 35 "[%s:%d %s] " fmt "\n", \ 36 __FILE__, __LINE__, __func__, ##__VA_ARGS__); \ 37 } while (0) 38 39 #define LOG_ERROR(fmt, ...) \ 40 do { \ 41 pgdata->logger(pgdata->loggerData, CHEWING_LOG_ERROR, \ 42 "[%s:%d %s] " fmt "\n", \ 43 __FILE__, __LINE__, __func__, ##__VA_ARGS__); \ 44 } while (0) 45 46 #define DEBUG_OUT( fmt, ... ) \ 47 do { \ 48 pgdata->logger(pgdata->loggerData, CHEWING_LOG_INFO, fmt, \ 49 ##__VA_ARGS__ ); \ 50 } while (0) 51 52 #define DEBUG_CHECKPOINT() \ 53 do { \ 54 pgdata->logger(pgdata->loggerData, CHEWING_LOG_VERBOSE, \ 55 "[ File: %s Func: %s Line: %d ]\n", \ 56 __FILE__, __FUNCTION__, __LINE__ ); \ 57 } while (0) 58 59 /* Use LOG_API to log all public API call. */ 60 #define LOG_API(fmt, ...) \ 61 do { \ 62 LOG_INFO("API call: " fmt, ##__VA_ARGS__); \ 63 } while (0) 64 65 #define ALC(type, size) \ 66 (type *) calloc(size, sizeof(type)) 67 68 #define ASSERT_CONCAT_(a, b) a##b 69 #define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b) 70 71 #ifdef __COUNTER__ 72 #define STATIC_ASSERT(e) \ 73 { enum { ASSERT_CONCAT(static_assert_, __COUNTER__) = 1/(!!(e)) }; } 74 #else 75 /* This can't be used twice on the same line so ensure if using in headers 76 * that the headers are not included twice (by wrapping in #ifndef...#endif) 77 * Note it doesn't cause an issue when used on same line of separate modules 78 * compiled with gcc -combine -fwhole-program. */ 79 #define STATIC_ASSERT(e) \ 80 { enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(e)) }; } 81 #endif 82 83 #ifdef __GNUC__ 84 #define ARRAY_SIZE(array) (sizeof(array) / sizeof(((typeof(array)){})[0])) 85 #else 86 #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) 87 #endif 88 89 typedef int (*CompFuncType)(const void *, const void *); 90 91 #define CEIL_DIV(a, b) (((a) + (b) - 1) / (b)) 92 93 #define __stringify(x) #x 94 95 #endif 96