summaryrefslogtreecommitdiff
path: root/src/util.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/util.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/util.h b/src/util.h
new file mode 100644
index 0000000..a54d3eb
--- /dev/null
+++ b/src/util.h
@@ -0,0 +1,19 @@
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+#include <memory>
+#include <string>
+#include <stdexcept>
+
+template<typename ... Args>
+std::string string_format( const std::string& format, Args ... args )
+{
+ int size_s = std::snprintf( nullptr, 0, format.c_str(), args ... ) + 1; // Extra space for '\0'
+ if( size_s <= 0 ){ throw std::runtime_error( "Error during formatting." ); }
+ auto size = static_cast<size_t>( size_s );
+ std::unique_ptr<char[]> buf( new char[ size ] );
+ std::snprintf( buf.get(), size, format.c_str(), args ... );
+ return std::string( buf.get(), buf.get() + size - 1 ); // We don't want the '\0' inside
+}
+
+#endif /* __UTIL_H__ */