23 #ifndef __CLRX_CSTRING_H__ 24 #define __CLRX_CSTRING_H__ 32 #include <initializer_list> 45 static const size_type
npos = -1;
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);
156 {
return assign(str.c_str(), str.size()); }
188 size_t length = ::strlen(str);
189 return assign(str, length);
201 char* newPtr =
new char[n+1];
202 ::memcpy(newPtr, str, n);
211 {
return assign(str, end-str); }
222 char* newPtr =
new char[n+1];
223 ::memset(newPtr, ch, n);
233 const size_t n = init.
size();
240 char* newPtr =
new char[n+1];
241 std::copy(init.begin(), init.end(), newPtr);
250 {
return ptr!=
nullptr ? ptr :
""; }
254 {
return ptr!=
nullptr ? ptr :
""; }
271 if (ptr==
nullptr)
return 0;
272 return ::strlen(ptr);
277 if (ptr==
nullptr)
return 0;
278 return ::strlen(ptr);
290 {
return ptr==
nullptr; }
306 { return ::strcmp(
c_str(), str); }
309 int compare(
size_t pos,
size_t n,
const char* str)
const 310 { return ::strncmp(
c_str()+pos, str, n); }
313 size_type
find(
char ch,
size_t pos = 0)
const 315 const char* th =
c_str();
316 const char* p = ::strchr(th+pos, ch);
317 return (p!=
nullptr) ? p-th :
npos;
323 const char* th =
c_str();
324 const char* p = ::strstr(th+pos, str.
c_str());
325 return (p!=
nullptr) ? p-th :
npos;
329 size_type
find(
const char* str,
size_t pos = 0)
const 331 const char* th =
c_str();
332 const char* p = ::strstr(th+pos, str);
333 return (p!=
nullptr) ? p-th :
npos;
342 { std::swap(ptr, s2.ptr); }
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; }
367 { 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.
c_str())>=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.
c_str(), s2)>=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 ::strcmp(s1, s2.
c_str())>=0; }
469 {
return os<<cstr.
c_str(); }
489 for (
const char* p = s1.
c_str(); *p != 0; p++)
490 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:159
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:176
CString & operator=(char ch)
assignment
Definition: CString.h:172
bool operator>(const CLRX::CString &s1, const CLRX::CString &s2)
greater operator
Definition: CString.h:358
CLRX::CString argument_type
argument type
Definition: CString.h:482
CString(const CString &cstr)
copy-constructor
Definition: CString.h:117
const char * begin() const
return C-style string pointer
Definition: CString.h:253
CString & operator=(const char *str)
assignment
Definition: CString.h:168
char & front()
first character (use only if string is not empty)
Definition: CString.h:297
const char * c_str() const
return C-style string pointer
Definition: CString.h:249
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:350
size_type find(char ch, size_t pos=0) const
find character in string
Definition: CString.h:313
char * begin()
return C-style string pointer
Definition: CString.h:265
void swap(CString &s2) noexcept
swap this string with another
Definition: CString.h:341
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:486
const char & operator[](size_t i) const
get ith character (use only if string is not empty)
Definition: CString.h:257
const char & front() const
first character (use only if string is not empty)
Definition: CString.h:293
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:366
CString & assign(const char *str)
assign string
Definition: CString.h:180
int compare(size_t pos, size_t n, const char *str) const
compare with string
Definition: CString.h:309
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:261
unsigned char cxbyte
unsigned byte
Definition: Config.h:213
std::ostream & operator<<(std::ostream &os, const CLRX::CString &cstr)
push to output stream as string
Definition: CString.h:468
main namespace
Definition: AsmDefs.h:38
bool operator==(const CLRX::CString &s1, const CLRX::CString &s2)
equal operator
Definition: CString.h:346
int compare(const CString &cstr) const
compare with string
Definition: CString.h:301
static const size_type npos
value to indicate no position
Definition: CString.h:45
bool operator<(const CLRX::CString &s1, const CLRX::CString &s2)
less operator
Definition: CString.h:354
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:321
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:362
std::size_t result_type
result type
Definition: CString.h:483
size_t length() const
compute size
Definition: CString.h:275
~CString()
destructor
Definition: CString.h:143
CString & assign(std::initializer_list< char > init)
assign string
Definition: CString.h:231
CString & assign(size_t n, char ch)
assign string
Definition: CString.h:214
CString & operator=(const std::string &str)
assignment
Definition: CString.h:155
CString substr(size_t pos, size_t n) const
make substring from string
Definition: CString.h:337
char element_type
element type
Definition: CString.h:43
CString()
constructor
Definition: CString.h:50
bool empty() const
return true if string is empty
Definition: CString.h:289
size_t size() const
compute size
Definition: CString.h:269
int compare(const char *str) const
compare with string
Definition: CString.h:305
CString & assign(const char *str, const char *end)
assign string
Definition: CString.h:210
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:329
CString(CString &&cstr) noexcept
move-constructor
Definition: CString.h:128
void clear()
clear this string
Definition: CString.h:282
CString & assign(const char *str, size_t n)
assign string
Definition: CString.h:193