aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/kapi/cio.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-12-15 16:32:34 +0100
committerFelix Morgner <felix.morgner@ost.ch>2025-12-15 16:32:34 +0100
commit0f09b8ff164a69195ec6c25f6aea1cb607d826f8 (patch)
treea59cbf95b3564312ab4dcfebabb2d617b6cdf8ab /kernel/src/kapi/cio.cpp
parent43ddde5e30a0d71aa11025a5ae232cea83e7fbde (diff)
downloadteachos-0f09b8ff164a69195ec6c25f6aea1cb607d826f8.tar.xz
teachos-0f09b8ff164a69195ec6c25f6aea1cb607d826f8.zip
kernel: move implementation to kernel directory
Diffstat (limited to 'kernel/src/kapi/cio.cpp')
-rw-r--r--kernel/src/kapi/cio.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/kernel/src/kapi/cio.cpp b/kernel/src/kapi/cio.cpp
new file mode 100644
index 0000000..66493b6
--- /dev/null
+++ b/kernel/src/kapi/cio.cpp
@@ -0,0 +1,57 @@
+#include "kapi/cio.hpp"
+
+#include <optional>
+#include <string_view>
+#include <utility>
+
+namespace teachos::cio
+{
+ namespace
+ {
+ struct null_device final : public output_device
+ {
+ null_device static instance;
+
+ auto write(std::string_view) -> void override {}
+ auto writeln(std::string_view) -> void override {}
+
+ auto write_error(std::string_view) -> void override {}
+ auto writeln_error(std::string_view) -> void override {}
+ };
+
+ constinit null_device null_device::instance;
+ } // namespace
+
+ // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
+ constinit auto active_device = static_cast<output_device *>(&null_device::instance);
+
+ auto set_output_device(output_device & device) -> std::optional<output_device *>
+ {
+ if (&device == active_device)
+ {
+ return {};
+ }
+ return std::exchange(active_device, &device);
+ }
+
+ auto print(std::string_view text) -> void
+ {
+ active_device->write(text);
+ }
+
+ auto println(std::string_view text) -> void
+ {
+ active_device->writeln(text);
+ }
+
+ auto print_error(std::string_view text) -> void
+ {
+ active_device->write_error(text);
+ }
+
+ auto println_error(std::string_view text) -> void
+ {
+ active_device->writeln_error(text);
+ }
+
+} // namespace teachos::cio \ No newline at end of file