00001
00011 #ifndef DEFINE_H_YSTRING
00012 #define DEFINE_H_YSTRING
00013
00014 #include <basic.h>
00015 #include <bstdlib.h>
00016 #include <errcode.h>
00017 #include <tstring.h>
00018 #include <tctype.h>
00019 #include <tcode.h>
00020 #include <wtstring.h>
00021 #include <mtstring.h>
00022 #include <tlang.h>
00023 #include <btron/tf.h>
00024
00025 struct YStringInstance {
00026 int refcount;
00027 TC *tcstr;
00028 int len;
00029 int bufsize;
00030 int datalen;
00031 int lastzone;
00032 };
00033
00042 class YString {
00043
00044 public:
00046 YString() {
00047 strInstance = NULL;
00048 }
00049
00051 virtual ~YString() {
00052 freeInstance();
00053 }
00054
00056 YString(TC chr, int repeat);
00057
00063 YString(const TC *src) {
00064 strInstance = NULL;
00065 operator=(src);
00066 }
00067
00074 YString(const YString& src) {
00075 strInstance = NULL;
00076 operator=(src);
00077 }
00078
00080
00081
00082 const YString& operator=(const YString& src);
00084
00085
00086 const YString& operator=(const TC* src);
00087
00089
00090
00091 operator const TC*() const;
00092
00094
00095
00096
00097
00098 friend YString concat(const TC* s1, const TC* s2);
00100
00101
00102
00103
00104 friend YString operator+(const YString& s1, const YString& s2);
00106
00107
00108
00109
00110 friend YString operator+(const YString& str, const TC* tcs);
00112
00113
00114
00115
00116 friend YString operator+(const TC* tcs, const YString& str);
00118
00119
00120
00121
00122 friend YString operator+(const YString& str, TC chr);
00124
00125
00126
00127
00128 friend YString operator+(TC chr, const YString& str);
00129
00130
00131
00132
00134
00135
00136
00137 YString left(int ncount);
00139
00140
00141
00142 YString right(int ncount);
00144
00145
00146
00147
00148 YString mid(int st, int num);
00150
00151
00152
00153 YString mid(int st);
00155
00156
00157 W getBufferSize() const;
00159
00160
00161 W countLetter() const {
00162 if (strInstance == NULL) {
00163 return 0;
00164 }
00165 if (strInstance->len < 0){
00166 calcStringInfo();
00167 }
00168 return strInstance->len;
00169 }
00171
00172 void empty();
00174
00175 bool isEmpty() const {
00176 return (countLetter() <= 0);
00177 }
00178
00179 protected:
00180
00181 private:
00183
00184 void calcStringInfo() const;
00186
00187 void freeInstance();
00189
00190 void forceUnique();
00192
00193
00194 YStringInstance* allocNewBuffer(int size);
00196
00197 YStringInstance* strInstance;
00198
00199 };
00200
00201 #endif // DEFINE_H_YSTRING