1 /***************************************************************************
2 						macros.h  -  description
3 							-------------------
4 	begin                : september 21th, 2003
5 	copyright            : (C) 2003-2007 by Duong Khang NGUYEN
6 	email                : neoneurone @ gmail com
7 
8 	$Id: macros.h 375 2008-10-28 14:47:15Z neoneurone $
9  ***************************************************************************/
10 
11 /***************************************************************************
12  *                                                                         *
13  *   This program is free software; you can redistribute it and/or modify  *
14  *   it under the terms of the GNU General Public License as published by  *
15  *   the Free Software Foundation; either version 2 of the License, or     *
16  *   any later version.                                                    *
17  *                                                                         *
18  ***************************************************************************/
19 
20 #ifndef _OPENCITY_MACROS_H_
21 #define _OPENCITY_MACROS_H_ 1
22 
23 #include <iostream>
24 #include <cassert>			// for assert() => ifdef NDEBUG: do nothing
25 using std::cout;
26 using std::endl;
27 using std::cerr;
28 
29 // Debug message macro
30 	#ifndef NDEBUG
31 		#define OPENCITY_DEBUG( msg ) { \
32 			cout << "<DEBUG> " << __FILE__ << " " << __LINE__ << " : " << msg << endl; \
33 		}
34 	#else
35 		#define OPENCITY_DEBUG(msg)
36 	#endif
37 
38 // Information message macro
39 	#define OPENCITY_INFO( msg ) { \
40 		cout << "<INFO> " << msg << endl; \
41 	}
42 
43 // Option message macro
44 	#define OPENCITY_OPTION( msg ) { \
45 		cout << "<OPTION> " << msg << endl; \
46 	}
47 
48 // Error message macro
49 	#define OPENCITY_ERROR( msg ) { \
50 		cerr << "<ERROR> " << msg << endl; \
51 	}
52 
53 // Fatal message macro
54 	#define OPENCITY_FATAL( msg ) { \
55 		cerr << "<FATAL> " << __FILE__ << " " << __LINE__ << " : " << msg << endl; \
56 	}
57 
58 // Swap two variables so that a <= b
59 	#define OPENCITY_SWAP( a, b, type ) \
60 	{\
61 		if (a > b) {   \
62 			type c;\
63 			c = a; a = b; b = c;\
64 		}\
65 	}
66 
67 // We use "uint" for "unsigned int"
68 	#ifndef uint
69 		typedef unsigned int uint;
70 	#endif
71 
72 // Define some missing magical macros for Visual Studio 2005
73 	#ifdef __WIN32__
74 		#if !defined(__PRETTY_FUNCTION__)
75 			#define __PRETTY_FUNCTION__ __FUNCTION__
76 		#endif
77 
78 	// and operator workaround for MSVC2005
79 		#if !defined(__MINGW32_VERSION)
80 			#if !defined(and)
81 				#include <ciso646>
82 			#endif
83 		#endif
84 
85 	// strcasecmp workaround
86 		#if !defined(strcasecmp)
87 			#define strcasecmp _stricmp
88 		#endif
89 
90 	/* C99 standard has this
91 	// log2 workaround
92 		#if !defined(log2)
93 			#define log2(value) log((double)value)/log(2.0)
94 		#endif
95 	*/
96 	#endif // #if defined(__WIN32__)
97 #endif
98 
99