Path: blob/devel/elmergrid/src/metis-5.1.0/GKlib/gk_macros.h
3206 views
/*!1\file gk_macros.h2\brief This file contains various macros34\date Started 3/27/20075\author George6\version\verbatim $Id: gk_macros.h 10711 2011-08-31 22:23:04Z karypis $ \endverbatim7*/89#ifndef _GK_MACROS_H_10#define _GK_MACROS_H_1112/*-------------------------------------------------------------13* Usefull commands14*-------------------------------------------------------------*/15#define gk_max(a, b) ((a) >= (b) ? (a) : (b))16#define gk_min(a, b) ((a) >= (b) ? (b) : (a))17#define gk_max3(a, b, c) ((a) >= (b) && (a) >= (c) ? (a) : ((b) >= (a) && (b) >= (c) ? (b) : (c)))18#define gk_SWAP(a, b, tmp) do {(tmp) = (a); (a) = (b); (b) = (tmp);} while(0)19#define INC_DEC(a, b, val) do {(a) += (val); (b) -= (val);} while(0)20#define sign(a, b) ((a >= 0 ? b : -b))2122#define ONEOVERRANDMAX (1.0/(RAND_MAX+1.0))23#define RandomInRange(u) ((int) (ONEOVERRANDMAX*(u)*rand()))2425#define gk_abs(x) ((x) >= 0 ? (x) : -(x))262728/*-------------------------------------------------------------29* Timing macros30*-------------------------------------------------------------*/31#define gk_clearcputimer(tmr) (tmr = 0.0)32#define gk_startcputimer(tmr) (tmr -= gk_CPUSeconds())33#define gk_stopcputimer(tmr) (tmr += gk_CPUSeconds())34#define gk_getcputimer(tmr) (tmr)3536#define gk_clearwctimer(tmr) (tmr = 0.0)37#define gk_startwctimer(tmr) (tmr -= gk_WClockSeconds())38#define gk_stopwctimer(tmr) (tmr += gk_WClockSeconds())39#define gk_getwctimer(tmr) (tmr)4041/*-------------------------------------------------------------42* dbglvl handling macros43*-------------------------------------------------------------*/44#define IFSET(a, flag, cmd) if ((a)&(flag)) (cmd);454647/*-------------------------------------------------------------48* gracefull library exit macro49*-------------------------------------------------------------*/50#define GKSETJMP() (setjmp(gk_return_to_entry))51#define gk_sigcatch() (setjmp(gk_jbufs[gk_cur_jbufs]))525354/*-------------------------------------------------------------55* Debuging memory leaks56*-------------------------------------------------------------*/57#ifdef DMALLOC58# define MALLOC_CHECK(ptr) \59if (malloc_verify((ptr)) == DMALLOC_VERIFY_ERROR) { \60printf("***MALLOC_CHECK failed on line %d of file %s: " #ptr "\n", \61__LINE__, __FILE__); \62abort(); \63}64#else65# define MALLOC_CHECK(ptr) ;66#endif676869/*-------------------------------------------------------------70* CSR conversion macros71*-------------------------------------------------------------*/72#define MAKECSR(i, n, a) \73do { \74for (i=1; i<n; i++) a[i] += a[i-1]; \75for (i=n; i>0; i--) a[i] = a[i-1]; \76a[0] = 0; \77} while(0)7879#define SHIFTCSR(i, n, a) \80do { \81for (i=n; i>0; i--) a[i] = a[i-1]; \82a[0] = 0; \83} while(0)848586/*-------------------------------------------------------------87* ASSERTS that cannot be turned off!88*-------------------------------------------------------------*/89#define GKASSERT(expr) \90if (!(expr)) { \91printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \92__LINE__, __FILE__); \93abort(); \94}9596#define GKASSERTP(expr,msg) \97if (!(expr)) { \98printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \99__LINE__, __FILE__); \100printf msg ; \101printf("\n"); \102abort(); \103}104105#define GKCUASSERT(expr) \106if (!(expr)) { \107printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \108__LINE__, __FILE__); \109}110111#define GKCUASSERTP(expr,msg) \112if (!(expr)) { \113printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \114__LINE__, __FILE__); \115printf msg ; \116printf("\n"); \117}118119/*-------------------------------------------------------------120* Program Assertions121*-------------------------------------------------------------*/122#ifndef NDEBUG123# define ASSERT(expr) \124if (!(expr)) { \125printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \126__LINE__, __FILE__); \127assert(expr); \128}129130# define ASSERTP(expr,msg) \131if (!(expr)) { \132printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \133__LINE__, __FILE__); \134printf msg ; \135printf("\n"); \136assert(expr); \137}138#else139# define ASSERT(expr) ;140# define ASSERTP(expr,msg) ;141#endif142143#ifndef NDEBUG2144# define ASSERT2 ASSERT145# define ASSERTP2 ASSERTP146#else147# define ASSERT2(expr) ;148# define ASSERTP2(expr,msg) ;149#endif150151152#endif153154155