/*//=============================================================== << VARIABLE-ARGUMENT >> PRGM : milkji, B4nFter FILE : VARARG.HPP DESC : °¡º¯ ÀÎÀÚµé·Î ¹®ÀÚ¿­À» ±¸¼ºÇØÁִ Ŭ·¡½º INIT BUILT DATE : 2007. 09. 06 LAST BUILT DATE : 2007. 09. 07 Copyright¨Ï 2002~2009 B4nFter (b4nfter@gmail.com) and Co-Writers. All Rights Reserved. *///=============================================================== #pragma once /////////////////////////////////////////////////////////////////// // INCLUDE /////////////////////////////////////////////////////////////////// #include "SYSBASEBASE.H" #include // std::var_list /////////////////////////////////////////////////////////////////// // DEFINE /////////////////////////////////////////////////////////////////// #if defined(_UNICODE) #define CVarArg CVarArgW #else // _UNICODE #define CVarArg CVarArgA #endif // _UNICODE /////////////////////////////////////////////////////////////////// // DECLARATION /////////////////////////////////////////////////////////////////// //*--------------------------------------------------------------- // TYPE : CLASS // NAME : CVarArgA //*--------------------------------------------------------------- // DESC : °¡º¯ ÀÎÀÚµé·Î ¹®ÀÚ¿­À» ±¸¼ºÇØÁִ Ŭ·¡½º (¸ÖƼ¹ÙÀÌÆ®) // PRGM : milkji, B4nFter //*--------------------------------------------------------------- template class CVarArgA { DISABLE_COPY_ASSIGN(CVarArgA) // °´Ã¼°£ º¹»ç, ´ëÀÔ ±ÝÁö public: explicit CVarArgA(const CHAR* lpFormat, ...); operator const CHAR*() const; const CHAR* GetMsg() const; private: CHAR m_cBuffer[TP_MSGSIZE]; }; //*--------------------------------------------------------------- // TYPE : CLASS // NAME : CVarArgW //*--------------------------------------------------------------- // DESC : °¡º¯ ÀÎÀÚµé·Î ¹®ÀÚ¿­À» ±¸¼ºÇØÁִ Ŭ·¡½º (À¯´ÏÄÚµå) // PRGM : milkji, B4nFter //*--------------------------------------------------------------- template class CVarArgW { DISABLE_COPY_ASSIGN(CVarArgW) // °´Ã¼°£ º¹»ç, ´ëÀÔ ±ÝÁö public: explicit CVarArgW(const WCHAR* lpFormat, ...); operator const WCHAR*() const; const WCHAR* GetMsg() const; private: WCHAR m_cBuffer[TP_MSGSIZE]; }; /////////////////////////////////////////////////////////////////// // IMPLEMENTATION /////////////////////////////////////////////////////////////////// //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CVarArgA::CVarArgA //*--------------------------------------------------------------- // DESC : »ý¼ºÀÚ // PARM : 1 . lpFormat - Ãâ·Â Æ÷¸Ë // 2 . ... - °¡º¯ÀÎÀÚ // RETV : N/A // PRGM : milkji, B4nFter //*--------------------------------------------------------------- template CVarArgA::CVarArgA(const CHAR* lpFormat, ...) { CHECK_STRINGA(lpFormat, INFINITE); std::va_list aArgs; va_start(aArgs, lpFormat); VSNPRINTFA(m_cBuffer, COUNT_OF(m_cBuffer), lpFormat, aArgs); va_end(aArgs); } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CVarArgA::operator CHAR* //*--------------------------------------------------------------- // DESC : °´Ã¼¸¦ CHAR* ÇüÀ¸·Î ġȯ // PARM : N/A // RETV : ÅØ½ºÆ® ¹öÆÛ Æ÷ÀÎÅÍ // PRGM : milkji, B4nFter //*--------------------------------------------------------------- template inline CVarArgA::operator const CHAR*() const { return (GetMsg()); } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CVarArgA::GetMsg //*--------------------------------------------------------------- // DESC : °´Ã¼ÀÇ ÅØ½ºÆ® ¹öÆÛ ¹Ýȯ // PARM : N/A // RETV : ÅØ½ºÆ® ¹öÆÛ Æ÷ÀÎÅÍ // PRGM : milkji, B4nFter //*--------------------------------------------------------------- template inline const CHAR* CVarArgA::GetMsg() const { return (m_cBuffer); } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CVarArgW::CVarArgW //*--------------------------------------------------------------- // DESC : »ý¼ºÀÚ // PARM : 1 . lpFormat - Ãâ·Â Æ÷¸Ë // 2 . ... - °¡º¯ÀÎÀÚ // RETV : N/A // PRGM : milkji, B4nFter //*--------------------------------------------------------------- template CVarArgW::CVarArgW(const WCHAR* lpFormat, ...) { CHECK_STRINGW(lpFormat, INFINITE); std::va_list aArgs; va_start(aArgs, lpFormat); VSNPRINTFW(m_cBuffer, COUNT_OF(m_cBuffer), lpFormat, aArgs); va_end(aArgs); } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CVarArgW::operator WCHAR* //*--------------------------------------------------------------- // DESC : °´Ã¼¸¦ WCHAR* ÇüÀ¸·Î ġȯ // PARM : N/A // RETV : ÅØ½ºÆ® ¹öÆÛ Æ÷ÀÎÅÍ // PRGM : milkji, B4nFter //*--------------------------------------------------------------- template inline CVarArgW::operator const WCHAR*() const { return (GetMsg()); } //*--------------------------------------------------------------- // TYPE : FUNCTION // NAME : CVarArgW::GetMsg //*--------------------------------------------------------------- // DESC : °´Ã¼ÀÇ ÅØ½ºÆ® ¹öÆÛ ¹Ýȯ // PARM : N/A // RETV : ÅØ½ºÆ® ¹öÆÛ Æ÷ÀÎÅÍ // PRGM : milkji, B4nFter //*--------------------------------------------------------------- template inline const WCHAR* CVarArgW::GetMsg() const { return (m_cBuffer); }