24 template <
class RT,
class T>
28 inline RT roundOff(
double x ) {
return (
RT) ((x)>0 ? (x)+.5 : (x)-.5); }
31 inline RT roundOff(
float x ) {
return (
RT) ((x)>0 ? (x)+.5f : (x)-.5f); }
34 inline void Swap( T& a, T& b ) { T tmp = a; a = b; b = tmp; }
36 template <
class fT,
class eT>
37 inline bool isFPZero( fT v, eT eps ) {
return v < eps && v > -eps; }
39 template <
class T1,
class T2,
class eT>
44 {
return v<min ? min : (v>max ? max : v); }
47 #define mRounded(typ,x) roundOff<typ>( x ) 48 #define mNINT32(x) mRounded( od_int32, x ) 49 #define mNINT64(x) mRounded( od_int64, x ) 51 #define mMAX(x,y) ((x)>(y) ? (x) : (y)) 52 #define mMIN(x,y) ((x)<(y) ? (x) : (y)) 53 #define mLimited(v,min,max) getLimited( v, min, max ) 55 #define mIsZero(x,eps) isFPZero( x, eps ) 56 #define mIsEqual(x,y,eps) isFPEqual( x, y, eps ) 57 #define mIsEqualWithUdf(x,y,e) ((mIsUdf(x) && mIsUdf(y)) || mIsEqual(x,y,e) ) 58 #define mDefEpsF (1e-10f) 59 #define mDefEpsD (1e-10) 60 #define mDefEps mDefEpsD 66 # define M_PI 3.14159265358979323846 69 # define M_PIl 3.1415926535897932384626433832795029L 72 # define M_2PI 6.28318530717958647692 75 # define M_PI_2 1.57079632679489661923 78 # define M_PI_4 0.78539816339744830962 81 # define M_SQRT2 1.41421356237309504880168872421 84 # define M_PIf 3.14159265358979323846f 87 # define M_2PIf 6.28318530717958647692f 90 # define M_PI_2f 1.57079632679489661923f 93 # define M_PI_4f 0.78539816339744830962f 96 # define M_SQRT2f 1.41421356237309504880168872421f 100 # define MAXFLOAT 3.4028234663852886e+38F 103 # define MAXDOUBLE 1.7976931348623157e+308 106 #define mFromFeetFactorF 0.3048f 107 #define mFromFeetFactorD 0.3048 108 #define mToFeetFactorF 3.2808399f 109 #define mToFeetFactorD 3.28083989501312336 110 #define mToPercent(f) (mIsUdf(f) ? f : f*100) 111 #define mFromPercent(f) (mIsUdf(f) ? f : f*0.01) 112 #define mDeg2RadD 0.017453292519943292 113 #define mRad2DegD 57.295779513082323 114 #define mDeg2RadF 0.017453292519943292f 115 #define mRad2DegF 57.295779513082323f 120 #define mCast(tp,v) ((tp)(v)) 122 # define mDynamicCast(typ,out,in) out = dynamic_cast< typ >( in ); 123 # define mDynamicCastGet(typ,out,in) typ mDynamicCast(typ,out,in) 125 #define mDefSetupClssMemb(clss,typ,memb) \ 127 clss& memb( typ val ) { memb##_ = val; return *this; } 129 #define mDefSetupMemb(typ,memb) mDefSetupClssMemb(Setup,typ,memb) 131 #define mDefNoAssignmentOper(clss) \ 133 inline clss& operator =( const clss& ) \ 134 { pErrMsg("No assignment"); return *this; } 144 # define __func__ __FUNCTION__ 153 # define mMaxFilePathLength 255 156 #define mExp( module ) Export_##module 157 #define mExpClass( module ) class mExp( module ) 158 #define mExpStruct( module ) struct mExp( module ) 160 #define mGlobal( module ) mExp( module ) 161 #define mClass( module ) class 162 #define mStruct( module ) mExpStruct( module ) 163 #define mExtern( module ) extern mExp( module ) 164 #define mExternC( module) extern "C" mExp( module ) 166 #define mExportInst( mod, tp ) Extern_##mod tp mExp(mod) 167 #define mExportTemplClassInst(mod) mExportInst(mod,template class) 185 #define mLockStaticInitLock( nm ) \ 186 static volatile int nm = 0; \ 187 Threads::lockSimpleSpinWaitLock( nm ) 189 #define mUnlockStaticInitLock( nm ) \ 190 Threads::unlockSimpleSpinLock( nm ) 194 #define mLockStaticInitLock( nm ) 195 #define mUnlockStaticInitLock( nm ) 199 #define mDefineStaticLocalObject( type, var, init ) \ 200 mLockStaticInitLock( static##var##lck__ ); \ 201 static type var init; \ 202 mUnlockStaticInitLock( static##var##lck__ ); 219 #define mIfNotFirstTime(act) \ 221 static volatile int _already_visited_ = 0; \ 222 if ( !Threads::atomicSetIfValueIs( _already_visited_, \ 231 # define mFDQtclass(cls) class cls; 232 # define mQtclass(cls) ::cls 233 # define mUseQtnamespace 235 # define mFDQtclass(cls) namespace QT_NAMESPACE { class cls; } 236 # define mQtclass(cls) ::QT_NAMESPACE::cls 237 # define mUseQtnamespace using namespace ::QT_NAMESPACE; 244 #define mTryAlloc(var,stmt) \ 245 { try { var = new stmt; } catch ( std::bad_alloc ) { var = 0; } } 247 #define mTryAllocPtrMan(var,stmt) \ 248 { try { var = new stmt; } catch ( std::bad_alloc ) { var.set( 0 ); } } 251 #define mDeclareAndTryAlloc(tp,var,stmt) \ 256 #define mGetIdxArr(tp,var,sz) \ 258 mTryAlloc(var,tp [sz]) \ 260 for ( tp idx=0; idx<sz; idx++ ) \ 283 #define mDoArrayPtrOperation( type, arr, operation, arrsz, ptrinc ) \ 285 type* __curptr = arr; \ 286 for ( const type* __stopptr = __curptr + arrsz; \ 287 __curptr!=__stopptr; \ 290 *__curptr operation; \ #define mGlobal(module)
Definition: commondefs.h:160
bool isFPZero(fT v, eT eps)
Definition: commondefs.h:37
interface to threads that should be portable.
Definition: atomic.h:24
bool isFPEqual(T1 v1, T2 v2, eT eps)
Definition: commondefs.h:40
RT roundOff(T x)
Definition: commondefs.h:25
void Swap(T &a, T &b)
Definition: commondefs.h:34
T getLimited(T v, T min, T max)
Definition: commondefs.h:43
bool atomicSetIfValueIs(volatile int &val, int curval, int newval, int *actualvalptr=0)
Definition: atomic.h:59
void unlockSimpleSpinLock(volatile int &lock)
bool lockSimpleSpinWaitLock(volatile int &lock)