diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-05-28 21:32:21 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-05-28 21:32:21 +0200 |
| commit | ebab1465b4d42910da1b36d8c65487c2f077b481 (patch) | |
| tree | 22e6d280f7ce56a6c6e156294fdc276c6e27848b /Common/StdKit/String.hpp | |
| parent | 5e49fbae54bd7dcbf2e893acaef699ce9f2587f3 (diff) | |
MHR-21: refactors.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Common/StdKit/String.hpp')
| -rw-r--r-- | Common/StdKit/String.hpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/Common/StdKit/String.hpp b/Common/StdKit/String.hpp new file mode 100644 index 0000000..a05a31c --- /dev/null +++ b/Common/StdKit/String.hpp @@ -0,0 +1,90 @@ +/* + * ======================================================== + * + * CompilerKit + * Copyright SoftwareLabs, all rights reserved. + * + * ======================================================== + */ + +#pragma once + +#include <Common/Defines.hpp> +#include <Common/StdKit/ErrorOr.hpp> + +namespace CompilerKit +{ + /** + * @brief StringView class, contains a C string and manages it. + * @note No need to manage it it's getting deleted by default. + */ + + class StringView final + { + public: + explicit StringView() = delete; + + explicit StringView(SizeType Sz) noexcept + : m_Sz(Sz) + { + m_Data = new char[Sz]; + assert(m_Data); + } + + ~StringView() noexcept + { + if (m_Data) + { + memset(m_Data, 0, m_Sz); + delete[] m_Data; + + m_Data = nullptr; + } + } + + MPCC_COPY_DEFAULT(StringView); + + CharType* Data(); + const CharType* CData() const; + SizeType Length() const; + + bool operator==(const CharType* rhs) const; + bool operator!=(const CharType* rhs) const; + + bool operator==(const StringView& rhs) const; + bool operator!=(const StringView& rhs) const; + + StringView& operator+=(const CharType* rhs); + StringView& operator+=(const StringView& rhs); + + operator bool() + { + return m_Data && m_Data[0] != 0; + } + + bool operator!() + { + return !m_Data || m_Data[0] == 0; + } + + private: + char* m_Data{nullptr}; + SizeType m_Sz{0}; + SizeType m_Cur{0}; + + friend class StringBuilder; + }; + + /** + * @brief StringBuilder class + * @note These results shall call delete[] after they're used. + */ + struct StringBuilder final + { + static StringView 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); + }; +} // namespace CompilerKit |
