Subversion Repositories public iLand

Rev

Rev 287 | Rev 349 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1
 
24 Werner 2
#ifndef GLOBAL_H
3
#define GLOBAL_H
4
 
5
#define MSGRETURN(x) { qDebug() << x; return; }
87 Werner 6
#define WARNINGRETURN(x) { qWarning() << x; return; }
91 Werner 7
#define ERRORRETURN(x) { qError() << x; return; }
24 Werner 8
// conversions rad/degree
9
#define RAD(x) (x*M_PI/180.)
10
#define GRAD(x) (x/M_PI*180.)
32 Werner 11
#define PI2 2*M_PI
33 Werner 12
 
13
 
91 Werner 14
#include "globalsettings.h"
102 Werner 15
#include "exception.h"
33 Werner 16
// general datatypes
39 Werner 17
//typedef int TreeSpecies;
117 Werner 18
 
19
// global debug helpers (used by macros!)
20
void dbg_helper(const char *where, const char *what,const char* file,int line);
21
void dbg_helper_ext(const char *where, const char *what,const char* file,int line, const QString &s);
22
 
216 werner 23
// change to enabled detailed debug messages.
24
// if NO_DEBUG_MSGS is defined, NO debug outputs are generated.
25
#if defined(QT_NO_DEBUG)
26
#define NO_DEBUG_MSGS
27
#endif
28
 
117 Werner 29
#if !defined(DBG_IF)
216 werner 30
#  ifndef NO_DEBUG_MSGS
117 Werner 31
#    define DBG_IF(cond, where, what) ((cond) ? dbg_helper(where, what, __FILE__, __LINE__) : qt_noop())
32
#  else
33
#    define DBG_IF(cond, where, what) qt_noop()
34
#  endif
35
#endif
36
 
37
#if !defined(DBG_IF_X)
216 werner 38
#  ifndef NO_DEBUG_MSGS
117 Werner 39
#    define DBG_IF_X(cond, where, what,more) ((cond) ? dbg_helper_ext(where, what, __FILE__, __LINE__,more) : qt_noop())
40
#  else
41
#    define DBG_IF_X(cond, where, what,more) qt_noop()
42
#  endif
43
#endif
44
 
130 Werner 45
#if !defined(DBGMODE)
216 werner 46
#  ifndef NO_DEBUG_MSGS
130 Werner 47
#    define DBGMODE(stmts) { stmts }
48
#  else
49
#    define DBGMODE(stmts) qt_noop()
50
#  endif
51
#endif
52
 
289 werner 53
// cool random number generator (using the mersenne-twister) by http://www-personal.umich.edu/~wagnerr/MersenneTwister.html
54
#include "../3rdparty/MersenneTwister.h"
55
// access the Mersenne-Twister-Random-Numbers
56
MTRand &mtRand(); // static object lives in globalsettings
157 werner 57
/// nrandom returns a random number from [p1, p2]
58
inline double nrandom(const double& p1, const double& p2)
59
{
289 werner 60
    return p1 + mtRand().rand(p2-p1);
61
    //return p1 + (p2-p1)*(rand()/double(RAND_MAX));
157 werner 62
}
63
/// returns a random number in [0,1]
187 iland 64
inline double drandom()
157 werner 65
{
289 werner 66
    return mtRand().rand();
67
    //return rand()/double(RAND_MAX);
157 werner 68
}
187 iland 69
inline int irandom(int from, int to)
186 werner 70
{
289 werner 71
    return from + mtRand().randInt(to-from);
72
    //return from +  rand()%(to-from);
186 werner 73
}
210 werner 74
 
75
inline double limit(const double value, const double lower, const double upper)
76
{
77
    return qMax(qMin(value, upper), lower);
78
}
216 werner 79
inline int limit(const int value, const int lower, const int upper)
80
{
81
    return qMax(qMin(value, upper), lower);
82
}
285 werner 83
inline void setBit(int &rTarget, const int bit, const bool value)
84
{
85
    if (value)
86
        rTarget |= (1 << bit);  // set bit
87
    else
88
        rTarget &= ( (1 << bit) ^ 0xffffff ); // clear bit
89
}
287 werner 90
inline bool isBitSet(const int value, const int bit)
91
{
92
    return value & (1 << bit);
93
}
24 Werner 94
#endif // GLOBAL_H