diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2025-02-17 00:21:48 +0100 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2025-02-17 22:29:50 +0100 |
commit | a141c401f78467bc15f62882fca5d55a007cacbb (patch) | |
tree | 908ac71a8640f78f45d22c6808c5fa6e373000fa /asl/format.hpp | |
parent | cb77cbe9ce4cddad6a460aa190ff70f0c13e4703 (diff) |
Reorganize everything
Diffstat (limited to 'asl/format.hpp')
-rw-r--r-- | asl/format.hpp | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/asl/format.hpp b/asl/format.hpp deleted file mode 100644 index 70de9b9..0000000 --- a/asl/format.hpp +++ /dev/null @@ -1,109 +0,0 @@ -#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 |