ustring.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _KJS_USTRING_H_
00025 #define _KJS_USTRING_H_
00026
00027 #include <kjs/global.h>
00028
00032 namespace DOM {
00033 class DOMString;
00034 };
00035 class KJScript;
00036 class QString;
00037 class QConstString;
00038
00039 namespace KJS {
00040
00041 class UCharReference;
00042 class UString;
00043
00051 struct UChar {
00055 UChar();
00061 UChar(unsigned char h , unsigned char l);
00066 UChar(unsigned short u);
00067 UChar(const UCharReference &c);
00071 unsigned char high() const { return uc >> 8; }
00075 unsigned char low() const { return uc & 0xFF; }
00079 unsigned short unicode() const { return uc; }
00080 public:
00084 UChar toLower() const;
00088 UChar toUpper() const;
00092 static UChar null;
00093 private:
00094 friend class UCharReference;
00095 friend class UString;
00096 friend bool operator==(const UChar &c1, const UChar &c2);
00097 friend bool operator==(const UString& s1, const char *s2);
00098 friend bool operator<(const UString& s1, const UString& s2);
00099
00100 unsigned short uc;
00101 } KJS_PACKED;
00102
00103 inline UChar::UChar() : uc(0) { }
00104 inline UChar::UChar(unsigned char h , unsigned char l) : uc(h << 8 | l) { }
00105 inline UChar::UChar(unsigned short u) : uc(u) { }
00106
00121 class UCharReference {
00122 friend class UString;
00123 UCharReference(UString *s, unsigned int off) : str(s), offset(off) { }
00124 public:
00128 UCharReference& operator=(UChar c);
00132 UCharReference& operator=(char c) { return operator=(UChar(c)); }
00136 unsigned short unicode() const { return ref().unicode(); }
00140 unsigned char low() const { return ref().uc & 0xFF; }
00144 unsigned char high() const { return ref().uc >> 8; }
00148 UChar toLower() const { return ref().toLower(); }
00152 UChar toUpper() const { return ref().toUpper(); }
00153 private:
00154
00155 UCharReference();
00156
00157 UChar& ref() const;
00158 UString *str;
00159 int offset;
00160 };
00161
00165 class CString {
00166 public:
00167 CString() : data(0L) { }
00168 CString(const char *c);
00169 CString(const CString &);
00170
00171 ~CString();
00172
00173 CString &append(const CString &);
00174 CString &operator=(const char *c);
00175 CString &operator=(const CString &);
00176 CString &operator+=(const CString &);
00177
00178 int size() const;
00179 const char *c_str() const { return data; }
00180 private:
00181 char *data;
00182 };
00183
00187 class UString {
00188 friend bool operator==(const UString&, const UString&);
00189 friend class UCharReference;
00193 struct Rep {
00194 friend class UString;
00195 friend bool operator==(const UString&, const UString&);
00196 static Rep *create(UChar *d, int l);
00197 inline UChar *data() const { return dat; }
00198 inline int size() const { return len; }
00199
00200 inline void ref() { rc++; }
00201 inline int deref() { return --rc; }
00202
00203 UChar *dat;
00204 int len;
00205 int rc;
00206 static Rep null;
00207 };
00208
00209 public:
00213 UString();
00217 UString(char c);
00221 UString(const char *c);
00226 UString(const UChar *c, int length);
00233 UString(UChar *c, int length, bool copy);
00237 UString(const UString &);
00245 UString(const QString &);
00249 UString(const DOM::DOMString &);
00254 ~UString();
00255
00259 static UString from(int i);
00263 static UString from(unsigned int u);
00267 static UString from(double d);
00268
00272 UString &append(const UString &);
00273
00277 CString cstring() const;
00285 char *ascii() const;
00289 DOM::DOMString string() const;
00293 QString qstring() const;
00297 QConstString qconststring() const;
00298
00302 UString &operator=(const char *c);
00306 UString &operator=(const UString &);
00310 UString &operator+=(const UString &s);
00311
00315 const UChar* data() const { return rep->data(); }
00319 bool isNull() const { return (rep == &Rep::null); }
00323 bool isEmpty() const { return (!rep->len); }
00331 bool is8Bit() const;
00335 int size() const { return rep->size(); }
00339 UChar operator[](int pos) const;
00343 UCharReference operator[](int pos);
00344
00352 double toDouble(bool tolerant=false) const;
00357 unsigned long toULong(bool *ok = 0L) const;
00361 UString toLower() const;
00365 UString toUpper() const;
00370 int find(const UString &f, int pos = 0) const;
00376 int rfind(const UString &f, int pos) const;
00380 UString substr(int pos = 0, int len = -1) const;
00384 static UString null;
00385 #ifdef KJS_DEBUG_MEM
00386
00389 static void globalClear();
00390 #endif
00391 private:
00392 void attach(Rep *r);
00393 void detach();
00394 void release();
00395 Rep *rep;
00396 };
00397
00398 inline bool operator==(const UChar &c1, const UChar &c2) {
00399 return (c1.uc == c2.uc);
00400 }
00401 bool operator==(const UString& s1, const UString& s2);
00402 inline bool operator!=(const UString& s1, const UString& s2) {
00403 return !KJS::operator==(s1, s2);
00404 }
00405 bool operator<(const UString& s1, const UString& s2);
00406 bool operator==(const UString& s1, const char *s2);
00407 inline bool operator!=(const UString& s1, const char *s2) {
00408 return !KJS::operator==(s1, s2);
00409 }
00410 inline bool operator==(const char *s1, const UString& s2) {
00411 return operator==(s2, s1);
00412 }
00413 inline bool operator!=(const char *s1, const UString& s2) {
00414 return !KJS::operator==(s1, s2);
00415 }
00416 bool operator==(const CString& s1, const CString& s2);
00417 UString operator+(const UString& s1, const UString& s2);
00418
00419 };
00420
00421 #endif
This file is part of the documentation for kdelibs Version 3.1.0.