#include "pch.h"
//////////////////////////////////////////////////////////////////////////////
//
// Allocation
//
//////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
#undef new
#undef delete
void* ZAlloc(
unsigned int s,
char* pszFile,
int line
) {
void* pv = ::operator new(s, _CLIENT_BLOCK, pszFile, line);
return pv;
}
typedef struct _CrtMemBlockHeader{
struct _CrtMemBlockHeader * pBlockHeaderNext;
struct _CrtMemBlockHeader * pBlockHeaderPrev;
char * szFileName;
int nLine;
size_t nDataSize;
int nBlockUse;
long lRequest;
unsigned char gap[4];
} _CrtMemBlockHeader;
void ZFree(void* pv)
{
if (pv != NULL) {
_CrtMemBlockHeader* pHead = (((_CrtMemBlockHeader *)pv)-1);
_free_dbg(pv, pHead->nBlockUse);
}
}
#endif
//////////////////////////////////////////////////////////////////////////////
//
//
//
//////////////////////////////////////////////////////////////////////////////
DWORD CountBits(DWORD dw)
{
int count = 0;
while (dw != 0) {
if (dw & 1) {
count++;
}
dw = dw >> 1;
}
return count;
}
DWORD GetShift(DWORD dw)
{
if (dw == 0) {
return -1;
}
DWORD index = 0;
while ((dw & 1) == 0) {
index++;
dw = dw >> 1;
}
return index;
}
DWORD NextPowerOf2(DWORD x)
{
DWORD p = 1;
while (p < x) {
p *= 2;
ZAssert(p != 0);
}
return p;
}
//////////////////////////////////////////////////////////////////////////////
//
// Constants
//
//////////////////////////////////////////////////////////////////////////////
float g_0 = 0.0f;
float g_1 = 1.0f;
float g_0_5 = 0.5f;
float g_255 = 255.0f;
float g_Inv255 = 1.0f / 255.0f;