diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-23 03:48:06 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-23 03:48:06 +0200 |
| commit | 2eed4954c762bb8050e40798c3d9f1d3998324d1 (patch) | |
| tree | 8848d4345fca4d62c23d1e7136eeff2978c9e6c5 /dev/LibCompiler/PString.h | |
| parent | 8ad58a91a11380203c4a81fe4dc93e7734631b32 (diff) | |
feat!(LibCompiler): Codebase and diagram has been improved.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/LibCompiler/PString.h')
| -rw-r--r-- | dev/LibCompiler/PString.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/dev/LibCompiler/PString.h b/dev/LibCompiler/PString.h new file mode 100644 index 0000000..a54be06 --- /dev/null +++ b/dev/LibCompiler/PString.h @@ -0,0 +1,82 @@ +/* + * ======================================================== + * + * LibCompiler + * Copyright (C) 2024-2025 Amlal El Mahrouss, all rights reserved. + * + * ======================================================== + */ + +#pragma once + +#include <LibCompiler/Defines.h> +#include <LibCompiler/ErrorOr.h> + +namespace LibCompiler { +class StringBuilder; +class PString; + +/** + * @brief PString class, contains a C string and manages it. + * @note No need to manage it it's getting deleted by default. + */ + +class PString final { + public: + explicit PString() = delete; + + explicit PString(SizeType Sz) noexcept : m_Sz(Sz) { + m_Data = new CharType[Sz]; + assert(m_Data); + } + + ~PString() noexcept { + if (m_Data) { + memset(m_Data, 0, m_Sz); + delete[] m_Data; + + m_Data = nullptr; + } + } + + LIBCOMPILER_COPY_DEFAULT(PString); + + CharType* Data(); + const CharType* CData() const; + SizeType Length() const; + + bool operator==(const CharType* rhs) const; + bool operator!=(const CharType* rhs) const; + + bool operator==(const PString& rhs) const; + bool operator!=(const PString& rhs) const; + + PString& operator+=(const CharType* rhs); + PString& operator+=(const PString& rhs); + + operator bool() { return m_Data && m_Data[0] != 0; } + + bool operator!() { return !m_Data || m_Data[0] == 0; } + + private: + CharType* m_Data{nullptr}; + SizeType m_Sz{0}; + SizeType m_Cur{0}; + + friend class StringBuilder; +}; + +/** + * @brief StringBuilder class + * @note These results shall call be delete[] after they're used. + */ +struct StringBuilder final { + static PString Construct(const CharType* data); + static const char* FromInt(const char* fmt, int n); + 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); +}; + +using PStringOr = ErrorOr<PString>; +} // namespace LibCompiler |
