21static inline int size(
int len) {
24 delta = len < 256 ? 7 : 255;
25 return ((len + 1) + delta) & ~delta;
28inline void GString::resize(
int length1) {
32 s =
new char[size(length1)];
33 }
else if (size(length1) != size(length)) {
34 s1 =
new char[size(length1)];
35 memcpy(s1, s, length + 1);
47GString::GString(
const char *sA) {
55GString::GString(
const char *sA,
int lengthA) {
57 resize(length = lengthA);
58 memcpy(s, sA, length *
sizeof(
char));
62GString::GString(GString *str,
int idx,
int lengthA) {
64 resize(length = lengthA);
65 memcpy(s, str->getCString() + idx, length);
69GString::GString(GString *str) {
71 resize(length = str->getLength());
72 memcpy(s, str->getCString(), length + 1);
75GString::GString(GString *str1, GString *str2) {
76 int n1 = str1->getLength();
77 int n2 = str2->getLength();
80 resize(length = n1 + n2);
81 memcpy(s, str1->getCString(), n1);
82 memcpy(s + n1, str2->getCString(), n2 + 1);
85GString *GString::fromInt(
int x) {
100 while (i > 0 && y > 0) {
101 buf[--i] =
'0' + y % 10;
108 return new GString(buf + i, 24 - i);
115GString *GString::clear() {
116 s[length = 0] =
'\0';
121GString *GString::append(
char c) {
128GString *GString::append(GString *str) {
129 int n = str->getLength();
132 memcpy(s + length, str->getCString(), n + 1);
137GString *GString::append(
const char *str) {
141 memcpy(s + length, str, n + 1);
146GString *GString::append(
const char *str,
int lengthA) {
147 resize(length + lengthA);
148 memcpy(s + length, str, lengthA);
154GString *GString::insert(
int i,
char c) {
158 for (j = length + 1; j > i; --j)
165GString *GString::insert(
int i, GString *str) {
166 int n = str->getLength();
170 for (j = length; j >= i; --j)
172 memcpy(s+i, str->getCString(), n);
177GString *GString::insert(
int i,
const char *str) {
182 for (j = length; j >= i; --j)
189GString *GString::insert(
int i,
const char *str,
int lengthA) {
192 resize(length + lengthA);
193 for (j = length; j >= i; --j)
195 memcpy(s+i, str, lengthA);
200GString *GString::del(
int i,
int n) {
204 if (i + n > length) {
207 for (j = i; j <= length - n; ++j) {
215GString *GString::upperCase() {
218 for (i = 0; i < length; ++i) {
220 s[i] = toupper(s[i]);
225GString *GString::lowerCase() {
228 for (i = 0; i < length; ++i) {
230 s[i] = tolower(s[i]);