#include "Win32Crt.h" #if !defined(_WIN32) #include #include #include #include char* _strlwr(char* s) { for (char* p = s; *p; ++p) *p = static_cast(std::tolower(static_cast(*p))); return s; } char* _strupr(char* s) { for (char* p = s; *p; ++p) *p = static_cast(std::toupper(static_cast(*p))); return s; } int _vsnprintf(char* buf, size_t count, const char* fmt, va_list ap) { va_list probe; va_copy(probe, ap); const int len = std::vsnprintf(nullptr, 0, fmt, probe); va_end(probe); if (len < 0) return -1; const size_t need = static_cast(len); if (need < count) return std::vsnprintf(buf, count, fmt, ap); std::vector full(need + 1); std::vsnprintf(full.data(), full.size(), fmt, ap); std::memcpy(buf, full.data(), count); return need == count ? len : -1; } int _snprintf(char* buf, size_t count, const char* fmt, ...) { va_list ap; va_start(ap, fmt); const int ret = _vsnprintf(buf, count, fmt, ap); va_end(ap); return ret; } DWORD timeGetTime() { using namespace std::chrono; const auto ms = duration_cast(steady_clock::now().time_since_epoch()).count(); return static_cast(static_cast(ms)); } DWORD GetTickCount() { return timeGetTime(); } #endif // !_WIN32