Devel Lib
CharArray.h
1 #pragma once
2 
3 #include "Core/Global.h"
4 #include "Core/Utils/StringUtils.h"
7 namespace Devel {
40  template<size_t Size>
41  class CCharArray {
42  public:
45  : m_szString{0} {}
46 
49  explicit CCharArray(const char *i_szString) {
50  Devel::StringUtils::ToArray(this->m_szString, i_szString);
51  }
52 
55  explicit CCharArray(const std::string &i_sString) {
56  Devel::StringUtils::ToArray(this->m_szString, i_sString);
57  }
58 
61  CCharArray(std::initializer_list<char> i_oList) {
62  size_t nSize = i_oList.size();
63 
64  if (nSize > Size) {
65  nSize = Size;
66  }
67 
68  Devel::StringUtils::ToArray(this->m_szString, i_oList.begin(), nSize);
69  }
70 
73  CCharArray(const CCharArray<Size> &i_szString) {
74  this->operator=(i_szString);
75  }
76 
79  template<size_t TOtherSize>
80  explicit CCharArray(const CCharArray<TOtherSize> &i_szString) {
81  this->operator=(i_szString);
82  }
83 
85  ~CCharArray() = default;
86 
87  public:
90  void set(const std::string &i_sString) {
91  Devel::StringUtils::ToArray(this->m_szString, i_sString);
92  }
93 
97  void set(const char *i_szString, size_t i_nSize) {
98  Devel::StringUtils::ToArray(this->m_szString, i_szString, i_nSize);
99  }
100 
103  void set(const char *i_szString) {
104  Devel::StringUtils::ToArray(this->m_szString, i_szString);
105  }
106 
109  void set(const CCharArray<Size> &i_szString) {
110  return this->set(i_szString.c_str(), i_szString.length());
111  }
112 
115  template<size_t SizeOther>
116  void set(const CCharArray<SizeOther> &i_szString) {
117  return this->set(i_szString.c_str(), i_szString.length());
118  }
119 
120  public:
122  char *begin() {
123  return &this->first();
124  }
125 
127  [[nodiscard]] const char *begin() const {
128  return &this->first();
129  }
130 
132  char *end() {
133  return &this->first() + Size;
134  }
135 
137  [[nodiscard]] const char *end() const {
138  return &this->first() + Size;
139  }
140 
142  [[nodiscard]] const char *c_str() const {
143  return this->m_szString;
144  }
145 
146  public:
148  [[nodiscard]] size_t length() const {
149  return Devel::StringUtils::Size(this->m_szString, Size);
150  }
151 
153  static constexpr size_t maxLength() {
154  return Size;
155  }
156 
157  public:
159  char &first() {
160  return this->m_szString[0];
161  }
162 
164  [[nodiscard]] const char &first() const {
165  return this->m_szString[0];
166  }
167 
169  char &last() {
170  return this->m_szString[Size - 1];
171  }
172 
174  [[nodiscard]] const char &last() const {
175  return this->m_szString[Size - 1];
176  }
177 
179  char &at(const size_t i_nIndex) {
180  return this->m_szString[i_nIndex];
181  }
182 
184  [[nodiscard]] const char &at(const size_t i_nIndex) const {
185  return this->m_szString[i_nIndex];
186  }
187 
188  public:
190  [[nodiscard]] std::string toStdString() const {
191  return std::string(this->m_szString, this->length());
192  }
193 
194  public:
199  memcpy(this->m_szString, i_szString.c_str(), Size);
200  return *this;
201  }
202 
206  template<size_t TOtherSize>
208  this->set<TOtherSize>(i_szString);
209  return *this;
210  }
211 
215  CCharArray<Size> &operator=(const std::string &i_sString) {
216  this->set(i_sString);
217  return *this;
218  }
219 
223  CCharArray<Size> &operator=(const char *i_szString) {
224  this->set(i_szString);
225  return *this;
226  }
227 
231  bool operator==(const CCharArray<Size> &i_szString) const {
232  return this->compare(i_szString.c_str(), i_szString.length());
233  }
234 
238  template<size_t SizeOther>
239  bool operator==(const CCharArray<SizeOther> &i_szString) const {
240  return this->compare(i_szString.c_str(), i_szString.length());
241  }
242 
246  bool operator==(const char *i_szString) const {
247  return this->compare(i_szString, strlen(i_szString));
248  }
249 
253  bool operator==(const std::string &i_sString) const {
254  return this->compare(i_sString.c_str(), i_sString.length());
255  }
256 
260  bool operator!=(const CCharArray<Size> &i_szString) const {
261  return !this->compare(i_szString.c_str(), i_szString.length());
262  }
263 
267  template<size_t SizeOther>
268  bool operator!=(const CCharArray<SizeOther> &i_szString) const {
269  return !this->compare(i_szString.c_str(), i_szString.length());
270  }
271 
275  bool operator!=(const char *i_szString) const {
276  return !this->compare(i_szString, strlen(i_szString));
277  }
278 
282  bool operator!=(const std::string &i_sString) const {
283  return !this->compare(i_sString.c_str(), i_sString.length());
284  }
285 
287  operator char *() {
288  return &this->m_szString[0];
289  }
290 
292  operator const char *() const {
293  return this->m_szString;
294  }
295 
296  private:
301  bool compare(const char *i_szOther, const size_t i_nLength) const {
302  const size_t nLength = this->length();
303  if (i_nLength != nLength) return false;
304 
305  return (memcmp(this->m_szString, i_szOther, nLength) == 0);
306  }
307 
308  private:
311  char m_szString[Size]{};
312  };
313 }
A class for representing and manipulating a character array.
Definition: CharArray.h:41
char * end()
Definition: CharArray.h:132
void set(const CCharArray< Size > &i_szString)
Set char array data from other CCharArray.
Definition: CharArray.h:109
CCharArray< Size > & operator=(const char *i_szString)
Assigns the contents of a char array to this object.
Definition: CharArray.h:223
void set(const CCharArray< SizeOther > &i_szString)
Set char array data from other CCharArray.
Definition: CharArray.h:116
void set(const char *i_szString, size_t i_nSize)
Set char array data from char pointer.
Definition: CharArray.h:97
bool operator!=(const CCharArray< SizeOther > &i_szString) const
Compare CCharArray object with another for inequality.
Definition: CharArray.h:268
char & at(const size_t i_nIndex)
Definition: CharArray.h:179
~CCharArray()=default
Default destructor.
char & first()
Definition: CharArray.h:159
const char & last() const
Definition: CharArray.h:174
const char * end() const
Definition: CharArray.h:137
void set(const std::string &i_sString)
Set char array data from string.
Definition: CharArray.h:90
CCharArray< Size > & operator=(const CCharArray< TOtherSize > &i_szString)
Assigns the contents of another CCharArray to this object.
Definition: CharArray.h:207
std::string toStdString() const
Definition: CharArray.h:190
bool operator==(const std::string &i_sString) const
Compare CCharArray object with a standard string for equality.
Definition: CharArray.h:253
CCharArray(std::initializer_list< char > i_oList)
Initializer list constructor.
Definition: CharArray.h:61
bool operator==(const char *i_szString) const
Compare CCharArray object with a char array for equality.
Definition: CharArray.h:246
char * begin()
Definition: CharArray.h:122
const char * c_str() const
Definition: CharArray.h:142
const char * begin() const
Definition: CharArray.h:127
const char & at(const size_t i_nIndex) const
Definition: CharArray.h:184
bool operator!=(const std::string &i_sString) const
Compare CCharArray object with a standard string for inequality.
Definition: CharArray.h:282
static constexpr size_t maxLength()
Definition: CharArray.h:153
size_t length() const
Definition: CharArray.h:148
CCharArray(const CCharArray< Size > &i_szString)
Copy constructor.
Definition: CharArray.h:73
bool operator!=(const char *i_szString) const
Compare CCharArray object with a char array for inequality.
Definition: CharArray.h:275
const char & first() const
Definition: CharArray.h:164
CCharArray< Size > & operator=(const std::string &i_sString)
Assigns the contents of a standard string to this object.
Definition: CharArray.h:215
void set(const char *i_szString)
Set char array data from char pointer.
Definition: CharArray.h:103
CCharArray(const std::string &i_sString)
Explicit constructor.
Definition: CharArray.h:55
bool operator==(const CCharArray< SizeOther > &i_szString) const
Compare CCharArray object with another for equality.
Definition: CharArray.h:239
bool operator==(const CCharArray< Size > &i_szString) const
Compare CCharArray object with another for equality.
Definition: CharArray.h:231
CCharArray(const CCharArray< TOtherSize > &i_szString)
Copy constructor.
Definition: CharArray.h:80
CCharArray(const char *i_szString)
Explicit constructor.
Definition: CharArray.h:49
CCharArray()
Default constructor.
Definition: CharArray.h:44
bool operator!=(const CCharArray< Size > &i_szString) const
Compare CCharArray object with another for inequality.
Definition: CharArray.h:260
CCharArray< Size > & operator=(const CCharArray< Size > &i_szString)
Assigns the contents of another CCharArray to this object.
Definition: CharArray.h:198
char & last()
Definition: CharArray.h:169
size_t Size(const char *i_szString, const size_t i_nMaxSize)
Returns the size of the string, up to a maximum size.
Definition: StringUtils.h:332
void ToArray(T &i_pDestination, const char *i_szString, const size_t i_nSize)
Copies a string to a destination array, up to a maximum size.
Definition: StringUtils.h:411
A namespace for development related classes and functions.