summaryrefslogtreecommitdiff
path: root/asl/format.hpp
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-17 00:21:48 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-17 22:29:50 +0100
commita141c401f78467bc15f62882fca5d55a007cacbb (patch)
tree908ac71a8640f78f45d22c6808c5fa6e373000fa /asl/format.hpp
parentcb77cbe9ce4cddad6a460aa190ff70f0c13e4703 (diff)
Reorganize everything
Diffstat (limited to 'asl/format.hpp')
-rw-r--r--asl/format.hpp109
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