summaryrefslogtreecommitdiffhomepage
path: root/src/CompilerKit/StringKit.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-24 03:05:29 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-11-24 03:05:29 +0100
commitbbe2c77243c541ca7e0075149f5be3262eb89523 (patch)
treeae5d59d299344fd19584a2c3642bacd788e841d4 /src/CompilerKit/StringKit.h
parentb5adf16a96b9cbb80c74cf30404ed5bcff03ac34 (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.h94
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__ */