www.pudn.com > SPIHT_bandelet.rar > config.h
/*------------------------------------------------------------------------------*/
/**
* \file config.h
* \brief Main configuration file.
* \author Gabriel Peyré
* \date 2004
*/
/*------------------------------------------------------------------------------*/
#ifndef _GW_CONFIG_H_
#define _GW_CONFIG_H_
#define INLINE __inline
//-------------------------------------------------------------------------
/** \name debug & inline directive */
//-------------------------------------------------------------------------
//@{
#ifdef _DEBUG
#ifndef GW_DEBUG
#define GW_DEBUG
#endif // GW_DEBUG
#endif // _DEBUG
// #undef GW_DEBUG
//@}
//-------------------------------------------------------------------------
/** \name numerical macros */
//-------------------------------------------------------------------------
//@{
#undef MIN
#undef MAX
#define MIN(a, b) ((a) < (b) ? (a) : (b)) //!< Returns the min value between a and b
#define MAX(a, b) ((a) > (b) ? (a) : (b)) //!< Returns the max value between a and b
#define MAXMAX(a,b,c) ((a) > (b) ? MAX (a,c) : MAX (b,c))
#define GW_MIN(a, b) MIN(a,b) //!< Returns the min value between a and b
#undef GW_MAX // already defined by Windows.h ...
#define GW_MAX(a, b) MAX(a,b) //!< Returns the max value between a and b
#define GW_MAXMAX(a,b,c) MAXMAX(a,b,c)
#define GW_SCALE_01(x,rMin,rMax) ((x-rMin)/(rMax-rMin))
#define GW_ABS(a) ((a) > 0 ? (a) : -(a)) //!< Returns the absolute value a
#define GW_SIGN(a) ((a) > 0 ? 1 : -1) //!< Returns the sign of a
#define SQR(x) ((x)*(x)) //!< Returns x square
#define CUBE(x) ((x)*(x)*(x)) //!< Returns x cube
#define GW_SQR(x) SQR(x) //!< Returns x square
#define GW_CUBE(x) CUBE(x) //!< Returns x cube
#define GW_CLAMP_01(x) if( (x)<0 ) x=0; if( (x)>1 ) x=1
#define GW_CLAMP(x, a,b) if( (x)b ) x=b
#define GW_SWAP(x,y) x^=y; y^=x; x^=y
#define GW_ORDER(x,y) if(x>y){ GW_SWAP(x,y); }
//@}
//-------------------------------------------------------------------------
/** \name generic macros */
//-------------------------------------------------------------------------
//@{
/** a random number in [0-1] */
#define GW_RAND ((double) (rand()%10000))/10000
/** a random number in [a,b] */
#define GW_RAND_RANGE(a,b) (a)+((b)-(a))*((GW_Float) (rand()%10000))/10000
/** delete a single pointer */
#define GW_DELETE(p) {if (p!=NULL) delete p; p=NULL;}
/** delete an array pointer */
#define GW_DELETEARRAY(p) {if (p!=NULL) delete [] p; p=NULL;}
//@}
//-------------------------------------------------------------------------
/** \name some constants */
//-------------------------------------------------------------------------
//@{
#define GW_True true
#define GW_False false
/** to make aproximate computations (derivation, GW_Float comparaisons ...) */
#define GW_EPSILON 1e-9
/** very big number */
#define GW_INFINITE 1e9
//@}
//-------------------------------------------------------------------------
/** \name numerical constants */
//-------------------------------------------------------------------------
//@{
/** pi */
#define GW_PI 3.1415926535897932384626433832795028841971693993751f
/** pi/2 */
#define GW_HALFPI 1.57079632679489661923f
/** 2*pi */
#define GW_TWOPI 6.28318530717958647692f
/** 1/pi */
#define GW_INVPI 0.31830988618379067154f
/** 180/pi */
#define GW_RADTODEG(x) (x)*57.2957795130823208768f
/** pi/180 */
#define GW_DEGTORAD(x) (x)*0.01745329251994329577f
/** e */
#define GW_EXP 2.71828182845904523536f
/** 1/log10(2) */
#define GW_ILOG2 3.32192809488736234787f
/** 1/3 */
#define GW_INV3 0.33333333333333333333f
/** 1/6 */
#define GW_INV6 0.16666666666666666666f
/** 1/9 */
#define GW_INV7 0.14285714285714285714f
/** 1/9 */
#define GW_INV9 0.11111111111111111111f
/** 1/255 */
#define GW_INV255 0.00392156862745098039f
/** sqrt(2) */
#define GW_SQRT2 1.41421356237f
//@}
//-------------------------------------------------------------------------
/** \name assertion macros */
//-------------------------------------------------------------------------
//@{
#ifdef GW_DEBUG
#define GW_ASSERT(expr) _ASSERT(expr)
#define GW_DEBUG_ONLY(expr) expr
#else
#define GW_ASSERT(expr) // if(!(expr)) cerr << "Error in file " << __FILE__ << " line " << __LINE__ << "." << endl
#define GW_DEBUG_ONLY(expr)
#endif // GW_DEBUG
//@}
INLINE
int log2(int n)
{
int x = 0;
while (n > 1)
{
x++;
n /= 2;
}
return x;
}
#endif // _GW_CONFIG_H_