Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/elmergrid/src/metis-5.1.0/GKlib/gk_macros.h
3206 views
1
/*!
2
\file gk_macros.h
3
\brief This file contains various macros
4
5
\date Started 3/27/2007
6
\author George
7
\version\verbatim $Id: gk_macros.h 10711 2011-08-31 22:23:04Z karypis $ \endverbatim
8
*/
9
10
#ifndef _GK_MACROS_H_
11
#define _GK_MACROS_H_
12
13
/*-------------------------------------------------------------
14
* Usefull commands
15
*-------------------------------------------------------------*/
16
#define gk_max(a, b) ((a) >= (b) ? (a) : (b))
17
#define gk_min(a, b) ((a) >= (b) ? (b) : (a))
18
#define gk_max3(a, b, c) ((a) >= (b) && (a) >= (c) ? (a) : ((b) >= (a) && (b) >= (c) ? (b) : (c)))
19
#define gk_SWAP(a, b, tmp) do {(tmp) = (a); (a) = (b); (b) = (tmp);} while(0)
20
#define INC_DEC(a, b, val) do {(a) += (val); (b) -= (val);} while(0)
21
#define sign(a, b) ((a >= 0 ? b : -b))
22
23
#define ONEOVERRANDMAX (1.0/(RAND_MAX+1.0))
24
#define RandomInRange(u) ((int) (ONEOVERRANDMAX*(u)*rand()))
25
26
#define gk_abs(x) ((x) >= 0 ? (x) : -(x))
27
28
29
/*-------------------------------------------------------------
30
* Timing macros
31
*-------------------------------------------------------------*/
32
#define gk_clearcputimer(tmr) (tmr = 0.0)
33
#define gk_startcputimer(tmr) (tmr -= gk_CPUSeconds())
34
#define gk_stopcputimer(tmr) (tmr += gk_CPUSeconds())
35
#define gk_getcputimer(tmr) (tmr)
36
37
#define gk_clearwctimer(tmr) (tmr = 0.0)
38
#define gk_startwctimer(tmr) (tmr -= gk_WClockSeconds())
39
#define gk_stopwctimer(tmr) (tmr += gk_WClockSeconds())
40
#define gk_getwctimer(tmr) (tmr)
41
42
/*-------------------------------------------------------------
43
* dbglvl handling macros
44
*-------------------------------------------------------------*/
45
#define IFSET(a, flag, cmd) if ((a)&(flag)) (cmd);
46
47
48
/*-------------------------------------------------------------
49
* gracefull library exit macro
50
*-------------------------------------------------------------*/
51
#define GKSETJMP() (setjmp(gk_return_to_entry))
52
#define gk_sigcatch() (setjmp(gk_jbufs[gk_cur_jbufs]))
53
54
55
/*-------------------------------------------------------------
56
* Debuging memory leaks
57
*-------------------------------------------------------------*/
58
#ifdef DMALLOC
59
# define MALLOC_CHECK(ptr) \
60
if (malloc_verify((ptr)) == DMALLOC_VERIFY_ERROR) { \
61
printf("***MALLOC_CHECK failed on line %d of file %s: " #ptr "\n", \
62
__LINE__, __FILE__); \
63
abort(); \
64
}
65
#else
66
# define MALLOC_CHECK(ptr) ;
67
#endif
68
69
70
/*-------------------------------------------------------------
71
* CSR conversion macros
72
*-------------------------------------------------------------*/
73
#define MAKECSR(i, n, a) \
74
do { \
75
for (i=1; i<n; i++) a[i] += a[i-1]; \
76
for (i=n; i>0; i--) a[i] = a[i-1]; \
77
a[0] = 0; \
78
} while(0)
79
80
#define SHIFTCSR(i, n, a) \
81
do { \
82
for (i=n; i>0; i--) a[i] = a[i-1]; \
83
a[0] = 0; \
84
} while(0)
85
86
87
/*-------------------------------------------------------------
88
* ASSERTS that cannot be turned off!
89
*-------------------------------------------------------------*/
90
#define GKASSERT(expr) \
91
if (!(expr)) { \
92
printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
93
__LINE__, __FILE__); \
94
abort(); \
95
}
96
97
#define GKASSERTP(expr,msg) \
98
if (!(expr)) { \
99
printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
100
__LINE__, __FILE__); \
101
printf msg ; \
102
printf("\n"); \
103
abort(); \
104
}
105
106
#define GKCUASSERT(expr) \
107
if (!(expr)) { \
108
printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
109
__LINE__, __FILE__); \
110
}
111
112
#define GKCUASSERTP(expr,msg) \
113
if (!(expr)) { \
114
printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
115
__LINE__, __FILE__); \
116
printf msg ; \
117
printf("\n"); \
118
}
119
120
/*-------------------------------------------------------------
121
* Program Assertions
122
*-------------------------------------------------------------*/
123
#ifndef NDEBUG
124
# define ASSERT(expr) \
125
if (!(expr)) { \
126
printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
127
__LINE__, __FILE__); \
128
assert(expr); \
129
}
130
131
# define ASSERTP(expr,msg) \
132
if (!(expr)) { \
133
printf("***ASSERTION failed on line %d of file %s: " #expr "\n", \
134
__LINE__, __FILE__); \
135
printf msg ; \
136
printf("\n"); \
137
assert(expr); \
138
}
139
#else
140
# define ASSERT(expr) ;
141
# define ASSERTP(expr,msg) ;
142
#endif
143
144
#ifndef NDEBUG2
145
# define ASSERT2 ASSERT
146
# define ASSERTP2 ASSERTP
147
#else
148
# define ASSERT2(expr) ;
149
# define ASSERTP2(expr,msg) ;
150
#endif
151
152
153
#endif
154
155