#include "kapi/cio.hpp" #include #include #include 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(&null_device::instance); auto set_output_device(output_device & device) -> std::optional { 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