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