diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-24 03:05:29 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-24 03:05:29 +0100 |
| commit | bbe2c77243c541ca7e0075149f5be3262eb89523 (patch) | |
| tree | ae5d59d299344fd19584a2c3642bacd788e841d4 /src/CompilerKit/StringKit.h | |
| parent | b5adf16a96b9cbb80c74cf30404ed5bcff03ac34 (diff) | |
feat! breaking changes on necti sources.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/CompilerKit/StringKit.h')
| -rw-r--r-- | src/CompilerKit/StringKit.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/CompilerKit/StringKit.h b/src/CompilerKit/StringKit.h new file mode 100644 index 0000000..eb7ccc3 --- /dev/null +++ b/src/CompilerKit/StringKit.h @@ -0,0 +1,94 @@ +/* + * ======================================================== + * + * CompilerKit + * Copyright (C) 2024-2025 Amlal El Mahrouss, Licensed under the Apache 2.0 license. + * + * ======================================================== + */ + +#ifndef __NECTI_STRINGKIT__ +#define __NECTI_STRINGKIT__ + +#include <CompilerKit/Defines.h> +#include <CompilerKit/ErrorOr.h> + +/// =========================================================== /// +/// @file StringKit.h +/// @author Amlal El Mahrouss +/// @brief StringKit for CompilerKit. +/// =========================================================== /// + +namespace CompilerKit { +class StringBuilder; +class BasicString; + +/** + * @brief BasicString class, contains a C string and manages it. + * @note No need to manage it it's getting deleted by default. + */ + +class BasicString final { + public: + explicit BasicString() = delete; + + explicit BasicString(SizeType Sz) noexcept : m_Sz(Sz) { + m_Data = new Char[Sz]; + assert(m_Data); + } + + ~BasicString() noexcept { + if (m_Data) { + memset(m_Data, 0, m_Sz); + delete[] m_Data; + + m_Data = nullptr; + } + } + + NECTI_COPY_DEFAULT(BasicString); + + Char* Data(); + const Char* CData() const; + SizeType Length() const; + + bool operator==(const Char* rhs) const; + bool operator!=(const Char* rhs) const; + + bool operator==(const BasicString& rhs) const; + bool operator!=(const BasicString& rhs) const; + + BasicString& operator+=(const Char* rhs); + BasicString& operator+=(const Char rhs); + BasicString& operator+=(const BasicString& rhs); + + explicit 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 be delete[] after they're used. + */ +struct StringBuilder final { + static BasicString Construct(const Char* data); + static BasicString FromInt(const char* fmt, int n); + static BasicString FromBool(const char* fmt, bool n); + static BasicString Format(const char* fmt, const char* from); + static Bool Equals(const char* lhs, const char* rhs); +}; + +using BasicStringOr = ErrorOr<BasicString>; +using BasicStringPtr = BasicString*; +using BasicStringRef = Ref<BasicString>; +} // namespace CompilerKit + +#endif /* ifndef __NECTI_STRINGKIT__ */ |
