1 #ifndef BTLLIB_CSTRING_HPP
2 #define BTLLIB_CSTRING_HPP
12 static const size_t CSTRING_DEFAULT_CAP = 4096;
18 if (cstring.s_size > s_cap) {
19 s = (
char*)std::realloc((
char*)s, cstring.s_size);
20 s_cap = cstring.s_size;
22 s_size = cstring.s_size;
23 memcpy(s, cstring.s, s_size);
28 std::swap(s, cstring.s);
29 s_size = cstring.s_size;
31 std::swap(s_cap, cstring.s_cap);
36 if (str.size() + 1 > s_cap) {
37 s_cap = str.size() + 1;
38 s = (
char*)std::realloc((
char*)s, s_cap);
41 memcpy(s, str.c_str(), s_size + 1);
46 if (
this == &cstring) {
49 if (cstring.s_size > s_cap) {
50 s = (
char*)std::realloc((
char*)s, cstring.s_size);
51 s_cap = cstring.s_size;
53 s_size = cstring.s_size;
54 memcpy(s, cstring.s, s_size);
60 std::swap(s, cstring.s);
61 s_size = cstring.s_size;
63 std::swap(s_cap, cstring.s_cap);
67 CString& operator=(
const std::string& str)
69 if (str.size() + 1 > s_cap) {
70 s_cap = str.size() + 1;
71 s = (
char*)std::realloc((
char*)s, s_cap);
74 memcpy(s, str.c_str(), s_size + 1);
85 bool empty()
const {
return (ssize_t)s_size <= 0; }
86 size_t size()
const {
return s_size; }
88 operator char*()
const {
return s; }
90 char* s = (
char*)std::malloc(CSTRING_DEFAULT_CAP);
92 size_t s_cap = CSTRING_DEFAULT_CAP;