summaryrefslogtreecommitdiffhomepage
path: root/Private
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-03 18:54:00 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-03 18:54:00 +0200
commitae3555797c741edc7bac5d464e8f48774663043b (patch)
tree97d25d7fbe0063bbaa6fc084bdf499355b610483 /Private
parentef6dd2f3715c455e607f479e54f099ea056697ba (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.cxx9
-rw-r--r--Private/KernelKit/DebugOutput.hpp35
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;
}