From 83b5f9c877491abfe8fe27477a73e91d268d2a4a Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 17 Jun 2025 17:56:41 +0200 Subject: [PATCH] std format alternative --- util/format.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 util/format.h diff --git a/util/format.h b/util/format.h new file mode 100644 index 0000000..e0e9bbf --- /dev/null +++ b/util/format.h @@ -0,0 +1,28 @@ +#pragma once +#include +#include +#include + +namespace trnr { + +// Formats a string (like printf) using a format string and variable arguments. +inline std::string format(const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + std::vector buf(256); + int needed = vsnprintf(buf.data(), buf.size(), fmt, args); + va_end(args); + + if (needed < 0) { return {}; } + if (static_cast(needed) < buf.size()) { return std::string(buf.data(), needed); } + + // Resize and try again if the buffer was too small + buf.resize(needed + 1); + va_start(args, fmt); + vsnprintf(buf.data(), buf.size(), fmt, args); + va_end(args); + + return std::string(buf.data(), needed); +} +} // namespace trnr \ No newline at end of file