00001
00002 #ifndef CMAID_MAGIC_H
00003 #define CMAID_MAGIC_H
00004
00005 #define CMAID_MAGIC_CONTAINER 0xDF000097
00006 #define CMAID_MAGIC_CONTAINER_MASK 0xFF0000FF
00007 #define CMAID_MAGIC_LIST (0x00ECCE00 | CMAID_MAGIC_CONTAINER)
00008 #define CMAID_MAGIC_SET (0x00DBBD00 | CMAID_MAGIC_CONTAINER)
00009 #define CMAID_MAGIC_MAP (0x00CAAC00 | CMAID_MAGIC_CONTAINER)
00010 #define CMAID_MAGIC_CACHE (0x00A88A00 | CMAID_MAGIC_CONTAINER)
00011
00012 #ifndef CMAID_DEBUG
00013 # define CMAID_CHECK_POINTER_RET(par, ret) (void)par
00014 # define CMAID_CHECK_POINTER(par) (void)par
00015 # define CMAID_CHECK_CONTAINER_RET(c, ret) (void)c
00016 # define CMAID_CHECK_CONTAINER(c) (void)c
00017 # define CMAID_CHECK_TYPE_RET(c, type, ret) (void)c
00018 # define CMAID_CHECK_TYPE(c, type) (void)c
00019 # define CMAID_CHECKED_ITER
00020 #else
00021 # include <stdio.h>
00022 # define CMAID_CHECK_POINTER(par) CMAID_CHECK_POINTER_RET(par, )
00023 # define CMAID_CHECK_POINTER_RET(par, ret) \
00024 do { \
00025 if (!(par)) \
00026 { \
00027 fprintf(stderr, "*** Cmaid Warning ***\n\n" \
00028 "\t%s();\n\n" \
00029 "\tWith the parameter %s" \
00030 "being NULL.\n\n" \
00031 "Please fix your program.\n", \
00032 __func__, # par); \
00033 return ret; \
00034 } \
00035 } while (0)
00036 # define CMAID_CHECK_CONTAINER(c) CMAID_CHECK_CONTAINER_RET(c, )
00037 # define CMAID_CHECK_CONTAINER_RET(c, ret) \
00038 do { \
00039 if (!(c) \
00040 || ((((Cmaid_Container_Interface *)c->interface)->magic \
00041 & CMAID_MAGIC_CONTAINER_MASK) \
00042 != CMAID_MAGIC_CONTAINER))\
00043 { \
00044 fprintf(stderr, "*** Cmaid Warning ***\n\n" \
00045 "\t%s();\n\n" \
00046 "\tWith the parameter %s" \
00047 "is not a container.\n\n" \
00048 "Please fix your program.\n", \
00049 __func__, # c); \
00050 return ret; \
00051 } \
00052 } while (0)
00053
00054 # define CMAID_CHECK_TYPE(c, type) CMAID_CHECK_TYPE_RET(c, type, )
00055 # define CMAID_CHECK_TYPE_RET(c, type, ret) \
00056 do { \
00057 if (!(c) \
00058 || (((Cmaid_Container_Interface *)c->interface)->magic \
00059 != type))\
00060 { \
00061 fprintf(stderr, "*** Cmaid Warning ***\n\n" \
00062 "\t%s();\n\n" \
00063 "\tWith the parameter %s" \
00064 "is not of the type %s.\n\n" \
00065 "Please fix your program.\n", \
00066 __func__, # c, #type); \
00067 return ret; \
00068 } \
00069 } while (0)
00070
00071 # define __CMAID_CHECKED_ITER__ __attribute__((__cleanup__(cmaid_iter_check)))\
00072 = {NULL}
00073 #endif
00074
00075 EAPI void cmaid_iter_check(Cmaid_Iter *iter);
00076
00077 #endif