DragonNest/Server/ServiceMonitorEx/Source/CommonMacros.hpp

179 lines
5.2 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
/*//===============================================================
<< COMMON MACROS >>
PRGM : B4nFter, milkji
FILE : COMMONMACROS.HPP
DESC : System Base <EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <EFBFBD>Ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ũ<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INIT BUILT DATE : 2005. 10. 15
LAST BUILT DATE : 2007. 11. 19
Copyright<EFBFBD><EFBFBD> 2002~2009 B4nFter (b4nfter@gmail.com) and Co-Writers. All Rights Reserved.
*///===============================================================
#pragma once
///////////////////////////////////////////////////////////////////
// INCLUDE
///////////////////////////////////////////////////////////////////
// P.S.> SYSBASEBASE.H <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WINDOWS.H <20><> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> <20><><EFBFBD>ܽ<EFBFBD>Ŵ)
///////////////////////////////////////////////////////////////////
// DEFINE
///////////////////////////////////////////////////////////////////
// <20><>ü <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD>Լ<EFBFBD>
#if !defined(SAFE_DELETE)
#define SAFE_DELETE(p) { if (p) { delete(p); (p) = NULL; } }
#endif // SAFE_DELETE
#if !defined(SAFE_DELETEARRAY)
#define SAFE_DELETEARRAY(p) { if (p) { delete[](p); (p) = NULL; } }
#endif // SAFE_DELETEARRAY
#if !defined(SAFE_DELETEOBJECT)
#define SAFE_DELETEOBJECT(p) { if (p) { ::DeleteObject(p); (p) = NULL; } }
#endif // SAFE_DELETEOBJECT
#if !defined(SAFE_RELEASE)
#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p) = NULL; } }
#endif // SAFE_RELEASE
#if !defined(SAFE_CLOSEHANDLE)
#define SAFE_CLOSEHANDLE(p) { if (p !=INVALID_HANDLE_VALUE) { ::CloseHandle(p); (p) = INVALID_HANDLE_VALUE; } }
#endif // SAFE_CLOSEHANDLE
#if !defined(SAFE_CLOSESOCKET)
#define SAFE_CLOSESOCKET(p) { if (p !=INVALID_SOCKET) { ::closesocket(p); (p) = INVALID_SOCKET; } }
#endif // SAFE_CLOSESOCKET
#if !defined(SAFE_FCLOSE)
#define SAFE_FCLOSE(p) { if (p) { ::fclose(p); (p) = NULL; } }
#endif // SAFE_FCLOSE
#if !defined(SAFE_DESTROYWINDOW)
#define SAFE_DESTROYWINDOW(p) { if (p) { ::DestroyWindow(p); (p) = NULL; } }
#endif // SAFE_DESTROYWINDOW
#if !defined(SAFE_DESTROYMENU)
#define SAFE_DESTROYMENU(p) { if (p) { ::DestroyMenu(p); (p) = NULL; } }
#endif // SAFE_DESTROYMENU
#if !defined(SAFE_FREE)
#define SAFE_FREE(p) { if (p) { ::free(p); (p) = NULL; } }
#endif // SAFE_FREE
// <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD>Լ<EFBFBD>
#if !defined(MIN)
#define MIN(M_A, M_B) (((M_A)>(M_B)) ? (M_B):(M_A))
#endif // MIN
#if !defined(MAX)
#define MAX(M_A, M_B) (((M_A)>(M_B)) ? (M_A):(M_B))
#endif // MAX
#if !defined(EQUARL)
#define EQUARL(M_A, M_B) (((M_A)==(M_B)) ? TRUE:FALSE;)
#endif // EQUARL
// <20><><EFBFBD><EFBFBD>Ư<EFBFBD><C6AF> <20><>ũ<EFBFBD><C5A9><EFBFBD>Լ<EFBFBD>
#define CHECK_LIMIT(C_VALUE, C_MAX) (C_VALUE<0?FALSE:C_VALUE>(C_MAX-1)?FALSE:TRUE) // 0 <20>̻<EFBFBD> C_MAX <20≯<EFBFBD>
#define CHECK_LIMIT_NONZERO(C_VALUE, C_MAX) (C_VALUE<=0?FALSE:C_VALUE>(C_MAX-1)?FALSE:TRUE) // 0 <20>ʰ<EFBFBD> C_MAX <20≯<EFBFBD>
#define CHECK_RANGE(C_VALUE, C_MIN, C_MAX) (C_VALUE<C_MIN?FALSE:C_VALUE>C_MAX?FALSE:TRUE) // C_MIN <20>̻<EFBFBD> C_MAX <20≯<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD>Լ<EFBFBD>
#define CUT_LIMIT(C_VALUE, C_MIN, C_MAX) (C_VALUE<C_MIN?C_MIN:C_VALUE>C_MAX?C_MAX:C_VALUE)
// <20><20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD>Լ<EFBFBD>
#define COUNT_OF(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0]))
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD>Լ<EFBFBD>
#define SWAP(LT, RT) ((LT)^=((RT)^=((LT)^=(RT))))
#define LOLONG(l) ((DWORD)((UINT64)(l) & 0xFFFFFFFF))
#define HILONG(l) ((DWORD)((UINT64)(l) >> 32))
#define MAKELONGLONG(A, B) ((INT64)(((DWORD)((UINT64)(A) & 0xFFFFFFFF)) | ((INT64)((DWORD)((UINT64)(B) & 0xFFFFFFFF))) << 32))
// <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD>Լ<EFBFBD>
#define CONV_STRINGA(pNM) (#pNM)
#define CONV_STRINGW(pNM) (L#pNM)
#if defined(_UNICODE)
#define CONV_STRING CONV_STRINGW
#else // _UNICODE
#define CONV_STRING CONV_STRINGA
#endif // _UNICODE
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD>Լ<EFBFBD>
#if defined(_DEBUG)
#define MODE_DBG(pDBG) pDBG
#if (_MSC_VER >= 1400)
#define MODE_DBG_EX(pMST, pDBG) pMST, pDBG
#else // #if (_MSC_VER >= 1400)
#define MODE_DBG_EX(pMST, pDBG) pMST
#endif //#if (_MSC_VER >= 1400)
#define MODE_CMP(pDBG, pREL) pDBG
#else // _DEBUG
#define MODE_DBG(pDBG)
#define MODE_DBG_EX(pMST, pDBG) pMST
//#define MODE_DBG_EX(pMST, pDBG) pMST, pDBG
#define MODE_CMP(pDBG, pREL) pREL
#endif // _DEBUG
#if defined(_MT)
#define MODE_MT(pSG, pMT) pMT
#else // _MT
#define MODE_MT(pSG, pMT) pSG
#endif // _MT
#if defined(_UNICODE)
#define MODE_CHARSET(pMBCS, pUNCD) pUNCD
#else // _UNICODE
#define MODE_CHARSET(pMBCS, pUNCD) pMBCS
#endif // _UNICODE
// ǥ<><C7A5> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
#if defined(_UNICODE)
#define _tstring std::wstring
#else // _UNICODE
#define _tstring std::string
#endif // _UNICODE
// ǥ<><C7A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
#if defined(_UNICODE)
#define _tifstream std::wifstream
#define _tofstream std::wofstream
#else // _UNICODE
#define _tifstream std::ifstream
#define _tofstream std::ofstream
#endif // _UNICODE
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>ȯ (USES_CONVERSION <20><> <20><><EFBFBD><20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20><> - ATLDBCLI.H)
#define I2A(I) (\
(_lpa = (LPCSTR)alloca(12)),\
(_itoa(I, (LPSTR)_lpa, 10)),\
(_lpa))
#define I2W(I) (\
(_lpw = (LPCWSTR)alloca(24)),\
(_itow(I, (LPWSTR)_lpw, 10)),\
(_lpw))
#if defined(_UNICODE)
#define I2T I2W
#else // _UNICODE
#define I2T I2A
#endif // _UNICODE
// 64<36><34>Ʈ <20><><EFBFBD><EFBFBD> (X64 - _AMD64_ / IA64 - _IA64_)
#if defined(_AMD64_) || defined(_IA64_)
typedef DWORD64 PTRTYPE;
#else // _AMD64_ / _IA64_
typedef DWORD PTRTYPE;
#endif // _AMD64_ / _IA64_