Darryl Pogue
13 years ago
11 changed files with 8 additions and 1060 deletions
@ -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 |
@ -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 |
Loading…
Reference in new issue