summaryrefslogtreecommitdiff
path: root/asl/io/print.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/io/print.cpp')
-rw-r--r--asl/io/print.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/asl/io/print.cpp b/asl/io/print.cpp
new file mode 100644
index 0000000..0161bd1
--- /dev/null
+++ b/asl/io/print.cpp
@@ -0,0 +1,31 @@
+#include "asl/io/print.hpp"
+
+#include <cstdio>
+
+// @Todo Optimize this, maybe make buffered
+class ConsoleWriter : public asl::Writer
+{
+ FILE* m_handle;
+
+public:
+ explicit ConsoleWriter(FILE* handle)
+ : m_handle{handle}
+ {}
+
+ void write(asl::span<const asl::byte> s) override
+ {
+ fwrite(s.data(), 1, static_cast<size_t>(s.size()), m_handle);
+ }
+};
+
+asl::Writer* asl::print_internals::get_stdout_writer()
+{
+ static ConsoleWriter s_writer{stdout};
+ return &s_writer;
+}
+
+asl::Writer* asl::print_internals::get_stderr_writer()
+{
+ static ConsoleWriter s_writer{stderr};
+ return &s_writer;
+}