#ifndef CRIMP_COMMON_H
#define CRIMP_COMMON_H
/*
* CRIMP :: Common Declarations :: PUBLIC
* (C) 2011.
*/
#define CRIMP_RANGEOK(i,n) ((0 <= (i)) && (i < (n)))
/*
* Convenient checking of image types.
*/
#define CRIMP_ASSERT_IMGTYPE(image,imtype) \
CRIMP_ASSERT ((image)->itype == crimp_imagetype_find ("crimp::image::" CRIMP_STR(imtype)), \
"expected image type " CRIMP_STR(imtype))
#define CRIMP_ASSERT_NOTIMGTYPE(image,imtype) \
CRIMP_ASSERT ((image)->itype != crimp_imagetype_find ("crimp::image::" CRIMP_STR(imtype)), \
"unexpected image type " CRIMP_STR(imtype))
/*
* Assertions support in general, and asserting the proper range of an array
* index especially.
*/
#undef CRIMP_DEBUG /* Future: controlled by a user-specified critcl option */
#define CRIMP_DEBUG 1 /* */
#ifdef CRIMP_DEBUG
#define CRIMP_XSTR(x) #x
#define CRIMP_STR(x) CRIMP_XSTR(x)
#define CRIMP_ASSERT(x,msg) if (!(x)) { Tcl_Panic (msg " (" #x "), in file " __FILE__ " @line " CRIMP_STR(__LINE__));}
#define CRIMP_ASSERT_BOUNDS(i,n) CRIMP_ASSERT (CRIMP_RANGEOK(i,n),"array index out of bounds: " CRIMP_STR(i) " > " CRIMP_STR(n))
#else
#define CRIMP_ASSERT(x,msg)
#define CRIMP_ASSERT_BOUNDS(i,n)
#endif
/*
* Heap allocation helpers.
*/
#define CRIMP_ALLOC(type) ((type *) ckalloc (sizeof (type)))
#define CRIMP_ALLOC_ARRAY(n,type) ((type *) ckalloc ((n) * sizeof (type)))
/*
* Local Variables:
* mode: c
* c-basic-offset: 4
* fill-column: 78
* End:
*/
#endif /* CRIMP_COMMON_H */