File: macros.hh

package info (click to toggle)
packup 0.6-3.2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 832 kB
  • sloc: cpp: 10,857; makefile: 111; sh: 6
file content (140 lines) | stat: -rw-r--r-- 5,170 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/******************************************************************************\
 *    This file is part of packup.                                            *
 *                                                                            *
 *    packup is free software: you can redistribute it and/or modify          *
 *    it under the terms of the GNU General Public License as published by    *
 *    the Free Software Foundation, either version 3 of the License, or       *
 *    (at your option) any later version.                                     *
 *                                                                            *
 *    packup is distributed in the hope that it will be useful,               *
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
 *    GNU General Public License for more details.                            *
 *                                                                            *
 *    You should have received a copy of the GNU General Public License       *
 *    along with packup.  If not, see <http://www.gnu.org/licenses/>.         *            
\******************************************************************************/           
/*----------------------------------------------------------------------------*\
 * Version: $Id: macros.hh 73 2007-07-26 15:16:48Z jpms $
 *
 * Author: jpms
 * 
 * Description: Macro definitions
 *
 *                                    Copyright (c) 2006, Joao Marques-Silva
\*----------------------------------------------------------------------------*/

#ifndef _MACROS_HH_
#define _MACROS_HH_ 1


/*----------------------------------------------------------------------------*\
 * Utility macros (minof, maxof, ...)
\*----------------------------------------------------------------------------*/

#define minof(x,y) ((x)<(y))?(x):(y)
#define maxof(x,y) ((x)>(y))?(x):(y)


/*----------------------------------------------------------------------------*\
 * Swap utility
\*----------------------------------------------------------------------------*/

// Swap utility
#define tswap(T, x, y) { T tmp = y; y = x; x = tmp; }

template <typename T>
string convert(T val)
{
   stringstream ss;  // Create a stringstream
   ss << val;        // Add value to the stream
   return ss.str();  // Return string with the contents of the stream
}

/*----------------------------------------------------------------------------*\
 * Macros for gathering statistics about msu algorithms
\*----------------------------------------------------------------------------*/
#ifdef STATISTICS
#define STATS(x) x
#else
#define STATS(x)
#endif

/*----------------------------------------------------------------------------*\
 * Macros for printing generic debug info anf for controlling debug actions
 * (Some parts are based on examples from Eckel's book)
\*----------------------------------------------------------------------------*/

#ifndef DBGMACROS
#define DBGMACROS
#define NDBG(x)
#define NDBGPRT(x)
#ifdef FULLDEBUG
#define DBG(x) x
#define CDBG(v,x) if(v,=TRACEVERB) { x }
#define DBGPRT(x) std::cout << x << std::endl; std::cout.flush()
#define DEBUG(x) std::cout << #x " = " << x << std::endl; std::cout.flush()
#define TRACEP(x) std::cout << x << std::endl;
#define TRACEX(x) std::cout << #x << std::endl; x
#else
#define DBG(x)
#define CDBG(v,x)
#define DBGPRT(x)
#define DEBUG(x)
#define TRACEP(x)
#define TRACEX(x) x
#endif
#ifndef NCHECK
#define CHK(x) x
#define CCHK(v,x) if(v<=TRACEVERB) { x }
#define CHKPRT(x) std::cout<<#x<<((x)?" passes":" fails")<<std::endl;std::cout.flush()
#define CHKPRT2(x) std::cout << x << std::endl; std::cout.flush()
#else
#define CHK(x)
#define CCHK(v,x) 
#define CHKPRT(x)
#define CHKPRT2(x)
#endif
#endif


/*----------------------------------------------------------------------------*\
 * A more versatile (and verbose) assert macro; also a way to use assert code
\*----------------------------------------------------------------------------*/

#ifndef NDEBUG
#define verbassert(cond, message) if(!(cond)) {cerr<<message<<endl; assert(0);}
#define ASSERTCODE(x) x
#else
#define verbassert(cond, message) 
#define ASSERTCODE(x)
#endif

#define CHKCODE(x)  ASSERTCODE(x)


/*----------------------------------------------------------------------------*\
 * Macros for memory management
\*----------------------------------------------------------------------------*/

#define NEW(t,p) ((p) = (t*)malloc((long)sizeof *(p)))
#define NEWV(t,n,p) ((p) = (t*)malloc((long)(n*sizeof(*(p)))))
#define DEL(p) free(p);


/*----------------------------------------------------------------------------*\
 * Logging utilities
\*----------------------------------------------------------------------------*/

//#define report(x) 

#define read_cputime() RUSAGE::read_cpu_time()

#define prt_std_cputime(x,y) \
  std::cout<<x<<y<<"CPU Time: "<<read_cputime()<<endl

#define prt_cfg_cputime(y) prt_std_cputime(config.get_prefix(),y)

#endif /* _MACROS_HH_ */

/*----------------------------------------------------------------------------*/