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);
202 char* newPtr =
new char[n+1];
203 ::memcpy(newPtr, str, n);
212 {
return assign(str, end-str); }
224 char* newPtr =
new char[n+1];
225 ::memset(newPtr, ch, n);
235 const size_t n = init.
size();
243 char* newPtr =
new char[n+1];
244 std::copy(init.begin(), init.end(), newPtr);
253 {
return ptr!=
nullptr ? ptr :
""; }
257 {
return ptr!=
nullptr ? ptr :
""; }
274 if (ptr==
nullptr)
return 0;
275 return ::strlen(ptr);
280 if (ptr==
nullptr)
return 0;
281 return ::strlen(ptr);
293 {
return ptr==
nullptr; }
309 { return ::strcmp(
c_str(), str); }
312 int compare(
size_t pos,
size_t n,
const char* str)
const 313 { return ::strncmp(
c_str()+pos, str, n); }
316 size_type
find(
char ch,
size_t pos = 0)
const 318 const char* th =
c_str();
319 const char* p = ::strchr(th+pos, ch);
320 return (p!=
nullptr) ? p-th :
npos;
326 const char* th =
c_str();
327 const char* p = ::strstr(th+pos, str.
c_str());
328 return (p!=
nullptr) ? p-th :
npos;
332 size_type
find(
const char* str,
size_t pos = 0)
const 334 const char* th =
c_str();
335 const char* p = ::strstr(th+pos, str);
336 return (p!=
nullptr) ? p-th :
npos;
345 { std::swap(ptr, s2.ptr); }
350 { return ::strcmp(s1.
c_str(), s2.
c_str())==0; }
354 { return ::strcmp(s1.
c_str(), s2.
c_str())!=0; }
358 { return ::strcmp(s1.
c_str(), s2.
c_str())<0; }
362 { return ::strcmp(s1.
c_str(), s2.
c_str())>0; }
366 { return ::strcmp(s1.
c_str(), s2.
c_str())<=0; }
370 { return ::strcmp(s1.
c_str(), s2.
c_str())>=0; }
376 { return ::strcmp(s1.
c_str(), s2.c_str())==0; }
380 { return ::strcmp(s1.
c_str(), s2.c_str())!=0; }
384 { return ::strcmp(s1.
c_str(), s2.c_str())<0; }
388 { return ::strcmp(s1.
c_str(), s2.c_str())>0; }
392 { return ::strcmp(s1.
c_str(), s2.c_str())<=0; }
396 { return ::strcmp(s1.
c_str(), s2.c_str())>=0; }
400 { return ::strcmp(s1.c_str(), s2.
c_str())==0; }
404 { return ::strcmp(s1.c_str(), s2.
c_str())!=0; }
408 { return ::strcmp(s1.c_str(), s2.
c_str())<0; }
412 { return ::strcmp(s1.c_str(), s2.
c_str())>0; }
416 { return ::strcmp(s1.c_str(), s2.
c_str())<=0; }
420 { return ::strcmp(s1.c_str(), s2.
c_str())>=0; }
424 { return ::strcmp(s1.
c_str(), s2)==0; }
428 { return ::strcmp(s1.
c_str(), s2)!=0; }
432 { return ::strcmp(s1.
c_str(), s2)<0; }
436 { return ::strcmp(s1.
c_str(), s2)>0; }
440 { return ::strcmp(s1.
c_str(), s2)<=0; }
444 { return ::strcmp(s1.
c_str(), s2)>=0; }
448 { return ::strcmp(s1, s2.
c_str())==0; }
452 { return ::strcmp(s1, s2.
c_str())!=0; }
456 { return ::strcmp(s1, s2.
c_str())<0; }
460 { return ::strcmp(s1, s2.
c_str())>0; }
464 { return ::strcmp(s1, s2.
c_str())<=0; }
468 { return ::strcmp(s1, s2.
c_str())>=0; }
472 {
return os<<cstr.
c_str(); }
492 for (
const char* p = s1.
c_str(); *p != 0; p++)
493 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:361
CLRX::CString argument_type
argument type
Definition: CString.h:485
CString(const CString &cstr)
copy-constructor
Definition: CString.h:117
const char * begin() const
return C-style string pointer
Definition: CString.h:256
CString & operator=(const char *str)
assignment
Definition: CString.h:168
char & front()
first character (use only if string is not empty)
Definition: CString.h:300
const char * c_str() const
return C-style string pointer
Definition: CString.h:252
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:353
size_type find(char ch, size_t pos=0) const
find character in string
Definition: CString.h:316
char * begin()
return C-style string pointer
Definition: CString.h:268
void swap(CString &s2) noexcept
swap this string with another
Definition: CString.h:344
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:489
const char & operator[](size_t i) const
get ith character (use only if string is not empty)
Definition: CString.h:260
const char & front() const
first character (use only if string is not empty)
Definition: CString.h:296
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:369
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:312
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:264
unsigned char cxbyte
unsigned byte
Definition: Config.h:215
std::ostream & operator<<(std::ostream &os, const CLRX::CString &cstr)
push to output stream as string
Definition: CString.h:471
main namespace
Definition: AsmDefs.h:38
bool operator==(const CLRX::CString &s1, const CLRX::CString &s2)
equal operator
Definition: CString.h:349
int compare(const CString &cstr) const
compare with string
Definition: CString.h:304
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:357
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:324
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:365
std::size_t result_type
result type
Definition: CString.h:486
size_t length() const
compute size
Definition: CString.h:278
~CString()
destructor
Definition: CString.h:143
CString & assign(std::initializer_list< char > init)
assign string
Definition: CString.h:233
CString & assign(size_t n, char ch)
assign string
Definition: CString.h:215
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:340
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:292
size_t size() const
compute size
Definition: CString.h:272
int compare(const char *str) const
compare with string
Definition: CString.h:308
CString & assign(const char *str, const char *end)
assign string
Definition: CString.h:211
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:332
CString(CString &&cstr) noexcept
move-constructor
Definition: CString.h:128
void clear()
clear this string
Definition: CString.h:285
CString & assign(const char *str, size_t n)
assign string
Definition: CString.h:193