summaryrefslogtreecommitdiff
path: root/asl/format.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/format.hpp')
-rw-r--r--asl/format.hpp216
1 files changed, 108 insertions, 108 deletions
diff --git a/asl/format.hpp b/asl/format.hpp
index 70ccd09..70de9b9 100644
--- a/asl/format.hpp
+++ b/asl/format.hpp
@@ -1,109 +1,109 @@
-#pragma once
-
+#pragma once
+
#include "asl/integers.hpp"
-#include "asl/meta.hpp"
-#include "asl/io.hpp"
-#include "asl/span.hpp"
-#include "asl/string_view.hpp"
-
-namespace asl
-{
-
-class Formatter;
-
-template<typename T>
-concept formattable = requires (Formatter& f, const T& value)
-{
- AslFormat(f, value);
-};
-
-namespace format_internals
-{
-
-struct type_erased_arg
-{
- const void* data;
- void (*fn)(Formatter&, const void*);
-
- template<formattable T>
- static constexpr void erased_fn(Formatter& f, const void* data)
- {
- AslFormat(f, *reinterpret_cast<const T*>(data));
- }
-
- template<formattable T>
- explicit constexpr type_erased_arg(const T& arg)
- : data{&arg}
- , fn{erased_fn<T>}
- {}
-};
-
-void format(Writer*, string_view fmt, span<const type_erased_arg> args);
-
-} // namespace internals
-
-class Formatter
-{
- Writer* m_writer;
-
-public:
- explicit constexpr Formatter(Writer* writer)
- : m_writer{writer}
- {}
-
- constexpr void write(string_view s)
- {
- m_writer->write(as_bytes(s.as_span()));
- }
-
- constexpr Writer* writer() const { return m_writer; }
-};
-
-template<formattable... Args>
-void format(Writer* w, string_view fmt, const Args&... args)
-{
- if constexpr (types_count<Args...> > 0)
- {
- format_internals::type_erased_arg type_erased_args[] = {
- format_internals::type_erased_arg(args)...
- };
-
- format_internals::format(w, fmt, type_erased_args);
- }
- else
- {
- format_internals::format(w, fmt, {});
- }
-}
-
-template<isize_t N>
-void AslFormat(Formatter& f, const char (&str)[N])
-{
- f.write(string_view(str, N - 1));
-}
-
-void AslFormat(Formatter& f, const char* str);
-
-inline void AslFormat(Formatter& f, string_view sv)
-{
- f.write(sv);
-}
-
-void AslFormat(Formatter& f, float);
-void AslFormat(Formatter& f, double);
-
-void AslFormat(Formatter& f, bool);
-
-void AslFormat(Formatter& f, uint8_t);
-void AslFormat(Formatter& f, uint16_t);
-void AslFormat(Formatter& f, uint32_t);
-void AslFormat(Formatter& f, uint64_t);
-
-void AslFormat(Formatter& f, int8_t);
-void AslFormat(Formatter& f, int16_t);
-void AslFormat(Formatter& f, int32_t);
-void AslFormat(Formatter& f, int64_t);
-
-string_view format_uint64(uint64_t value, span<char, 20> buffer);
-
-} // namespace asl
+#include "asl/meta.hpp"
+#include "asl/io.hpp"
+#include "asl/span.hpp"
+#include "asl/string_view.hpp"
+
+namespace asl
+{
+
+class Formatter;
+
+template<typename T>
+concept formattable = requires (Formatter& f, const T& value)
+{
+ AslFormat(f, value);
+};
+
+namespace format_internals
+{
+
+struct type_erased_arg
+{
+ const void* data;
+ void (*fn)(Formatter&, const void*);
+
+ template<formattable T>
+ static constexpr void erased_fn(Formatter& f, const void* data)
+ {
+ AslFormat(f, *reinterpret_cast<const T*>(data));
+ }
+
+ template<formattable T>
+ explicit constexpr type_erased_arg(const T& arg)
+ : data{&arg}
+ , fn{erased_fn<T>}
+ {}
+};
+
+void format(Writer*, string_view fmt, span<const type_erased_arg> args);
+
+} // namespace internals
+
+class Formatter
+{
+ Writer* m_writer;
+
+public:
+ explicit constexpr Formatter(Writer* writer)
+ : m_writer{writer}
+ {}
+
+ constexpr void write(string_view s)
+ {
+ m_writer->write(as_bytes(s.as_span()));
+ }
+
+ constexpr Writer* writer() const { return m_writer; }
+};
+
+template<formattable... Args>
+void format(Writer* w, string_view fmt, const Args&... args)
+{
+ if constexpr (types_count<Args...> > 0)
+ {
+ format_internals::type_erased_arg type_erased_args[] = {
+ format_internals::type_erased_arg(args)...
+ };
+
+ format_internals::format(w, fmt, type_erased_args);
+ }
+ else
+ {
+ format_internals::format(w, fmt, {});
+ }
+}
+
+template<isize_t N>
+void AslFormat(Formatter& f, const char (&str)[N])
+{
+ f.write(string_view(str, N - 1));
+}
+
+void AslFormat(Formatter& f, const char* str);
+
+inline void AslFormat(Formatter& f, string_view sv)
+{
+ f.write(sv);
+}
+
+void AslFormat(Formatter& f, float);
+void AslFormat(Formatter& f, double);
+
+void AslFormat(Formatter& f, bool);
+
+void AslFormat(Formatter& f, uint8_t);
+void AslFormat(Formatter& f, uint16_t);
+void AslFormat(Formatter& f, uint32_t);
+void AslFormat(Formatter& f, uint64_t);
+
+void AslFormat(Formatter& f, int8_t);
+void AslFormat(Formatter& f, int16_t);
+void AslFormat(Formatter& f, int32_t);
+void AslFormat(Formatter& f, int64_t);
+
+string_view format_uint64(uint64_t value, span<char, 20> buffer);
+
+} // namespace asl