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()); }
190 size_t length = ::strlen(str);
191 return assign(str, length);
204 char* newPtr =
new char[n+1];
205 ::memcpy(newPtr, str, n);
214 {
return assign(str, end-str); }
226 char* newPtr =
new char[n+1];
227 ::memset(newPtr, ch, n);
237 const size_t n = init.
size();
245 char* newPtr =
new char[n+1];
246 std::copy(init.begin(), init.end(), newPtr);
255 {
return ptr!=
nullptr ? ptr :
""; }
259 {
return ptr!=
nullptr ? ptr :
""; }
276 if (ptr==
nullptr)
return 0;
277 return ::strlen(ptr);
282 if (ptr==
nullptr)
return 0;
283 return ::strlen(ptr);
295 {
return ptr==
nullptr; }
311 { return ::strcmp(
c_str(), str); }
314 int compare(
size_t pos,
size_t n,
const char* str)
const 315 { return ::strncmp(
c_str()+pos, str, n); }
318 size_type
find(
char ch,
size_t pos = 0)
const 320 const char* th =
c_str();
321 const char* p = ::strchr(th+pos, ch);
322 return (p!=
nullptr) ? p-th :
npos;
328 const char* th =
c_str();
329 const char* p = ::strstr(th+pos, str.
c_str());
330 return (p!=
nullptr) ? p-th :
npos;
334 size_type
find(
const char* str,
size_t pos = 0)
const 336 const char* th =
c_str();
337 const char* p = ::strstr(th+pos, str);
338 return (p!=
nullptr) ? p-th :
npos;
347 { std::swap(ptr, s2.ptr); }
352 { return ::strcmp(s1.
c_str(), s2.
c_str())==0; }
356 { return ::strcmp(s1.
c_str(), s2.
c_str())!=0; }
360 { return ::strcmp(s1.
c_str(), s2.
c_str())<0; }
364 { return ::strcmp(s1.
c_str(), s2.
c_str())>0; }
368 { return ::strcmp(s1.
c_str(), s2.
c_str())<=0; }
372 { return ::strcmp(s1.
c_str(), s2.
c_str())>=0; }
378 { return ::strcmp(s1.
c_str(), s2.c_str())==0; }
382 { return ::strcmp(s1.
c_str(), s2.c_str())!=0; }
386 { return ::strcmp(s1.
c_str(), s2.c_str())<0; }
390 { return ::strcmp(s1.
c_str(), s2.c_str())>0; }
394 { return ::strcmp(s1.
c_str(), s2.c_str())<=0; }
398 { return ::strcmp(s1.
c_str(), s2.c_str())>=0; }
402 { return ::strcmp(s1.c_str(), s2.
c_str())==0; }
406 { return ::strcmp(s1.c_str(), s2.
c_str())!=0; }
410 { return ::strcmp(s1.c_str(), s2.
c_str())<0; }
414 { return ::strcmp(s1.c_str(), s2.
c_str())>0; }
418 { return ::strcmp(s1.c_str(), s2.
c_str())<=0; }
422 { return ::strcmp(s1.c_str(), s2.
c_str())>=0; }
426 { return ::strcmp(s1.
c_str(), s2)==0; }
430 { return ::strcmp(s1.
c_str(), s2)!=0; }
434 { return ::strcmp(s1.
c_str(), s2)<0; }
438 { return ::strcmp(s1.
c_str(), s2)>0; }
442 { return ::strcmp(s1.
c_str(), s2)<=0; }
446 { return ::strcmp(s1.
c_str(), s2)>=0; }
450 { return ::strcmp(s1, s2.
c_str())==0; }
454 { return ::strcmp(s1, s2.
c_str())!=0; }
458 { return ::strcmp(s1, s2.
c_str())<0; }
462 { return ::strcmp(s1, s2.
c_str())>0; }
466 { return ::strcmp(s1, s2.
c_str())<=0; }
470 { return ::strcmp(s1, s2.
c_str())>=0; }
474 {
return os<<cstr.
c_str(); }
494 for (
const char* p = s1.
c_str(); *p != 0; p++)
495 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:178
CString & operator=(char ch)
assignment
Definition: CString.h:174
bool operator>(const CLRX::CString &s1, const CLRX::CString &s2)
greater operator
Definition: CString.h:363
CLRX::CString argument_type
argument type
Definition: CString.h:487
CString(const CString &cstr)
copy-constructor
Definition: CString.h:117
const char * begin() const
return C-style string pointer
Definition: CString.h:258
CString & operator=(const char *str)
assignment
Definition: CString.h:170
char & front()
first character (use only if string is not empty)
Definition: CString.h:302
const char * c_str() const
return C-style string pointer
Definition: CString.h:254
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:355
size_type find(char ch, size_t pos=0) const
find character in string
Definition: CString.h:318
char * begin()
return C-style string pointer
Definition: CString.h:270
void swap(CString &s2) noexcept
swap this string with another
Definition: CString.h:346
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:491
const char & operator[](size_t i) const
get ith character (use only if string is not empty)
Definition: CString.h:262
const char & front() const
first character (use only if string is not empty)
Definition: CString.h:298
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:371
CString & assign(const char *str)
assign string
Definition: CString.h:182
int compare(size_t pos, size_t n, const char *str) const
compare with string
Definition: CString.h:314
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:266
unsigned char cxbyte
unsigned byte
Definition: Config.h:229
std::ostream & operator<<(std::ostream &os, const CLRX::CString &cstr)
push to output stream as string
Definition: CString.h:473
main namespace
Definition: AsmDefs.h:38
bool operator==(const CLRX::CString &s1, const CLRX::CString &s2)
equal operator
Definition: CString.h:351
int compare(const CString &cstr) const
compare with string
Definition: CString.h:306
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:359
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:326
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:367
std::size_t result_type
result type
Definition: CString.h:488
size_t length() const
compute size
Definition: CString.h:280
~CString()
destructor
Definition: CString.h:143
CString & assign(std::initializer_list< char > init)
assign string
Definition: CString.h:235
CString & assign(size_t n, char ch)
assign string
Definition: CString.h:217
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:342
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:294
size_t size() const
compute size
Definition: CString.h:274
int compare(const char *str) const
compare with string
Definition: CString.h:310
CString & assign(const char *str, const char *end)
assign string
Definition: CString.h:213
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:334
CString(CString &&cstr) noexcept
move-constructor
Definition: CString.h:128
void clear()
clear this string
Definition: CString.h:287
CString & assign(const char *str, size_t n)
assign string
Definition: CString.h:195