NeKernel dev
Loading...
Searching...
No Matches
KString.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5======================================== */
6
7#pragma once
8
10#include <NeKit/Config.h>
11#include <NeKit/ErrorOr.h>
12#include <NeKit/KernelPanic.h>
13#include <NeKit/Utils.h>
14
15namespace Kernel {
16inline constexpr Int kMinimumStringSize = 8196;
17
19template <typename CharKind = Char, Int MinSz = kMinimumStringSize>
20class KBasicString final {
21 public:
22 explicit KBasicString() {
23 fDataSz = MinSz;
24
25 fData = new CharKind[fDataSz];
27
29 }
30
31 explicit KBasicString(SizeT Sz) : fDataSz(Sz) {
32 MUST_PASS(Sz > 1);
33
34 fData = new CharKind[Sz];
36
37 rt_set_memory(fData, 0, Sz);
38 }
39
41 if (fData) {
42 delete[] fData;
43 fData = nullptr;
44 }
45 }
46
48
49 CharKind* Data();
50 const CharKind* CData() const;
51 Size Length() const;
52
53 bool operator==(const CharKind* rhs) const;
54 bool operator!=(const CharKind* rhs) const;
55
56 bool operator==(const KBasicString<CharKind, MinSz>& rhs) const;
57 bool operator!=(const KBasicString<CharKind, MinSz>& rhs) const;
58
59 KBasicString<CharKind, MinSz>& operator+=(const CharKind* rhs);
61
62 operator const char*() { return fData; }
63
64 explicit operator bool() { return fData; }
65
66 bool operator!() { return fData; }
67
68 private:
69 CharKind* fData{nullptr};
72
73 friend class KStringBuilder;
74};
75
78
79class KStringBuilder final {
80 public:
81 template <typename CharKind = Char, Int MinSz = kMinimumStringSize>
82 static ErrorOr<KBasicString<CharKind, MinSz>> Construct(const CharKind* data);
83 template <typename CharKind = Char>
84 static const CharKind* FromBool(const CharKind* fmt, bool n);
85 template <typename CharKind = Char>
86 static const CharKind* Format(const CharKind* fmt, const CharKind* from);
87 template <typename CharKind = Char>
88 static bool Equals(const CharKind* lhs, const CharKind* rhs);
89};
90} // namespace Kernel
91
92#include <NeKit/KString.inl>
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
#define MUST_PASS(EXPR)
Definition KernelPanic.h:37
ErrorOr class for error handling.
Definition ErrorOr.h:22
Kernel string class, not dynamic.
Definition KString.h:20
Size Length() const
Definition KString.inl:32
CharKind * Data()
Definition KString.inl:22
KBasicString()
Definition KString.h:22
bool operator!=(const CharKind *rhs) const
Definition KString.inl:72
bool operator==(const CharKind *rhs) const
Definition KString.inl:49
KBasicString(SizeT Sz)
Definition KString.h:31
Size fDataSz
Definition KString.h:70
bool operator!()
Definition KString.h:66
Size fCur
Definition KString.h:71
~KBasicString()
Definition KString.h:40
const CharKind * CData() const
Definition KString.inl:27
KBasicString< CharKind, MinSz > & operator+=(const CharKind *rhs)
Definition KString.inl:94
friend class KStringBuilder
Definition KString.h:73
CharKind * fData
Definition KString.h:69
Definition KString.h:79
static const CharKind * FromBool(const CharKind *fmt, bool n)
Definition KString.inl:112
static const CharKind * Format(const CharKind *fmt, const CharKind *from)
Definition KString.inl:152
static bool Equals(const CharKind *lhs, const CharKind *rhs)
Definition KString.inl:142
static ErrorOr< KBasicString< CharKind, MinSz > > Construct(const CharKind *data)
Definition KString.inl:103
UPS inline definitions.
Definition Device.h:12
__SIZE_TYPE__ Size
Definition Config.h:59
__SIZE_TYPE__ SizeT
Definition Config.h:60
constexpr Int kMinimumStringSize
Definition KString.h:16
ErrorOr< KString > KStringOr
Definition KString.h:77
int Int
Definition Config.h:37
KBasicString<> KString
Definition KString.h:76
voidPtr rt_set_memory(voidPtr dst, UInt32 val, Size len)
Definition AsciiUtils.cc:75