diff options
Diffstat (limited to 'dev/kernel/NewKit/KString.h')
| -rw-r--r-- | dev/kernel/NewKit/KString.h | 148 |
1 files changed, 67 insertions, 81 deletions
diff --git a/dev/kernel/NewKit/KString.h b/dev/kernel/NewKit/KString.h index e182fd30..133fe945 100644 --- a/dev/kernel/NewKit/KString.h +++ b/dev/kernel/NewKit/KString.h @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. ------------------------------------------- */ @@ -9,87 +9,73 @@ #include <CompilerKit/CompilerKit.h> #include <NewKit/Defines.h> #include <NewKit/ErrorOr.h> -#include <NewKit/Utils.h> #include <NewKit/KernelPanic.h> +#include <NewKit/Utils.h> #define cMinimumStringSize 8196 -namespace Kernel -{ - /// @brief Kernel string class, not dynamic. - class KString final - { - public: - explicit KString() - { - fDataSz = cMinimumStringSize; - - fData = new Char[fDataSz]; - MUST_PASS(fData); - - rt_set_memory(fData, 0, fDataSz); - } - - explicit KString(SizeT Sz) - : fDataSz(Sz) - { - MUST_PASS(Sz > 1); - - fData = new Char[Sz]; - MUST_PASS(fData); - - rt_set_memory(fData, 0, Sz); - } - - ~KString() - { - if (fData) - { - delete[] fData; - fData = nullptr; - } - } - - NE_COPY_DEFAULT(KString) - - Char* Data(); - const Char* CData() const; - Size Length() const; - - bool operator==(const Char* rhs) const; - bool operator!=(const Char* rhs) const; - - bool operator==(const KString& rhs) const; - bool operator!=(const KString& rhs) const; - - KString& operator+=(const Char* rhs); - KString& operator+=(const KString& rhs); - - operator bool() - { - return fData; - } - - bool operator!() - { - return fData; - } - - private: - Char* fData{nullptr}; - Size fDataSz{0}; - Size fCur{0}; - - friend class KStringBuilder; - }; - - struct KStringBuilder final - { - static ErrorOr<KString> Construct(const Char* data); - static const Char* FromBool(const Char* fmt, bool n); - static const Char* Format(const Char* fmt, const Char* from); - static bool Equals(const Char* lhs, const Char* rhs); - static bool Equals(const Utf16Char* lhs, const Utf16Char* rhs); - static bool Equals(const WideChar* lhs, const WideChar* rhs); - }; -} // namespace Kernel +namespace Kernel { +/// @brief Kernel string class, not dynamic. +class KString final { + public: + explicit KString() { + fDataSz = cMinimumStringSize; + + fData = new Char[fDataSz]; + MUST_PASS(fData); + + rt_set_memory(fData, 0, fDataSz); + } + + explicit KString(SizeT Sz) : fDataSz(Sz) { + MUST_PASS(Sz > 1); + + fData = new Char[Sz]; + MUST_PASS(fData); + + rt_set_memory(fData, 0, Sz); + } + + ~KString() { + if (fData) { + delete[] fData; + fData = nullptr; + } + } + + NE_COPY_DEFAULT(KString) + + Char* Data(); + const Char* CData() const; + Size Length() const; + + bool operator==(const Char* rhs) const; + bool operator!=(const Char* rhs) const; + + bool operator==(const KString& rhs) const; + bool operator!=(const KString& rhs) const; + + KString& operator+=(const Char* rhs); + KString& operator+=(const KString& rhs); + + operator bool() { return fData; } + + bool operator!() { return fData; } + + private: + Char* fData{nullptr}; + Size fDataSz{0}; + Size fCur{0}; + + friend class KStringBuilder; +}; + +struct KStringBuilder final { + static ErrorOr<KString> Construct(const Char* data); + static const Char* FromBool(const Char* fmt, bool n); + static const Char* Format(const Char* fmt, const Char* from); + static bool Equals(const Char* lhs, const Char* rhs); + static bool Equals(const Utf16Char* lhs, const Utf16Char* rhs); + static bool Equals(const WideChar* lhs, const WideChar* rhs); +}; +} // namespace Kernel |
