// // Utils.h // BulletTest // // Copyright (c) 2011 Apple Inc. // #ifndef BulletTest_Utils_h #define BulletTest_Utils_h #include "btIntDefines.h" #include #include #ifdef _WIN32 #define LARGE_FLOAT17 (1.f * powf(2,17)) #define RANDF_16 (random_number32() * powf(2,-16)) #define RANDF_01 ( random_number32() * powf(2,-32) ) #define RANDF ( random_number32() * powf(2,-8) ) #define RANDF_m1p1 (2.0f*( random_number32() * powf(2,-32)-1.0f)) #else #define LARGE_FLOAT17 (0x1.0p17f) #define RANDF_16 (random_number32() * 0x1.0p-16f) #define RANDF_01 ( random_number32() * 0x1.0p-32f ) #define RANDF ( random_number32() * 0x1.0p-8f ) #define RANDF_m1p1 (2.0f*( random_number32() * 0x1.0p-32f )-1.0f) #endif//_WIN32 #ifdef __cplusplus extern "C" { #endif /********************* * Timing * *********************/ extern int gReportNanoseconds; uint64_t ReadTicks( void ); double TicksToCycles( uint64_t delta ); // Performance data should be reported in cycles most of the time. double TicksToSeconds( uint64_t delta ); /********************* * Guard Heap * *********************/ // return buffer containing count objects of size size, with guard pages in betweeen. // The stride between one object and the next is given by objectStride. // objectStride may be NULL. Objects so created are freed with GuardFree void *GuardCalloc( size_t count, size_t size, size_t *objectStride ); void GuardFree( void * ); // mark the contents of a guard buffer read-only or write-only. Return 0 on success. int GuardMarkReadOnly( void *); int GuardMarkWriteOnly( void *); int GuardMarkReadWrite( void *); /********************* * Printing * *********************/ #define vlog( ... ) printf( __VA_ARGS__ ) uint32_t random_number32(void); uint64_t random_number64(void); #ifdef __cplusplus } #endif #endif