#ifndef COMMON_STRINGFMT_H #define COMMON_STRINGFMT_H #include #include namespace util { ////////////////////////////////////////////////////////////////////////// // vsnprintf/snprintf wrappers enum { SPRINTF_BUFFER_SIZE = 512 }; inline std::string SVPrintf(const char* format, va_list args) { char buffer[SPRINTF_BUFFER_SIZE] = { 0 }; #ifdef _WIN32 _vsnprintf_s(buffer, SPRINTF_BUFFER_SIZE, SPRINTF_BUFFER_SIZE - 1, format, args); #else vsnprintf(buffer, SPRINTF_BUFFER_SIZE, format, args); #endif buffer[SPRINTF_BUFFER_SIZE - 1] = 0; return std::string(buffer); } inline std::wstring SVPrintf(const wchar_t* format, va_list args) { wchar_t buffer[SPRINTF_BUFFER_SIZE] = { 0 }; #ifdef _WIN32 _vsnwprintf_s(buffer, SPRINTF_BUFFER_SIZE, SPRINTF_BUFFER_SIZE - 1, format, args); #else vsnwprintf(buffer, SPRINTF_BUFFER_SIZE, format, args); #endif buffer[SPRINTF_BUFFER_SIZE - 1] = 0; return std::wstring(buffer); } template std::basic_string SPrintf(const tChar* format, ...) { va_list args; va_start(args, format); std::basic_string temp = SVPrintf(format, args); va_end(args); return temp; } template std::basic_string SPrintf(const std::basic_string& format, ...) { return SPrintf(format.c_str()); } } // namespace util #endif