00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _ustr_hpp_
00026 #define _ustr_hpp_
00027
00028 #include <ubit/uelem.hpp>
00029
00030
00038 class UStr: public UElem {
00039 public:
00040 static const unsigned int npos = static_cast<unsigned int>(-1);
00041 static UStr none, newline;
00042
00043
00044
00045 UStr();
00046 UStr(const char*);
00047 UStr(const UStr&);
00048 UStr(const std::string&);
00049 UStr(const UIntgBase&);
00050 UStr(const UFloatBase&);
00056 friend UStr& ustr() {return *new UStr();}
00057 friend UStr& ustr(const char* _s) {return *new UStr(_s);}
00058 friend UStr& ustr(const UStr& _s) {return *new UStr(_s);}
00059 friend UStr& ustr(const std::string& _s) {return *new UStr(_s);}
00061
00062 virtual ~UStr();
00064
00065
00066
00067 virtual void clear();
00069
00070 virtual bool empty() const {return (len == 0);}
00072
00073 int length() const {return len;}
00075
00076 friend std::ostream& operator<<(std::ostream&, const UStr&);
00078
00079
00080
00081 UStr& operator=(const char* s2) {set(s2); return *this;}
00082 UStr& operator=(const UStr& s2) {set(s2); return *this;}
00083 UStr& operator=(const std::string& s2) {set(s2); return *this;}
00084 UStr& operator=(const UIntgBase& v2) {set(v2); return *this;}
00085 UStr& operator=(const UFloatBase& v2) {set(v2); return *this;}
00087
00088
00089
00090
00091
00092
00093 virtual void set(const char* s2);
00094 virtual void set(const UStr& s2);
00095 virtual void set(const std::string& s2);
00096 virtual void set(const UIntgBase& v2);
00097 virtual void set(const UFloatBase& v2);
00098 virtual void setNum(int v2);
00099 virtual void setNum(double v2);
00101
00102
00103
00104 bool operator==(const char* s2) const {return equals(s2);}
00105 bool operator==(const UStr& s2) const {return equals(s2);}
00106 bool operator==(const std::string& s2) const {return equals(s2);}
00107
00108 virtual bool equals(const char*) const;
00109 virtual bool equals(const std::string&) const;
00110 virtual bool equals(const UStr&) const;
00112
00113 virtual int compare(const char*) const;
00114 virtual int compare(const std::string&) const;
00115 virtual int compare(const UStr&) const;
00116
00117 virtual int compareTo(const char*, bool ignore_case = false) const;
00118 virtual int compareTo(const std::string&, bool ignore_case = false) const;
00119 virtual int compareTo(const UStr&, bool ignore_case = false) const;
00125
00126
00127 const char* chars() const {return s;}
00128 const char* c_str() const {return s;}
00130
00131 virtual char charAt(int pos) const;
00132 virtual char at(int pos) const {return charAt(pos);}
00139 virtual char setCharAt(int pos, char c, bool update = true);
00146
00147
00148 virtual bool copyTo(UStr& to, int pos = 0,
00149 unsigned int nbchars = npos) const;
00150 virtual bool copyTo(std::string& to, int pos = 0,
00151 unsigned int nbchars = npos) const;
00159 virtual UStr substring(int from_pos = 0, unsigned int nbchars = npos) const;
00160 virtual std::string toString(int from_pos = 0, unsigned int nbchars = npos) const;
00166 virtual UStr split(int pos, bool delete_char_at_pos = false);
00168
00169 virtual void trim(bool strip_beginning = true, bool strip_end = true);
00170 virtual void strip(bool strip_beginning = true, bool strip_end = true);
00172
00173
00174
00175 int find(char);
00176 int rfind(char);
00177 int find(const char*);
00178 int find(const UStr&);
00179 int find(const std::string&);
00181
00182
00183
00184 friend UStr operator&(const UStr& s1, const UStr& s2);
00185 friend UStr operator&(const UStr& s1, const char* s2);
00186 friend UStr operator&(const char* s1, const UStr& s2);
00187 friend UStr operator&(const UStr& s1, const std::string& s2);
00188 friend UStr operator&(const std::string& s1, const UStr& s2);
00189 friend UStr operator&(const UStr&, int);
00190 friend UStr operator&(const UStr&, float);
00191 friend UStr operator&(const UStr&, const UIntgBase&);
00192 friend UStr operator&(const UStr&, const UFloatBase&);
00201 UStr& operator&=(const UStr& s2) {append(s2); return *this;}
00202 UStr& operator&=(const char* s2) {append(s2); return *this;}
00203 UStr& operator&=(const std::string& s2) {append(s2); return *this;}
00204 UStr& operator&=(int v2) {append(v2); return *this;}
00205 UStr& operator&=(float v2) {append(v2); return *this;}
00206 UStr& operator&=(const UIntgBase& v2) {append(v2); return *this;}
00207 UStr& operator&=(const UFloatBase& v2) {append(v2); return *this;}
00216
00217
00218 virtual void append(char);
00219 virtual void append(const char*);
00220 virtual void append(const char*, unsigned int nbchars);
00221 virtual void append(const UStr&);
00222 virtual void append(const UStr&, unsigned int nbchars);
00223 virtual void append(const std::string&);
00224 virtual void append(const std::string&, unsigned int nbchars);
00225 virtual void append(int);
00226 virtual void append(float);
00227 virtual void append(const UIntgBase&);
00228 virtual void append(const UFloatBase&);
00230
00231
00232
00233 virtual bool insert(int to_pos, char);
00234 virtual bool insert(int to_pos, const char* from,
00235 int from_pos = 0, unsigned int from_nbchars = npos);
00236 virtual bool insert(int to_pos, const UStr& from,
00237 int from_pos = 0, unsigned int from_nbchars = npos);
00238 virtual bool insert(int to_pos, const std::string& from,
00239 int from_pos = 0, unsigned int from_nbchars = npos);
00247
00248
00249 virtual void remove(int pos, unsigned int nbchars);
00256
00257
00258 virtual void replace(int pos, unsigned int nbchars, const UStr&);
00259 virtual void replace(int pos, unsigned int nbchars, const char*);
00260 virtual void replace(int pos, unsigned int nbchars, const std::string&);
00262
00263
00264
00265
00266 virtual UStr getFileName(bool with_suffix = true) const;
00268
00269 virtual UStr getFileSuffix() const;
00271
00272 virtual UStr getFileDir(bool with_final_slash = true) const;
00274
00275 virtual UStr getFilePath(const UStr& new_suffix) const;
00277
00278 virtual long getFileType() const;
00279 virtual long getFileType(bool& is_regular_file, bool& is_directory) const;
00281
00282 virtual bool isFileFound(bool is_regular_file = true) const;
00284
00285 virtual int readFile(const UStr& pathname);
00287
00288 static int readFile(const UStr& filename, std::vector<UStr*>&slist,
00289 bool strip_beg_line = false, bool strip_end_line = false);
00291
00292
00293
00294 virtual void changed(bool update_now);
00303 virtual void update();
00305
00306
00307
00308
00309 #ifndef NO_DOC
00310 UStr(const char*, u_modes bmodes);
00311
00312 virtual class UStr* strCast() {return this;}
00313 virtual void syncVals(char*,int);
00314
00315 virtual void addingTo(class ULink *selflink, UGroup *parent);
00316 virtual void removingFrom(class ULink *selflink, UGroup *parent);
00318
00319 virtual bool checkFormat(int pos, int newchar);
00320 virtual bool checkFormat(int pos, const char*);
00322
00323 virtual bool setImpl(const char*, int len, bool call_callbacks);
00324 virtual bool insertImpl(int to_pos, char newchar, bool upd);
00325 virtual bool insertImpl(int to_pos, const char* s2, int from_pos,
00326 unsigned int from_len, bool upd);
00327 virtual bool replaceImpl(int pos, unsigned int nbchars,
00328 const char* s2, bool upd);
00329
00330
00331 virtual void getSize(class UContext*, u_dim *w, u_dim *h) const;
00332
00333
00334 virtual void getSize(class UContext*, u_dim *w, u_dim *h,
00335 u_dim available_width, int offset,
00336 int *sublen, int *change_line) const;
00337
00338
00339 virtual void paint(class UWinGraph&, class UContext*, const URegion &r) const;
00340
00341
00342 virtual void paint(class UWinGraph&, class UContext*, const URegion &r,
00343 int offset, int cellen) const;
00344 private:
00345 char* s;
00346 int len;
00347 #endif
00348 };
00349
00350
00351
00352 struct CStr {
00353 static char *strdup(const char *s1);
00355
00356 static char *strdupcat(const char *s1, const char *s2);
00358
00359 static char *strdupcat(const char *s1, char sep, const char *s2);
00361
00362 static char *strext(char *pathname);
00363 static const char *strext(const char *pathname);
00369 static void strparse(char* path_name, int path_len,
00370 char*& dir_name, int& dir_len,
00371 char*& base_name, int& base_len,
00372 char*& suffix, int& suffix_len);
00376 };
00377
00378 #endif
00379
00380