#include "irrMath.h"\r
\r
#if defined(_IRR_COMPILE_WITH_SDL_DEVICE_)\r
- #include <SDL/SDL_endian.h>\r
+ #include <SDL_endian.h>\r
#define bswap_16(X) SDL_Swap16(X)\r
#define bswap_32(X) SDL_Swap32(X)\r
#define bswap_64(X) SDL_Swap64(X)\r
-#elif defined(_IRR_WINDOWS_API_) && defined(_MSC_VER) && (_MSC_VER > 1298)\r
+#elif defined(_IRR_WINDOWS_API_) && defined(_MSC_VER)\r
#include <stdlib.h>\r
#define bswap_16(X) _byteswap_ushort(X)\r
#define bswap_32(X) _byteswap_ulong(X)\r
#define bswap_64(X) _byteswap_uint64(X)\r
-#if (_MSC_VER >= 1400)\r
#define localtime _localtime_s\r
-#endif\r
#elif defined(_IRR_OSX_PLATFORM_) || defined(_IRR_IOS_PLATFORM_)\r
#include <libkern/OSByteOrder.h>\r
#define bswap_16(X) OSReadSwapInt16(&X,0)\r
// Windows specific functions\r
// ----------------------------------------------------------------\r
\r
-#ifdef _IRR_XBOX_PLATFORM_\r
-#include <xtl.h>\r
-#else\r
#define WIN32_LEAN_AND_MEAN\r
#include <windows.h>\r
#include <time.h>\r
-#endif\r
\r
namespace irr\r
{\r
//! prints a debuginfo string\r
void Printer::print(const c8* message, ELOG_LEVEL ll)\r
{\r
-#if defined (_WIN32_WCE )\r
- core::stringw tmp(message);\r
- tmp += L"\n";\r
- OutputDebugStringW(tmp.c_str());\r
-#else\r
core::stringc tmp(message);\r
tmp += "\n";\r
OutputDebugStringA(tmp.c_str());\r
printf("%s", tmp.c_str());\r
-#endif\r
}\r
\r
static LARGE_INTEGER HighPerformanceFreq;\r
static BOOL HighPerformanceTimerSupport = FALSE;\r
- static BOOL MultiCore = FALSE;\r
\r
void Timer::initTimer(bool usePerformanceTimer)\r
{\r
-#if !defined(_WIN32_WCE) && !defined (_IRR_XBOX_PLATFORM_)\r
- // workaround for hires timer on multiple core systems, bios bugs result in bad hires timers.\r
- SYSTEM_INFO sysinfo;\r
- GetSystemInfo(&sysinfo);\r
- MultiCore = (sysinfo.dwNumberOfProcessors > 1);\r
-#endif\r
if (usePerformanceTimer)\r
HighPerformanceTimerSupport = QueryPerformanceFrequency(&HighPerformanceFreq);\r
else\r
{\r
if (HighPerformanceTimerSupport)\r
{\r
-#if !defined(_WIN32_WCE) && !defined (_IRR_XBOX_PLATFORM_)\r
- // Avoid potential timing inaccuracies across multiple cores by\r
- // temporarily setting the affinity of this process to one core.\r
- DWORD_PTR affinityMask=0;\r
- if(MultiCore)\r
- affinityMask = SetThreadAffinityMask(GetCurrentThread(), 1);\r
-#endif\r
LARGE_INTEGER nTime;\r
BOOL queriedOK = QueryPerformanceCounter(&nTime);\r
\r
-#if !defined(_WIN32_WCE) && !defined (_IRR_XBOX_PLATFORM_)\r
- // Restore the true affinity.\r
- if(MultiCore)\r
- (void)SetThreadAffinityMask(GetCurrentThread(), affinityMask);\r
-#endif\r
if(queriedOK)\r
return u32((nTime.QuadPart) * 1000 / HighPerformanceFreq.QuadPart);\r
-\r
}\r
\r
return GetTickCount();\r
Logger->log(message, hint.c_str(), ll);\r
}\r
\r
- // our Randomizer is not really os specific, so we\r
- // code one for all, which should work on every platform the same,\r
- // which is desirable.\r
-\r
- s32 Randomizer::seed = 0x0f0f0f0f;\r
-\r
- //! generates a pseudo random number\r
- s32 Randomizer::rand()\r
- {\r
- // (a*seed)%m with Schrage's method\r
- seed = a * (seed%q) - r* (seed/q);\r
- if (seed<1)\r
- seed += m;\r
-\r
- return seed-1; // -1 because we want it to start at 0\r
- }\r
-\r
- //! generates a pseudo random number\r
- f32 Randomizer::frand()\r
- {\r
- return rand()*(1.f/rMax);\r
- }\r
-\r
- s32 Randomizer::randMax()\r
- {\r
- return rMax;\r
- }\r
-\r
- //! resets the randomizer\r
- void Randomizer::reset(s32 value)\r
- {\r
- if (value<0)\r
- seed = value+m;\r
- else if ( value == 0 || value == m)\r
- seed = 1;\r
- else\r
- seed = value;\r
- }\r
-\r
-\r
// ------------------------------------------------------\r
// virtual timer implementation\r
\r