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