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_