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