00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef skSTRING_H
00024 #define skSTRING_H
00025
00026 #include "skGeneral.h"
00027
00028 #ifdef STREAMS_ENABLED
00029 #include <iostream.h>
00030 #endif
00031
00032
00033 #ifdef UNICODE_STRINGS
00034 typedef wchar_t Char;
00035 #define skSTR(x) L ## x
00036 #else
00037 typedef char Char;
00038 #define skSTR(x) x
00039 #endif
00040
00041 class P_String;
00042
00047 class CLASSEXPORT skString
00048 {
00049 public:
00053 skString();
00057 skString(const Char *);
00061 skString(const skString&);
00067 skString(const Char * buffer, USize len);
00073 skString(const Char repeatChar, USize len);
00077 virtual ~skString();
00081 skString& operator=(const skString&);
00085 skString& operator=(const Char *);
00090 bool operator<(const skString&) const;
00095 bool operator==(const skString&) const;
00100 bool operator==(const Char *) const;
00105 bool operator!=(const skString&) const;
00110 bool operator!=(const Char *) const;
00115 operator const Char * () const;
00120 bool equalsIgnoreCase(const skString&) const;
00124 USize hash() const;
00130 Char at(USize index) const;
00137 skString substr(USize start,USize length) const;
00143 skString substr(USize start) const;
00148 skString operator+(const skString&) const ;
00153 skString& operator+=(const skString&);
00158 USize length() const;
00163 int indexOf(Char c) const;
00167 int to() const;
00171 float toFloat() const;
00175 static skString literal(const Char *);
00179 static skString from(int);
00183 static skString from(USize);
00187 static skString from(float);
00191 static skString from(Char ch);
00195 static skString fromBuffer(Char * buffer);
00199 skString ltrim() const;
00204 static skString readFromFile(const skString& filename);
00209 void writeToFile(const skString& filename);
00210 protected:
00214 skString(P_String *);
00218 skString(const Char * s,int);
00222 void assign(const Char *,int len=0);
00226 void deRef();
00230 P_String * pimp;
00231 };
00232
00233
00234
00235 inline USize hashKey(const skString * s)
00236 {
00237 return s->hash();
00238 }
00239
00240
00241
00242 CLASSEXPORT skString operator+(const Char * s1,const skString& s2);
00243
00244 #ifdef STREAMS_ENABLED
00245
00246
00247
00248 CLASSEXPORT ostream& operator<<(ostream&,const skString&s);
00249 #endif
00250
00251
00252
00253 #define skLITERAL(s) skString s_##s=skString::literal(skSTR(#s))
00254 #define xskLITERAL(s) extern skString s_##s
00255
00256
00257 inline float ATOF(const Char * c){
00258 #ifdef UNICODE_STRINGS
00259 return (float) wcstod(c,0);
00260 #else
00261 return (float) atof(c);
00262 #endif
00263 }
00264 inline int ATOI(const Char * c){
00265 #ifdef UNICODE_STRINGS
00266 return _wtoi(c);
00267 #else
00268 return atoi(c);
00269 #endif
00270 }
00271
00272 #include "skString.inl"
00273
00274 #endif
00275
00276
00277