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;