mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-14 02:27:40 -04:00
Remove a bunch of unused pnUtils stuff.
This commit is contained in:
@ -8,21 +8,17 @@ set(pnUtils_HEADERS
|
|||||||
pnUtAddr.h
|
pnUtAddr.h
|
||||||
pnUtAllIncludes.h
|
pnUtAllIncludes.h
|
||||||
pnUtArray.h
|
pnUtArray.h
|
||||||
pnUtBase64.h
|
|
||||||
pnUtBigNum.h
|
pnUtBigNum.h
|
||||||
pnUtCmd.h
|
pnUtCmd.h
|
||||||
pnUtCrypt.h
|
pnUtCrypt.h
|
||||||
pnUtHash.h
|
pnUtHash.h
|
||||||
pnUtList.h
|
pnUtList.h
|
||||||
pnUtMath.h
|
|
||||||
pnUtMisc.h
|
pnUtMisc.h
|
||||||
pnUtPath.h
|
pnUtPath.h
|
||||||
pnUtPragma.h
|
pnUtPragma.h
|
||||||
pnUtPriQ.h
|
pnUtPriQ.h
|
||||||
pnUtRand.h
|
|
||||||
pnUtRef.h
|
pnUtRef.h
|
||||||
pnUtSort.h
|
pnUtSort.h
|
||||||
pnUtSpareList.h
|
|
||||||
pnUtStr.h
|
pnUtStr.h
|
||||||
pnUtSync.h
|
pnUtSync.h
|
||||||
pnUtTime.h
|
pnUtTime.h
|
||||||
@ -33,16 +29,12 @@ set(pnUtils_HEADERS
|
|||||||
set(pnUtils_SOURCES
|
set(pnUtils_SOURCES
|
||||||
pnUtAddr.cpp
|
pnUtAddr.cpp
|
||||||
pnUtArray.cpp
|
pnUtArray.cpp
|
||||||
pnUtBase64.cpp
|
|
||||||
pnUtBigNum.cpp
|
pnUtBigNum.cpp
|
||||||
pnUtCmd.cpp
|
pnUtCmd.cpp
|
||||||
pnUtHash.cpp
|
pnUtHash.cpp
|
||||||
pnUtList.cpp
|
pnUtList.cpp
|
||||||
pnUtMath.cpp
|
|
||||||
pnUtMisc.cpp
|
pnUtMisc.cpp
|
||||||
pnUtPath.cpp
|
pnUtPath.cpp
|
||||||
pnUtRand.cpp
|
|
||||||
pnUtSpareList.cpp
|
|
||||||
pnUtStr.cpp
|
pnUtStr.cpp
|
||||||
pnUtTime.cpp
|
pnUtTime.cpp
|
||||||
pnUtUuid.cpp
|
pnUtUuid.cpp
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/Win32/pnUtW32Dll.cpp
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#include "../pnUtils.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Private
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
@ -1,182 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtBase64.cpp
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#include "pnUtBase64.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Private
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
static const char kEncode64[] = {
|
|
||||||
// 0000000000111111111122222222223333333333444444444455555555556666
|
|
||||||
// 0123456789012345678901234567890123456789012345678901234567890123
|
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
|
||||||
};
|
|
||||||
|
|
||||||
// Note that the decode table contains one special entry:
|
|
||||||
// The '-' character (0x2d) maps to 63 just like '/' (0x2f)
|
|
||||||
// so that URLs will work with Base64Decode when we implement them.
|
|
||||||
#define kTerminator 127
|
|
||||||
#define xx kTerminator
|
|
||||||
static const char kDecode64[] = {
|
|
||||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,62,xx,63,xx,63,
|
|
||||||
52,53,54,55,56,57,58,59,60,61,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
|
|
||||||
15,16,17,18,19,20,21,22,23,24,25,xx,xx,xx,xx,xx,
|
|
||||||
xx,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
|
|
||||||
41,42,43,44,45,46,47,48,49,50,51,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,
|
|
||||||
};
|
|
||||||
#undef xx
|
|
||||||
|
|
||||||
static const char kFillchar = '=';
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Exports
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
unsigned Base64Encode (
|
|
||||||
unsigned srcChars,
|
|
||||||
const uint8_t srcData[],
|
|
||||||
unsigned dstChars,
|
|
||||||
char * dstData
|
|
||||||
) {
|
|
||||||
ASSERT(srcData);
|
|
||||||
ASSERT(dstChars >= Base64EncodeSize(srcChars));
|
|
||||||
ASSERT(dstData);
|
|
||||||
|
|
||||||
const char * dstBase = dstData;
|
|
||||||
const uint8_t * srcTerm = srcData + srcChars;
|
|
||||||
for (;;) switch (srcTerm - srcData) {
|
|
||||||
case 0:
|
|
||||||
*dstData++ = 0;
|
|
||||||
return dstData - dstBase;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
*dstData++ = kEncode64[ ((srcData[0] >> 2) & 0x3f) ];
|
|
||||||
*dstData++ = kEncode64[ ((srcData[0] << 4) & 0x30) ];
|
|
||||||
*dstData++ = kFillchar;
|
|
||||||
*dstData++ = kFillchar;
|
|
||||||
*dstData++ = 0;
|
|
||||||
return dstData - dstBase;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
*dstData++ = kEncode64[ ((srcData[0] >> 2) & 0x3f) ];
|
|
||||||
*dstData++ = kEncode64[ ((srcData[0] << 4) & 0x30) + ((srcData[1] >> 4) & 0x0f) ];
|
|
||||||
*dstData++ = kEncode64[ ((srcData[1] << 2) & 0x3c) ];
|
|
||||||
*dstData++ = kFillchar;
|
|
||||||
*dstData++ = 0;
|
|
||||||
return dstData - dstBase;
|
|
||||||
|
|
||||||
default:
|
|
||||||
*dstData++ = kEncode64[ ((srcData[0] >> 2) & 0x3f) ];
|
|
||||||
*dstData++ = kEncode64[ ((srcData[0] << 4) & 0x30) + ((srcData[1] >> 4) & 0x0f) ];
|
|
||||||
*dstData++ = kEncode64[ ((srcData[1] << 2) & 0x3c) + ((srcData[2] >> 6) & 0x03) ];
|
|
||||||
*dstData++ = kEncode64[ (srcData[2] & 0x3f) ];
|
|
||||||
srcData += 3;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
unsigned Base64Decode (
|
|
||||||
unsigned srcChars,
|
|
||||||
const char srcData[],
|
|
||||||
unsigned dstChars,
|
|
||||||
uint8_t * dstData
|
|
||||||
) {
|
|
||||||
ASSERT(srcData);
|
|
||||||
ASSERT(dstChars >= Base64DecodeSize(srcChars, srcData));
|
|
||||||
ASSERT(dstData);
|
|
||||||
|
|
||||||
const uint8_t * dstBase = dstData;
|
|
||||||
const char * srcTerm = srcData + srcChars;
|
|
||||||
while (srcTerm - srcData >= 4) {
|
|
||||||
|
|
||||||
*dstData++ = (uint8_t) (
|
|
||||||
(kDecode64[srcData[0]] << 2 & 0xfc)
|
|
||||||
+(kDecode64[srcData[1]] >> 4 & 0x03)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (kDecode64[srcData[2]] == kTerminator)
|
|
||||||
break;
|
|
||||||
|
|
||||||
*dstData++ = (uint8_t) (
|
|
||||||
(kDecode64[srcData[1]] << 4 & 0xf0)
|
|
||||||
+(kDecode64[srcData[2]] >> 2 & 0x0f)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (kDecode64[srcData[3]] == kTerminator)
|
|
||||||
break;
|
|
||||||
|
|
||||||
*dstData++ = (uint8_t) (
|
|
||||||
(kDecode64[srcData[2]] << 6 & 0xc0)
|
|
||||||
+(kDecode64[srcData[3]])
|
|
||||||
);
|
|
||||||
|
|
||||||
srcData += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
return dstData - dstBase;
|
|
||||||
}
|
|
@ -1,85 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtBase64.h
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#ifndef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTBASE64_H
|
|
||||||
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTBASE64_H
|
|
||||||
|
|
||||||
#include "Pch.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Base64 Codec API
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
const unsigned kBase64EncodeBlock = 4;
|
|
||||||
const unsigned kBase64EncodeMultiple = 3;
|
|
||||||
|
|
||||||
inline unsigned Base64EncodeSize (unsigned srcChars) {
|
|
||||||
return (srcChars + kBase64EncodeMultiple - 1) / kBase64EncodeMultiple
|
|
||||||
* kBase64EncodeBlock;
|
|
||||||
}
|
|
||||||
unsigned Base64Encode (
|
|
||||||
unsigned srcChars,
|
|
||||||
const uint8_t srcData[],
|
|
||||||
unsigned dstChars,
|
|
||||||
char * dstData
|
|
||||||
);
|
|
||||||
|
|
||||||
inline unsigned Base64DecodeSize (unsigned srcChars, const char srcData[]) {
|
|
||||||
return srcChars * kBase64EncodeMultiple / kBase64EncodeBlock
|
|
||||||
- ((srcChars >= 1 && srcData[srcChars - 1] == '=') ? 1 : 0)
|
|
||||||
- ((srcChars >= 2 && srcData[srcChars - 2] == '=') ? 1 : 0);
|
|
||||||
}
|
|
||||||
unsigned Base64Decode (
|
|
||||||
unsigned srcChars,
|
|
||||||
const char srcData[],
|
|
||||||
unsigned dstChars,
|
|
||||||
uint8_t * dstData
|
|
||||||
);
|
|
||||||
#endif
|
|
@ -437,8 +437,14 @@ void TBaseHashTable<T>::SetLinkOffset (int linkOffset, unsigned maxSize) {
|
|||||||
m_linkOffset = linkOffset;
|
m_linkOffset = linkOffset;
|
||||||
m_fullList.SetLinkOffset(m_linkOffset + offsetof(THashLink<T>, m_linkToFull));
|
m_fullList.SetLinkOffset(m_linkOffset + offsetof(THashLink<T>, m_linkToFull));
|
||||||
|
|
||||||
if (!m_slotMask)
|
if (!m_slotMask) {
|
||||||
SetSlotCount(max(kSlotMinCount, MathNextPow2(maxSize)));
|
// http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
|
||||||
|
uint32_t v = maxSize - 1;
|
||||||
|
v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16;
|
||||||
|
v++;
|
||||||
|
|
||||||
|
SetSlotCount(max(kSlotMinCount, v));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtMath.cpp
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#include "pnUtMath.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Exported bit manipulation functions
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
unsigned MathHighBitPos (uint32_t val) {
|
|
||||||
ASSERT(val);
|
|
||||||
double f = (double)val;
|
|
||||||
return (*((uint32_t *)&f + 1) >> 20) - 1023;
|
|
||||||
}
|
|
@ -1,102 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtMath.h
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#ifndef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTMATH_H
|
|
||||||
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTMATH_H
|
|
||||||
|
|
||||||
#include "Pch.h"
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Bit manipulation functions
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
unsigned MathHighBitPos (uint32_t val);
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
inline unsigned MathBitCount (uint32_t val) {
|
|
||||||
val = val - ((val >> 1) & 033333333333) - ((val >> 2) & 011111111111);
|
|
||||||
val = ((val + (val >> 3)) & 030707070707);
|
|
||||||
val = val + (val >> 6);
|
|
||||||
val = (val + (val >> 12) + (val >> 24)) & 077;
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
inline unsigned MathBitMaskCreate (unsigned count) {
|
|
||||||
ASSERT(count <= 8 * sizeof(unsigned));
|
|
||||||
return count ? ((2 << (count - 1)) - 1) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
inline uint32_t MathHighBitValue (uint32_t val) {
|
|
||||||
return val ? 1 << MathHighBitPos(val) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
inline bool MathIsPow2 (unsigned val) {
|
|
||||||
return !(val & (val - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
inline unsigned MathLowBitValue (unsigned val) {
|
|
||||||
return val & ~(val - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
inline unsigned MathNextMultiplePow2 (unsigned val, unsigned multiple) {
|
|
||||||
ASSERT(multiple);
|
|
||||||
ASSERT(MathIsPow2(multiple));
|
|
||||||
return (val + (multiple - 1)) & ~(multiple - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
inline uint32_t MathNextPow2 (uint32_t val) {
|
|
||||||
return MathIsPow2(val) ? val : 1 << (MathHighBitPos(val) + 1);
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,184 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtRand.cpp
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#include "pnUtRand.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Private
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
class RandomContext {
|
|
||||||
uint32_t m_seed;
|
|
||||||
uint32_t m_value;
|
|
||||||
|
|
||||||
void UpdateValue ();
|
|
||||||
|
|
||||||
public:
|
|
||||||
RandomContext ();
|
|
||||||
|
|
||||||
void Reset ();
|
|
||||||
void SetSeed (unsigned seed);
|
|
||||||
float GetFloat ();
|
|
||||||
float GetFloat (float minVal, float maxVal);
|
|
||||||
unsigned GetUnsigned ();
|
|
||||||
unsigned GetUnsigned (unsigned minVal, unsigned maxVal);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Private data
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
static const uint32_t kDefaultRandomSeed = 0x075bd924;
|
|
||||||
|
|
||||||
static RandomContext s_random;
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* RandomContext
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
RandomContext::RandomContext ()
|
|
||||||
: m_seed(kDefaultRandomSeed)
|
|
||||||
{
|
|
||||||
Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
void RandomContext::UpdateValue () {
|
|
||||||
const uint32_t A = 0xbc8f;
|
|
||||||
const uint32_t Q = 0xadc8;
|
|
||||||
const uint32_t R = 0x0d47;
|
|
||||||
|
|
||||||
uint32_t div = m_value / Q;
|
|
||||||
m_value = A * (m_value - Q * div) - R * div;
|
|
||||||
if (m_value > kRandomMax)
|
|
||||||
m_value -= kRandomMax + 1;
|
|
||||||
if (!m_value)
|
|
||||||
m_value = kDefaultRandomSeed;
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
void RandomContext::Reset () {
|
|
||||||
m_value = m_seed;
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
void RandomContext::SetSeed (unsigned seed) {
|
|
||||||
// Never allow a seed of zero
|
|
||||||
m_seed = seed ? seed : kDefaultRandomSeed;
|
|
||||||
Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
float RandomContext::GetFloat () {
|
|
||||||
UpdateValue();
|
|
||||||
return m_value * (1.0f / kRandomMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
float RandomContext::GetFloat (float minVal, float maxVal) {
|
|
||||||
float value = GetFloat();
|
|
||||||
return minVal + value * (maxVal - minVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
unsigned RandomContext::GetUnsigned () {
|
|
||||||
UpdateValue();
|
|
||||||
return (unsigned)m_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
unsigned RandomContext::GetUnsigned (unsigned minVal, unsigned maxVal) {
|
|
||||||
unsigned value = GetUnsigned();
|
|
||||||
return minVal + value % (maxVal - minVal + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Exports
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
void RandReset () {
|
|
||||||
s_random.Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
void RandSetSeed (unsigned seed) {
|
|
||||||
s_random.SetSeed(seed);
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
float RandFloat () {
|
|
||||||
return s_random.GetFloat();
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
float RandFloat (float minVal, float maxVal) {
|
|
||||||
return s_random.GetFloat(minVal, maxVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
unsigned RandUnsigned () {
|
|
||||||
return s_random.GetUnsigned();
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
unsigned RandUnsigned (unsigned minVal, unsigned maxVal) {
|
|
||||||
return s_random.GetUnsigned(minVal, maxVal);
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtRand.h
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#ifndef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTRAND_H
|
|
||||||
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTRAND_H
|
|
||||||
|
|
||||||
#include "Pch.h"
|
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* Psuedo-random number generator
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
const uint32_t kRandomMax = 0x7fffffff;
|
|
||||||
|
|
||||||
void RandReset ();
|
|
||||||
void RandSetSeed (unsigned seed);
|
|
||||||
float RandFloat ();
|
|
||||||
float RandFloat (float minVal, float maxVal);
|
|
||||||
unsigned RandUnsigned ();
|
|
||||||
unsigned RandUnsigned (unsigned minVal, unsigned maxVal);
|
|
||||||
#endif
|
|
@ -1,163 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtSpareList.cpp
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#include "pnUtSpareList.h"
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* Exported functions
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
CBaseSpareList::CBaseSpareList ()
|
|
||||||
: m_allocHead(nil),
|
|
||||||
m_spareHead(nil),
|
|
||||||
m_chunkSize(0)
|
|
||||||
{
|
|
||||||
#ifdef SPARELIST_TRACK_MEMORY
|
|
||||||
m_unfreedObjects = 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
void * CBaseSpareList::Alloc (unsigned objectSize, const char typeName[]) {
|
|
||||||
// if there aren't any spare nodes available then make more
|
|
||||||
if (!m_spareHead)
|
|
||||||
GrowSpareList(objectSize, typeName);
|
|
||||||
|
|
||||||
// dequeue the head of the spare list
|
|
||||||
void * const object = m_spareHead;
|
|
||||||
m_spareHead = m_spareHead->spareNext;
|
|
||||||
#ifdef SPARELIST_TRACK_MEMORY
|
|
||||||
m_unfreedObjects++;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// initialize memory to a freaky value in debug mode
|
|
||||||
#ifdef HS_DEBUGGING
|
|
||||||
memset(object, (uint8_t) ((unsigned) object >> 4), objectSize);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
void CBaseSpareList::Free (void * object, unsigned objectSize) {
|
|
||||||
// initialize memory to a freaky value in debug mode
|
|
||||||
#ifdef HS_DEBUGGING
|
|
||||||
memset(object, (uint8_t) ((unsigned) object >> 4), objectSize);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// link memory block onto head of spare list
|
|
||||||
((SpareNode *) object)->spareNext = m_spareHead;
|
|
||||||
m_spareHead = (SpareNode *) object;
|
|
||||||
#ifdef SPARELIST_TRACK_MEMORY
|
|
||||||
m_unfreedObjects--;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
void CBaseSpareList::GrowSpareList (unsigned objectSize, const char typeName[]) {
|
|
||||||
// Grow the allocation by a substantial amount each time
|
|
||||||
// to reduce the time spent in memory managament
|
|
||||||
m_chunkSize *= 2;
|
|
||||||
const unsigned MIN_ALLOC = max(1, 256/objectSize);
|
|
||||||
const unsigned MAX_ALLOC = max(512, 32*1024/objectSize);
|
|
||||||
if (m_chunkSize < MIN_ALLOC)
|
|
||||||
m_chunkSize = MIN_ALLOC;
|
|
||||||
else if (m_chunkSize > MAX_ALLOC)
|
|
||||||
m_chunkSize = MAX_ALLOC;
|
|
||||||
|
|
||||||
// allocate a block of memory to hold a bunch
|
|
||||||
// of T-objects, but allocate them as "raw" memory
|
|
||||||
AllocNode * allocNode = (AllocNode *) malloc(
|
|
||||||
sizeof(AllocNode) + objectSize * m_chunkSize
|
|
||||||
);
|
|
||||||
|
|
||||||
// link allocation onto head of allocation list
|
|
||||||
allocNode->allocNext = m_allocHead;
|
|
||||||
m_allocHead = allocNode;
|
|
||||||
|
|
||||||
// chain newly created raw memory units together onto the spare list
|
|
||||||
SpareNode * spareCurr = (SpareNode *) (allocNode + 1);
|
|
||||||
SpareNode * spareEnd = (SpareNode *) ((uint8_t *) spareCurr + objectSize * m_chunkSize);
|
|
||||||
do {
|
|
||||||
spareCurr->spareNext = m_spareHead;
|
|
||||||
m_spareHead = spareCurr;
|
|
||||||
spareCurr = (SpareNode *) ((uint8_t *) spareCurr + objectSize);
|
|
||||||
} while (spareCurr < spareEnd);
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
void CBaseSpareList::CleanUp (const char typeName[]) {
|
|
||||||
// warn of resource leaks
|
|
||||||
#ifdef SPARELIST_TRACK_MEMORY
|
|
||||||
if (m_unfreedObjects) {
|
|
||||||
#ifdef CLIENT
|
|
||||||
{
|
|
||||||
char buffer[256];
|
|
||||||
snprintf(buffer, arrsize(buffer), "Memory leak: %s", typeName);
|
|
||||||
FATAL(buffer);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
{
|
|
||||||
DEBUG_MSG("Memory leak: %s", typeName);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// walk chain of AllocNodes and free each of them
|
|
||||||
while (m_allocHead) {
|
|
||||||
AllocNode * allocNext = m_allocHead->allocNext;
|
|
||||||
free(m_allocHead);
|
|
||||||
m_allocHead = allocNext;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_spareHead = nil;
|
|
||||||
}
|
|
@ -1,148 +0,0 @@
|
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools
|
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7
|
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or
|
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
|
||||||
(or a modified version of those libraries),
|
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
|
||||||
licensors of this Program grant you additional
|
|
||||||
permission to convey the resulting work. Corresponding Source for a
|
|
||||||
non-source form of such a combination shall include the source code for
|
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
|
||||||
work.
|
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
|
||||||
or by snail mail at:
|
|
||||||
Cyan Worlds, Inc.
|
|
||||||
14617 N Newport Hwy
|
|
||||||
Mead, WA 99021
|
|
||||||
|
|
||||||
*==LICENSE==*/
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtSpareList.h
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
#ifndef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTSPARELIST_H
|
|
||||||
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTSPARELIST_H
|
|
||||||
|
|
||||||
#include "Pch.h"
|
|
||||||
#include <typeinfo>
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HS_DEBUGGING
|
|
||||||
#define SPARELIST_TRACK_MEMORY
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* CBaseSpareList
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
class CBaseSpareList {
|
|
||||||
public:
|
|
||||||
CBaseSpareList ();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
struct SpareNode {
|
|
||||||
SpareNode * spareNext;
|
|
||||||
};
|
|
||||||
SpareNode * m_spareHead;
|
|
||||||
|
|
||||||
void * Alloc (unsigned objectSize, const char typeName[]);
|
|
||||||
void CleanUp (const char typeName[]);
|
|
||||||
void Free (void * object, unsigned objectSize);
|
|
||||||
|
|
||||||
private:
|
|
||||||
union AllocNode {
|
|
||||||
AllocNode * allocNext;
|
|
||||||
uint64_t align;
|
|
||||||
};
|
|
||||||
AllocNode * m_allocHead;
|
|
||||||
unsigned m_chunkSize;
|
|
||||||
|
|
||||||
#ifdef SPARELIST_TRACK_MEMORY
|
|
||||||
unsigned m_unfreedObjects;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void GrowSpareList (unsigned objectSize, const char typeName[]);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* TSpareList
|
|
||||||
*
|
|
||||||
***/
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
class TSpareList : public CBaseSpareList {
|
|
||||||
private:
|
|
||||||
enum { OBJECT_SIZE = MAX(sizeof(T), sizeof(SpareNode)) };
|
|
||||||
|
|
||||||
public:
|
|
||||||
~TSpareList () { CleanUp(); }
|
|
||||||
|
|
||||||
void * Alloc ();
|
|
||||||
void CleanUp ();
|
|
||||||
void Delete (T * node);
|
|
||||||
void Free (T * node);
|
|
||||||
T * New ();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
template<class T>
|
|
||||||
void * TSpareList<T>::Alloc () {
|
|
||||||
return CBaseSpareList::Alloc(OBJECT_SIZE, typeid(T).name());
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
template<class T>
|
|
||||||
void TSpareList<T>::CleanUp () {
|
|
||||||
CBaseSpareList::CleanUp(typeid(T).name());
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
template<class T>
|
|
||||||
void TSpareList<T>::Delete (T * node) {
|
|
||||||
node->~T();
|
|
||||||
CBaseSpareList::Free(node, OBJECT_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
template<class T>
|
|
||||||
void TSpareList<T>::Free (T * node) {
|
|
||||||
CBaseSpareList::Free(node, OBJECT_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
template<class T>
|
|
||||||
T * TSpareList<T>::New () {
|
|
||||||
return new(CBaseSpareList::Alloc(OBJECT_SIZE, typeid(T).name())) T;
|
|
||||||
}
|
|
||||||
#endif
|
|
Reference in New Issue
Block a user