23 #ifndef __CLRX_CSTRING_H__
24 #define __CLRX_CSTRING_H__
26 #include <CLRX/Config.h>
32 #include <initializer_list>
66 const size_t n = ::strlen(str);
70 ::memcpy(ptr, str, n);
75 CString(
const std::string& str) : ptr(nullptr)
77 const size_t n = str.size();
81 ::memcpy(ptr, str.c_str(), n);
86 CString(
const char* str,
size_t n) : ptr(nullptr)
91 ::memcpy(ptr, str, n);
96 CString(
const char* str,
const char* end) : ptr(nullptr)
98 const size_t n = end-str;
102 ::memcpy(ptr, str, n);
112 ::memset(ptr, ch, n);
119 const size_t n = cstr.
size();
123 ::memcpy(ptr, cstr.
c_str(), n);
129 { cstr.ptr =
nullptr; }
132 CString(std::initializer_list<char> init) : ptr(nullptr)
134 const size_t n = init.size();
138 std::copy(init.begin(), init.end(), ptr);
148 {
return assign(cstr.ptr); }
152 {
return assign(str.c_str(), str.size()); }
184 size_t length = ::strlen(str);
185 return assign(str, length);
197 char* newPtr =
new char[n+1];
198 ::memcpy(newPtr, str, n);
207 {
return assign(str, end-str); }
218 char* newPtr =
new char[n+1];
219 ::memset(newPtr, ch, n);
229 const size_t n = init.
size();
236 char* newPtr =
new char[n+1];
237 std::copy(init.begin(), init.end(), newPtr);
246 {
return ptr!=
nullptr ? ptr :
""; }
250 {
return ptr!=
nullptr ? ptr :
""; }
267 if (ptr==
nullptr)
return 0;
268 return ::strlen(ptr);
273 if (ptr==
nullptr)
return 0;
274 return ::strlen(ptr);
286 {
return ptr==
nullptr; }
302 { return ::strcmp(
c_str(), str); }
305 int compare(
size_t pos,
size_t n,
const char* str)
const
306 { return ::strncmp(
c_str()+pos, str, n); }
311 const char* th =
c_str();
312 const char* p = ::strchr(th+pos, ch);
313 return (p!=
nullptr) ? p-th :
npos;
319 const char* th =
c_str();
320 const char* p = ::strstr(th+pos, str.
c_str());
321 return (p!=
nullptr) ? p-th :
npos;
327 const char* th =
c_str();
328 const char* p = ::strstr(th+pos, str);
329 return (p!=
nullptr) ? p-th :
npos;
338 { std::swap(ptr, s2.ptr); }
343 { return ::strcmp(s1.
c_str(), s2.
c_str())==0; }
347 { return ::strcmp(s1.
c_str(), s2.
c_str())!=0; }
351 { return ::strcmp(s1.
c_str(), s2.
c_str())<0; }
355 { return ::strcmp(s1.
c_str(), s2.
c_str())>0; }
359 { return ::strcmp(s1.
c_str(), s2.
c_str())<=0; }
363 { return ::strcmp(s1.
c_str(), s2.
c_str())>=0; }
369 { return ::strcmp(s1.
c_str(), s2.c_str())==0; }
373 { return ::strcmp(s1.
c_str(), s2.c_str())!=0; }
377 { return ::strcmp(s1.
c_str(), s2.c_str())<0; }
381 { return ::strcmp(s1.
c_str(), s2.c_str())>0; }
385 { return ::strcmp(s1.
c_str(), s2.c_str())<=0; }
389 { return ::strcmp(s1.
c_str(), s2.c_str())>=0; }
393 { return ::strcmp(s1.c_str(), s2.
c_str())==0; }
397 { return ::strcmp(s1.c_str(), s2.
c_str())!=0; }
401 { return ::strcmp(s1.c_str(), s2.
c_str())<0; }
405 { return ::strcmp(s1.c_str(), s2.
c_str())>0; }
409 { return ::strcmp(s1.c_str(), s2.
c_str())<=0; }
413 { return ::strcmp(s1.c_str(), s2.
c_str())>=0; }
417 { return ::strcmp(s1.
c_str(), s2)==0; }
421 { return ::strcmp(s1.
c_str(), s2)!=0; }
425 { return ::strcmp(s1.
c_str(), s2)<0; }
429 { return ::strcmp(s1.
c_str(), s2)>0; }
433 { return ::strcmp(s1.
c_str(), s2)<=0; }
437 { return ::strcmp(s1.
c_str(), s2)>=0; }
441 { return ::strcmp(s1, s2.
c_str())==0; }
445 { return ::strcmp(s1, s2.
c_str())!=0; }
449 { return ::strcmp(s1, s2.
c_str())<0; }
453 { return ::strcmp(s1, s2.
c_str())>0; }
457 { return ::strcmp(s1, s2.
c_str())<=0; }
461 { return ::strcmp(s1, s2.
c_str())>=0; }
465 {
return os<<cstr.
c_str(); }
476 struct hash<CLRX::CString>
485 for (
const char* p = s1.
c_str(); *p != 0; p++)
486 hash = ((hash<<8)^(cxbyte)*p)*size_t(0xbf146a3dU);
char * iterator
type of iterator
Definition: CString.h:41
CString & operator=(CString &&cstr) noexcept
move-assignment
Definition: CString.h:155
CString(size_t n)
constructor from C-style string pointer
Definition: CString.h:54
CString & operator=(std::initializer_list< char > init)
assignment
Definition: CString.h:172
CString & operator=(char ch)
assignment
Definition: CString.h:168
bool operator>(const CLRX::CString &s1, const CLRX::CString &s2)
greater operator
Definition: CString.h:354
CLRX::CString argument_type
argument type
Definition: CString.h:478
CString(const CString &cstr)
copy-constructor
Definition: CString.h:117
const char * begin() const
return C-style string pointer
Definition: CString.h:249
CString & operator=(const char *str)
assignment
Definition: CString.h:164
char & front()
first character (use only if string is not empty)
Definition: CString.h:293
const char * c_str() const
return C-style string pointer
Definition: CString.h:245
CString(size_t n, char ch)
constructor
Definition: CString.h:107
bool operator!=(const CLRX::CString &s1, const CLRX::CString &s2)
not-equal operator
Definition: CString.h:346
size_type find(char ch, size_t pos=0) const
find character in string
Definition: CString.h:309
bool operator>(const CLRX::CString &s1, const std::string &s2)
greater operator
Definition: CString.h:380
char * begin()
return C-style string pointer
Definition: CString.h:261
void swap(CString &s2) noexcept
swap this string with another
Definition: CString.h:337
CString(const char *str, const char *end)
constructor
Definition: CString.h:96
std::string::size_type size_type
size type
Definition: CString.h:44
size_t operator()(const CLRX::CString &s1) const
a calling operator
Definition: CString.h:482
const char & operator[](size_t i) const
get ith character (use only if string is not empty)
Definition: CString.h:253
const char & front() const
first character (use only if string is not empty)
Definition: CString.h:289
CString(std::initializer_list< char > init)
constructor
Definition: CString.h:132
bool operator>=(const CLRX::CString &s1, const CLRX::CString &s2)
greater or equal operator
Definition: CString.h:362
CString & assign(const char *str)
assign string
Definition: CString.h:176
int compare(size_t pos, size_t n, const char *str) const
compare with string
Definition: CString.h:305
const char * const_iterator
type of constant iterator
Definition: CString.h:42
CString & operator=(const CString &cstr)
copy-assignment
Definition: CString.h:147
CString(const std::string &str)
constructor from C++ std::string
Definition: CString.h:75
char & operator[](size_t i)
get ith character (use only if string is not empty)
Definition: CString.h:257
std::ostream & operator<<(std::ostream &os, const CLRX::CString &cstr)
push to output stream as string
Definition: CString.h:464
bool operator==(const CLRX::CString &s1, const CLRX::CString &s2)
equal operator
Definition: CString.h:342
bool operator<=(const CLRX::CString &s1, const std::string &s2)
less or equal operator
Definition: CString.h:384
int compare(const CString &cstr) const
compare with string
Definition: CString.h:297
bool operator<(const CLRX::CString &s1, const std::string &s2)
less operator
Definition: CString.h:376
static const size_type npos
value to indicate no position
Definition: CString.h:45
bool operator>=(const CLRX::CString &s1, const std::string &s2)
greater or equal operator
Definition: CString.h:388
bool operator<(const CLRX::CString &s1, const CLRX::CString &s2)
less operator
Definition: CString.h:350
CString(const char *str)
constructor from C-style string pointer
Definition: CString.h:62
size_type find(const CString &str, size_t pos=0) const
find string in string
Definition: CString.h:317
CString(const char *str, size_t n)
constructor
Definition: CString.h:86
bool operator<=(const CLRX::CString &s1, const CLRX::CString &s2)
less or equal operator
Definition: CString.h:358
std::size_t result_type
result type
Definition: CString.h:479
size_t length() const
compute size
Definition: CString.h:271
~CString()
destructor
Definition: CString.h:143
CString & assign(std::initializer_list< char > init)
assign string
Definition: CString.h:227
CString & assign(size_t n, char ch)
assign string
Definition: CString.h:210
CString & operator=(const std::string &str)
assignment
Definition: CString.h:151
bool operator!=(const CLRX::CString &s1, const std::string &s2)
not-equal operator
Definition: CString.h:372
CString substr(size_t pos, size_t n) const
make substring from string
Definition: CString.h:333
char element_type
element type
Definition: CString.h:43
CString()
constructor
Definition: CString.h:50
bool operator==(const CLRX::CString &s1, const std::string &s2)
equal operator
Definition: CString.h:368
bool empty() const
return true if string is empty
Definition: CString.h:285
size_t size() const
compute size
Definition: CString.h:265
int compare(const char *str) const
compare with string
Definition: CString.h:301
CString & assign(const char *str, const char *end)
assign string
Definition: CString.h:206
simple C-string container
Definition: CString.h:38
size_type find(const char *str, size_t pos=0) const
find string in string
Definition: CString.h:325
CString(CString &&cstr) noexcept
move-constructor
Definition: CString.h:128
void clear()
clear this string
Definition: CString.h:278
CString & assign(const char *str, size_t n)
assign string
Definition: CString.h:189