diff options
Diffstat (limited to 'moon-abe/pbc-0.5.14/include/pbc_utils.h')
-rw-r--r-- | moon-abe/pbc-0.5.14/include/pbc_utils.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/moon-abe/pbc-0.5.14/include/pbc_utils.h b/moon-abe/pbc-0.5.14/include/pbc_utils.h new file mode 100644 index 00000000..62c02b07 --- /dev/null +++ b/moon-abe/pbc-0.5.14/include/pbc_utils.h @@ -0,0 +1,86 @@ +#ifndef __PBC_UTILS_H__ +#define __PBC_UTILS_H__ + +#ifdef PBC_DEBUG + +/*@manual debug +Macro: if `expr` evaluates to 0, print `msg` and exit. +*/ +#define PBC_ASSERT(expr, msg) \ + (pbc_assert(expr, msg, __func__)) + +/*@manual debug +Macro: if elements `a` and `b` are from different fields then exit. +*/ +#define PBC_ASSERT_MATCH2(a, b) \ + (pbc_assert_match2(a, b, __func__)) + +/*@manual debug +Macro: if elements `a`, `b` and `c` are from different fields then exit. +*/ +#define PBC_ASSERT_MATCH3(a, b, c) \ + (pbc_assert_match3(a, b, c, __func__)) + +#else + +#define PBC_ASSERT(expr, msg) ((void) (0)) +#define PBC_ASSERT_MATCH2(a, b) ((void) (0)) +#define PBC_ASSERT_MATCH3(a, b, c) ((void) (0)) + +#endif + +// die, warn and info based on Git code. + +/*@manual log +By default error messages are printed to standard error. +Call `pbc_set_msg_to_stderr(0)` to suppress messages. +*/ +int pbc_set_msg_to_stderr(int i); + +/*@manual log +Reports error message and exits with code 128. +*/ +void pbc_die(const char *err, ...) + __attribute__((__noreturn__)) + __attribute__((format (printf, 1, 2))); + +/*@manual log +Reports informational message. +*/ +void pbc_info(const char *err, ...) + __attribute__((format (printf, 1, 2))); + +/*@manual log +Reports warning message. +*/ +void pbc_warn(const char *err, ...) + __attribute__((format (printf, 1, 2))); + +/*@manual log +Reports error message. +*/ +void pbc_error(const char *err, ...) + __attribute__((format (printf, 1, 2))); + +#ifndef UNUSED_VAR +#if defined(__GNUC__) +// We could use __attribute__((unused)) instead. +#define UNUSED_VAR(a) (void) a +#else +// From the ACE project: http://www.cs.wustl.edu/~schmidt/ACE.html +// silences warnings, and generates no code for many compilers +// See ACE_wrappers/ace/ace/config-macros.h:391 +// +// Not anymore: gcc no longer likes it -blynn +#define UNUSED_VAR(a) do { /* nothing */ } while (&a == 0) +#endif +#endif + +// For storing small integers in void * +// C99 standard introduced the intptr_t and uintptr_t types, +// guaranteed to be able to hold pointers +static inline void *int_to_voidp(intptr_t i) { + return (void *) i; +} + +#endif //__PBC_UTILS_H__ |