36 #define STRING_IS_PROTECTED 0
45 STRING(
const char *
string);
49 bool Serialize(FILE* fp)
const;
52 bool DeSerialize(
bool swap, FILE* fp);
54 BOOL8 contains(
const char c)
const;
57 const char *string()
const;
60 inT32 len = length() + 1;
61 return strncpy(
new char[len], GetCStr(), len);
64 #if STRING_IS_PROTECTED
65 const char &operator[] (
inT32 index)
const;
67 void insert_range(
inT32 index,
const char*s,
int len);
68 void erase_range(
inT32 index,
int len);
70 char &operator[] (
inT32 index)
const;
73 void truncate_at(
inT32 index);
77 BOOL8 operator!= (
const char *
string)
const;
79 STRING & operator= (
const char *
string);
90 void assign(
const char *cstr,
int len);
96 void add_str_int(
const char* str,
int number);
99 inline void ensure(
inT32 min_capacity) { ensure_cstr(min_capacity); }
102 typedef struct STRING_HEADER {
124 STRING_HEADER* data_;
127 inline STRING_HEADER* GetHeader() {
130 inline const STRING_HEADER* GetHeader()
const {
135 inline char* GetCStr() {
136 return ((
char *)data_) +
sizeof(STRING_HEADER);
139 inline const char* GetCStr()
const {
140 return ((
const char *)data_) +
sizeof(STRING_HEADER);
142 inline bool InvariantOk()
const {
143 #if STRING_IS_PROTECTED
144 return (GetHeader()->used_ == 0) ?
145 (string() ==
NULL) : (GetHeader()->used_ == (strlen(
string()) + 1));
154 char* ensure_cstr(
inT32 min_capacity);
156 void FixHeader()
const;
158 char* AllocData(
int used,
int capacity);