summaryrefslogtreecommitdiffhomepage
path: root/compat
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-02-26 18:46:21 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-02-26 20:06:25 +0100
commitbde5939b2f1eb5c04c1ab429a79fa799c3bfee28 (patch)
treeb1c49902c88746d9b2facaf20f4f52d9197c6dd9 /compat
parent8a380af2b8f28400f29a5468a3a1a5629a665867 (diff)
implement printing fractions for corrade's Debug{}
Diffstat (limited to 'compat')
-rw-r--r--compat/debug.cpp16
-rw-r--r--compat/debug.hpp12
2 files changed, 28 insertions, 0 deletions
diff --git a/compat/debug.cpp b/compat/debug.cpp
index 0a77d298..0c7a6fd1 100644
--- a/compat/debug.cpp
+++ b/compat/debug.cpp
@@ -1,11 +1,16 @@
#include "debug.hpp"
#include "compat/strerror.hpp"
#include <cerrno>
+#include <cstdio>
#include <Corrade/Containers/StringView.h>
// Error{} << "error" << colon() << "can't open file" << colon() << quoted("foo") << error_string(EINVAL);
// ===> "error: can't open file 'foo': Invalid argument"
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wformat-nonliteral"
+#endif
+
namespace floormat::detail::corrade_debug {
Debug& operator<<(Debug& dbg, Colon box)
@@ -46,6 +51,15 @@ Debug& quoted_end(Debug& dbg, Debug::Flags flags, char c)
template struct Quoted<StringView>;
+Debug& operator<<(Debug& dbg, Fraction f)
+{
+ char fmt[8], buf[56];
+ std::snprintf(fmt, sizeof fmt, "%%.%hhuf", f.decimal_points);
+ std::snprintf(buf, sizeof buf, fmt, (double)f.value);
+ dbg << buf;
+ return dbg;
+}
+
} // namespace floormat::detail::corrade_debug
namespace floormat {
@@ -56,4 +70,6 @@ Colon colon(char c) { return Colon{c}; }
ErrorString error_string(int error) { return { error }; }
ErrorString error_string() { return { errno }; }
+Fraction fraction(float value, uint8_t decimal_points) { return Fraction { value, decimal_points }; }
+
} // namespace floormat
diff --git a/compat/debug.hpp b/compat/debug.hpp
index cb36e612..1fdd9a7e 100644
--- a/compat/debug.hpp
+++ b/compat/debug.hpp
@@ -40,6 +40,16 @@ template<typename T> Debug& operator<<(Debug& dbg, Quoted<T> box)
return quoted_end(dbg, flags, box.c);
}
+// ***** float *****
+
+struct Fraction
+{
+ float value;
+ uint8_t decimal_points;
+};
+
+Debug& operator<<(Debug& dbg, Fraction frac);
+
} // namespace floormat::detail::corrade_debug
// ***** api *****
@@ -52,6 +62,8 @@ floormat::detail::corrade_debug::Colon colon(char c = ':');
floormat::detail::corrade_debug::ErrorString error_string(int error);
floormat::detail::corrade_debug::ErrorString error_string();
+floormat::detail::corrade_debug::Fraction fraction(float value, uint8_t decimal_points = 1);
+
template<DebugPrintable T>
auto quoted(T&& value, char c = '\'')
{