diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-05-03 18:54:00 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-05-03 18:54:00 +0200 |
| commit | ae3555797c741edc7bac5d464e8f48774663043b (patch) | |
| tree | 97d25d7fbe0063bbaa6fc084bdf499355b610483 /Private | |
| parent | ef6dd2f3715c455e607f479e54f099ea056697ba (diff) | |
MHR-23: Made TerminalDevice even faster.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private')
| -rw-r--r-- | Private/HALKit/AMD64/HalDebugOutput.cxx | 9 | ||||
| -rw-r--r-- | Private/KernelKit/DebugOutput.hpp | 35 |
2 files changed, 30 insertions, 14 deletions
diff --git a/Private/HALKit/AMD64/HalDebugOutput.cxx b/Private/HALKit/AMD64/HalDebugOutput.cxx index 95f6a3ce..87036857 100644 --- a/Private/HALKit/AMD64/HalDebugOutput.cxx +++ b/Private/HALKit/AMD64/HalDebugOutput.cxx @@ -116,10 +116,13 @@ EXTERN_C void ke_io_read(const char* bytes) { #endif // __DEBUG__ } -TerminalDevice TerminalDevice::Shared() noexcept { - TerminalDevice out(NewOS::ke_io_write, NewOS::ke_io_read); +TerminalDevice& TerminalDevice::Shared() noexcept { + static TerminalDevice* out = nullptr; - return out; + if (!out) + out = new TerminalDevice(NewOS::ke_io_write, NewOS::ke_io_read); + + return *out; } } // namespace NewOS diff --git a/Private/KernelKit/DebugOutput.hpp b/Private/KernelKit/DebugOutput.hpp index f6b1b9e1..69455fc2 100644 --- a/Private/KernelKit/DebugOutput.hpp +++ b/Private/KernelKit/DebugOutput.hpp @@ -40,21 +40,34 @@ class TerminalDevice final : public DeviceInterface<const Char *> { NEWOS_COPY_DEFAULT(TerminalDevice); - static TerminalDevice Shared() noexcept; + static TerminalDevice& Shared() noexcept; }; -inline TerminalDevice end_line() { - TerminalDevice selfTerm = TerminalDevice::Shared(); +inline TerminalDevice& end_line() { + TerminalDevice& selfTerm = TerminalDevice::Shared(); selfTerm << "\r"; return selfTerm; } -inline TerminalDevice carriage_return() { - TerminalDevice selfTerm = TerminalDevice::Shared(); +inline TerminalDevice& carriage_return() { + TerminalDevice& selfTerm = TerminalDevice::Shared(); selfTerm << "\r"; return selfTerm; } +inline TerminalDevice& tabulate() { + TerminalDevice& selfTerm = TerminalDevice::Shared(); + selfTerm << "\t"; + return selfTerm; +} + +/// @brief emulate a terminal bell, like the VT100 does. +inline TerminalDevice& bell() { + TerminalDevice& selfTerm = TerminalDevice::Shared(); + selfTerm << "\a"; + return selfTerm; +} + namespace Detail { inline TerminalDevice _write_number(const Long &x, TerminalDevice& term) { UInt64 y = (x > 0 ? x : -x) / 10; @@ -105,8 +118,8 @@ inline TerminalDevice _write_number_hex(const Long &x, TerminalDevice& term) { } } // namespace Detail -inline TerminalDevice hex_number(const Long &x) { - TerminalDevice selfTerm = TerminalDevice::Shared(); +inline TerminalDevice& hex_number(const Long &x) { + TerminalDevice& selfTerm = TerminalDevice::Shared(); selfTerm << "0x"; Detail::_write_number_hex(x, selfTerm); @@ -114,16 +127,16 @@ inline TerminalDevice hex_number(const Long &x) { return selfTerm; } -inline TerminalDevice number(const Long &x) { - TerminalDevice selfTerm = TerminalDevice::Shared(); +inline TerminalDevice& number(const Long &x) { + TerminalDevice& selfTerm = TerminalDevice::Shared(); Detail::_write_number(x, selfTerm); return selfTerm; } -inline TerminalDevice get_console_in(Char* buf) { - TerminalDevice selfTerm = TerminalDevice::Shared(); +inline TerminalDevice& get_console_in(Char* buf) { + TerminalDevice& selfTerm = TerminalDevice::Shared(); selfTerm >> buf; return selfTerm; } |
