Faro Engine 0.0.0.b519570 (main)
Loading...
Searching...
No Matches
String.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <algorithm>
4#include <cstdarg>
5#include "../Primitives.hpp"
6#include <string>
7#include "Array.hpp"
8
9namespace Faro
10{
11 class String
12 {
13 typedef char* iterator;
14
15 public:
16 String() { data = ""; }
17 String(String& str) { data = str.data; }
18 String(const String& str) { data = str.data; }
19 String(std::string str) { data = str; }
20 String(char* str) { data = str; }
21 String(const char* str) { data = str; }
22 String(Array<char> stringArray) { data = std::string(stringArray.Data(), stringArray.Size()); }
23 String(const char* str, uint32 length) { data = std::string(str, length); }
24
25 uint32 Length() { return data.size(); }
26
27 void Resize(uint32 size) { data.resize(size); }
28
29 bool Empty() { return Length() == 0; }
30
31 void Erase(uint32 index, uint32 amount = 1) { data.erase(index, amount); }
32
34 {
35 return data.substr(0, Length);
36 }
37
39 {
40 return data.substr(Start, Length);
41 }
42
43 int16 Find(String sub) { size_t pos = data.find(*sub); return pos == std::string::npos ? -1 : pos; }
44
45 void FillToWidth(uint32 width, char fill = ' ')
46 {
47 if (Length() == width) return;
48
49 if (Length() < width)
50 {
51 while (Length() < width) data += fill;
52 }
53 else
54 {
55 data = data.substr(0, width);
56 }
57 }
58
59 void Replace(String search, String replace)
60 {
61 size_t pos = 0;
62 while ((pos = data.find(search.data, pos)) != std::string::npos)
63 {
64 data.replace(pos, search.Length(), replace.data);
65 pos += replace.Length();
66 }
67 }
68
70 {
71 size_t pos = data.find_last_of(*find);
72
73 if (pos == std::string::npos) return -1;
74
75 return pos;
76 }
77
78 void ToLower()
79 {
80 std::transform(data.begin(), data.end(), data.begin(), tolower);
81 }
82
84 {
85 String copy = data;
86 copy.ToLower();
87 return copy;
88 }
89
90 void ToUpper()
91 {
92 std::transform(data.begin(), data.end(), data.begin(), toupper);
93 }
94
96 {
97 String copy = data;
98 copy.ToUpper();
99 return copy;
100 }
101
102 char operator [](int index) const
103 {
104 return data[index];
105 }
106
107 char& operator [](int index)
108 {
109 return data[index];
110 }
111
113 {
114 data += other.data;
115 }
116
117 void operator += (char other)
118 {
119 data += other;
120 }
121
122 bool Equals(String other)
123 {
124 return data == other.data;
125 }
126
127 bool operator <(const String& other) const
128 {
129 return data < other.data;
130 }
131
132 // for loop iteration
133 iterator begin() { return &data[0]; }
134 iterator end() { return &data[Length()]; }
135
136 const char* Data() const { return data.c_str(); }
137
138 const char* operator * () { return data.c_str(); }
139
140 private:
141 std::string data = "";
142 };
143
145 {
146 String res(a);
147 res += b;
148 return res;
149 }
150
151 inline bool operator == (String a, String b)
152 {
153 return a.Equals(b);
154 }
155
156 template<class T>
157 inline String ToString(T value)
158 {
159 return std::to_string(value);
160 }
161
162 template<class T>
163 inline T ParseString(String value)
164 {
165 return std::stoi(value.Data());
166 }
167
168 template<>
169 inline float ParseString<float>(String value)
170 {
171 return std::stof(value.Data());
172 }
173
174 inline String FormatStringVA(String format, va_list args)
175 {
176 int size = std::vsnprintf(nullptr, 0, format.Data(), args) + 1;
177 if (size <= 0) return {};
178 char* buffer = (char*)malloc(size);
179 std::vsnprintf(buffer, size, format.Data(), args);
180 String result(buffer);
181 free(buffer);
182 return result;
183 }
184
185 inline String FormatString(String format, ...)
186 {
187 va_list args;
188 va_start(args, format);
189 String result = FormatStringVA(format, args);
190 va_end(args);
191
192 return result;
193 }
194}
Definition Array.hpp:11
T * Data()
Definition Array.hpp:131
uint32 Size()
Definition Array.hpp:77
Definition String.hpp:12
String(const char *str, uint32 length)
Definition String.hpp:23
iterator end()
Definition String.hpp:134
bool Equals(String other)
Definition String.hpp:122
bool operator<(const String &other) const
Definition String.hpp:127
int16 Find(String sub)
Definition String.hpp:43
int32 FindLastOf(String find)
Definition String.hpp:69
String(char *str)
Definition String.hpp:20
String Upper()
Definition String.hpp:95
void FillToWidth(uint32 width, char fill=' ')
Definition String.hpp:45
String Sub(uint32 Start, uint32 Length)
Definition String.hpp:38
uint32 Length()
Definition String.hpp:25
String()
Definition String.hpp:16
String Lower()
Definition String.hpp:83
String(Array< char > stringArray)
Definition String.hpp:22
void operator+=(String other)
Definition String.hpp:112
void ToUpper()
Definition String.hpp:90
void Erase(uint32 index, uint32 amount=1)
Definition String.hpp:31
String(const String &str)
Definition String.hpp:18
bool Empty()
Definition String.hpp:29
void ToLower()
Definition String.hpp:78
void Resize(uint32 size)
Definition String.hpp:27
String Sub(uint32 Length)
Definition String.hpp:33
const char * Data() const
Definition String.hpp:136
const char * operator*()
Definition String.hpp:138
String(const char *str)
Definition String.hpp:21
String(std::string str)
Definition String.hpp:19
iterator begin()
Definition String.hpp:133
char operator[](int index) const
Definition String.hpp:102
String(String &str)
Definition String.hpp:17
void Replace(String search, String replace)
Definition String.hpp:59
Definition Array.hpp:8
int32_t int32
Definition Primitives.hpp:13
bool operator==(String a, String b)
Definition String.hpp:151
String ToString(T value)
Definition String.hpp:157
String operator+(String a, String b)
Definition String.hpp:144
String FormatStringVA(String format, va_list args)
Definition String.hpp:174
int16_t int16
Definition Primitives.hpp:10
String FormatString(String format,...)
Definition String.hpp:185
uint32_t uint32
Definition Primitives.hpp:12
float ParseString< float >(String value)
Definition String.hpp:169
T ParseString(String value)
Definition String.hpp:163