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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef QBYTEARRAY_H
00043 #define QBYTEARRAY_H
00044
00045 #include <QtCore/qatomic.h>
00046 #include <QtCore/qnamespace.h>
00047
00048 #include <string.h>
00049 #include <stdarg.h>
00050
00051 #ifdef truncate
00052 #error qbytearray.h must be included before any header file that defines truncate
00053 #endif
00054
00055 QT_BEGIN_HEADER
00056
00057 QT_BEGIN_NAMESPACE
00058
00059 QT_MODULE(Core)
00060
00061
00062
00063
00064
00065 Q_CORE_EXPORT char *qstrdup(const char *);
00066
00067 inline uint qstrlen(const char *str)
00068 { return str ? uint(strlen(str)) : 0; }
00069
00070 inline uint qstrnlen(const char *str, uint maxlen)
00071 {
00072 uint length = 0;
00073 if (str) {
00074 while (length < maxlen && *str++)
00075 length++;
00076 }
00077 return length;
00078 }
00079
00080 Q_CORE_EXPORT char *qstrcpy(char *dst, const char *src);
00081 Q_CORE_EXPORT char *qstrncpy(char *dst, const char *src, uint len);
00082
00083 Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2);
00084 Q_CORE_EXPORT int qstrcmp(const QByteArray &str1, const QByteArray &str2);
00085 Q_CORE_EXPORT int qstrcmp(const QByteArray &str1, const char *str2);
00086 static inline int qstrcmp(const char *str1, const QByteArray &str2)
00087 { return -qstrcmp(str2, str1); }
00088
00089 inline int qstrncmp(const char *str1, const char *str2, uint len)
00090 {
00091 return (str1 && str2) ? strncmp(str1, str2, len)
00092 : (str1 ? 1 : (str2 ? -1 : 0));
00093 }
00094 Q_CORE_EXPORT int qstricmp(const char *, const char *);
00095 Q_CORE_EXPORT int qstrnicmp(const char *, const char *, uint len);
00096
00097
00098 Q_CORE_EXPORT int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap);
00099 Q_CORE_EXPORT int qsnprintf(char *str, size_t n, const char *fmt, ...);
00100
00101 #ifdef QT3_SUPPORT
00102 inline QT3_SUPPORT void *qmemmove(void *dst, const void *src, uint len)
00103 { return memmove(dst, src, len); }
00104 inline QT3_SUPPORT uint cstrlen(const char *str)
00105 { return uint(strlen(str)); }
00106 inline QT3_SUPPORT char *cstrcpy(char *dst, const char *src)
00107 { return qstrcpy(dst,src); }
00108 inline QT3_SUPPORT int cstrcmp(const char *str1, const char *str2)
00109 { return strcmp(str1,str2); }
00110 inline QT3_SUPPORT int cstrncmp(const char *str1, const char *str2, uint len)
00111 { return strncmp(str1,str2,len); }
00112 #endif
00113
00114
00115
00116 Q_CORE_EXPORT quint16 qChecksum(const char *s, uint len);
00117
00118 class QByteRef;
00119 class QString;
00120 class QDataStream;
00121 template <typename T> class QList;
00122
00123 class Q_CORE_EXPORT QByteArray
00124 {
00125 private:
00126 struct Data {
00127 QBasicAtomicInt ref;
00128 int alloc, size;
00129
00130
00131
00132 char *data;
00133 char array[1];
00134 };
00135
00136 public:
00137 inline QByteArray();
00138 QByteArray(const char *);
00139 QByteArray(const char *, int size);
00140 QByteArray(int size, char c);
00141 QByteArray(int size, Qt::Initialization);
00142 inline QByteArray(const QByteArray &);
00143 inline ~QByteArray();
00144
00145 QByteArray &operator=(const QByteArray &);
00146 QByteArray &operator=(const char *str);
00147
00148 inline int size() const;
00149 bool isEmpty() const;
00150 void resize(int size);
00151
00152 QByteArray &fill(char c, int size = -1);
00153
00154 int capacity() const;
00155 void reserve(int size);
00156 void squeeze();
00157
00158 #ifndef QT_NO_CAST_FROM_BYTEARRAY
00159 operator const char *() const;
00160 operator const void *() const;
00161 #endif
00162 char *data();
00163 const char *data() const;
00164 inline const char *constData() const;
00165 inline void detach();
00166 bool isDetached() const;
00167 inline bool isSharedWith(const QByteArray &other) const { return d == other.d; }
00168 void clear();
00169
00170 #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
00171 const char at(int i) const;
00172 const char operator[](int i) const;
00173 const char operator[](uint i) const;
00174 #else
00175 char at(int i) const;
00176 char operator[](int i) const;
00177 char operator[](uint i) const;
00178 #endif
00179 QByteRef operator[](int i);
00180 QByteRef operator[](uint i);
00181
00182 int indexOf(char c, int from = 0) const;
00183 int indexOf(const char *c, int from = 0) const;
00184 int indexOf(const QByteArray &a, int from = 0) const;
00185 int lastIndexOf(char c, int from = -1) const;
00186 int lastIndexOf(const char *c, int from = -1) const;
00187 int lastIndexOf(const QByteArray &a, int from = -1) const;
00188
00189 QBool contains(char c) const;
00190 QBool contains(const char *a) const;
00191 QBool contains(const QByteArray &a) const;
00192 int count(char c) const;
00193 int count(const char *a) const;
00194 int count(const QByteArray &a) const;
00195
00196 QByteArray left(int len) const;
00197 QByteArray right(int len) const;
00198 QByteArray mid(int index, int len = -1) const;
00199
00200 bool startsWith(const QByteArray &a) const;
00201 bool startsWith(char c) const;
00202 bool startsWith(const char *c) const;
00203
00204 bool endsWith(const QByteArray &a) const;
00205 bool endsWith(char c) const;
00206 bool endsWith(const char *c) const;
00207
00208 void truncate(int pos);
00209 void chop(int n);
00210
00211 QByteArray toLower() const;
00212 QByteArray toUpper() const;
00213
00214 QByteArray trimmed() const;
00215 QByteArray simplified() const;
00216 QByteArray leftJustified(int width, char fill = ' ', bool truncate = false) const;
00217 QByteArray rightJustified(int width, char fill = ' ', bool truncate = false) const;
00218
00219 #ifdef QT3_SUPPORT
00220 inline QT3_SUPPORT QByteArray leftJustify(uint width, char aFill = ' ', bool aTruncate = false) const
00221 { return leftJustified(int(width), aFill, aTruncate); }
00222 inline QT3_SUPPORT QByteArray rightJustify(uint width, char aFill = ' ', bool aTruncate = false) const
00223 { return rightJustified(int(width), aFill, aTruncate); }
00224 #endif
00225
00226 QByteArray &prepend(char c);
00227 QByteArray &prepend(const char *s);
00228 QByteArray &prepend(const char *s, int len);
00229 QByteArray &prepend(const QByteArray &a);
00230 QByteArray &append(char c);
00231 QByteArray &append(const char *s);
00232 QByteArray &append(const char *s, int len);
00233 QByteArray &append(const QByteArray &a);
00234 QByteArray &insert(int i, char c);
00235 QByteArray &insert(int i, const char *s);
00236 QByteArray &insert(int i, const char *s, int len);
00237 QByteArray &insert(int i, const QByteArray &a);
00238 QByteArray &remove(int index, int len);
00239 QByteArray &replace(int index, int len, const char *s);
00240 QByteArray &replace(int index, int len, const char *s, int alen);
00241 QByteArray &replace(int index, int len, const QByteArray &s);
00242 QByteArray &replace(char before, const char *after);
00243 QByteArray &replace(char before, const QByteArray &after);
00244 QByteArray &replace(const char *before, const char *after);
00245 QByteArray &replace(const char *before, int bsize, const char *after, int asize);
00246 QByteArray &replace(const QByteArray &before, const QByteArray &after);
00247 QByteArray &replace(const QByteArray &before, const char *after);
00248 QByteArray &replace(const char *before, const QByteArray &after);
00249 QByteArray &replace(char before, char after);
00250 QByteArray &operator+=(char c);
00251 QByteArray &operator+=(const char *s);
00252 QByteArray &operator+=(const QByteArray &a);
00253
00254 QList<QByteArray> split(char sep) const;
00255
00256 QByteArray repeated(int times) const;
00257
00258 #ifndef QT_NO_CAST_TO_ASCII
00259 QT_ASCII_CAST_WARN QByteArray &append(const QString &s);
00260 QT_ASCII_CAST_WARN QByteArray &insert(int i, const QString &s);
00261 QT_ASCII_CAST_WARN QByteArray &replace(const QString &before, const char *after);
00262 QT_ASCII_CAST_WARN QByteArray &replace(char c, const QString &after);
00263 QT_ASCII_CAST_WARN QByteArray &replace(const QString &before, const QByteArray &after);
00264
00265 QT_ASCII_CAST_WARN QByteArray &operator+=(const QString &s);
00266 QT_ASCII_CAST_WARN int indexOf(const QString &s, int from = 0) const;
00267 QT_ASCII_CAST_WARN int lastIndexOf(const QString &s, int from = -1) const;
00268 #endif
00269 #ifndef QT_NO_CAST_FROM_ASCII
00270 inline QT_ASCII_CAST_WARN bool operator==(const QString &s2) const;
00271 inline QT_ASCII_CAST_WARN bool operator!=(const QString &s2) const;
00272 inline QT_ASCII_CAST_WARN bool operator<(const QString &s2) const;
00273 inline QT_ASCII_CAST_WARN bool operator>(const QString &s2) const;
00274 inline QT_ASCII_CAST_WARN bool operator<=(const QString &s2) const;
00275 inline QT_ASCII_CAST_WARN bool operator>=(const QString &s2) const;
00276 #endif
00277
00278 short toShort(bool *ok = 0, int base = 10) const;
00279 ushort toUShort(bool *ok = 0, int base = 10) const;
00280 int toInt(bool *ok = 0, int base = 10) const;
00281 uint toUInt(bool *ok = 0, int base = 10) const;
00282 long toLong(bool *ok = 0, int base = 10) const;
00283 ulong toULong(bool *ok = 0, int base = 10) const;
00284 qlonglong toLongLong(bool *ok = 0, int base = 10) const;
00285 qulonglong toULongLong(bool *ok = 0, int base = 10) const;
00286 float toFloat(bool *ok = 0) const;
00287 double toDouble(bool *ok = 0) const;
00288 QByteArray toBase64() const;
00289 QByteArray toHex() const;
00290 QByteArray toPercentEncoding(const QByteArray &exclude = QByteArray(),
00291 const QByteArray &include = QByteArray(),
00292 char percent = '%') const;
00293
00294 QByteArray &setNum(short, int base = 10);
00295 QByteArray &setNum(ushort, int base = 10);
00296 QByteArray &setNum(int, int base = 10);
00297 QByteArray &setNum(uint, int base = 10);
00298 QByteArray &setNum(qlonglong, int base = 10);
00299 QByteArray &setNum(qulonglong, int base = 10);
00300 QByteArray &setNum(float, char f = 'g', int prec = 6);
00301 QByteArray &setNum(double, char f = 'g', int prec = 6);
00302 QByteArray &setRawData(const char *a, uint n);
00303
00304 static QByteArray number(int, int base = 10);
00305 static QByteArray number(uint, int base = 10);
00306 static QByteArray number(qlonglong, int base = 10);
00307 static QByteArray number(qulonglong, int base = 10);
00308 static QByteArray number(double, char f = 'g', int prec = 6);
00309 static QByteArray fromRawData(const char *, int size);
00310 static QByteArray fromBase64(const QByteArray &base64);
00311 static QByteArray fromHex(const QByteArray &hexEncoded);
00312 static QByteArray fromPercentEncoding(const QByteArray &pctEncoded, char percent = '%');
00313
00314
00315 typedef char *iterator;
00316 typedef const char *const_iterator;
00317 typedef iterator Iterator;
00318 typedef const_iterator ConstIterator;
00319 iterator begin();
00320 const_iterator begin() const;
00321 const_iterator constBegin() const;
00322 iterator end();
00323 const_iterator end() const;
00324 const_iterator constEnd() const;
00325
00326
00327 typedef const char & const_reference;
00328 typedef char & reference;
00329 typedef char value_type;
00330 void push_back(char c);
00331 void push_back(const char *c);
00332 void push_back(const QByteArray &a);
00333 void push_front(char c);
00334 void push_front(const char *c);
00335 void push_front(const QByteArray &a);
00336
00337 inline int count() const { return d->size; }
00338 int length() const { return d->size; }
00339 bool isNull() const;
00340
00341
00342 #ifdef QT3_SUPPORT
00343 QT3_SUPPORT_CONSTRUCTOR QByteArray(int size);
00344 inline QT3_SUPPORT QByteArray& duplicate(const QByteArray& a) { *this = a; return *this; }
00345 inline QT3_SUPPORT QByteArray& duplicate(const char *a, uint n)
00346 { *this = QByteArray(a, n); return *this; }
00347 inline QT3_SUPPORT void resetRawData(const char *, uint) { clear(); }
00348 inline QT3_SUPPORT QByteArray lower() const { return toLower(); }
00349 inline QT3_SUPPORT QByteArray upper() const { return toUpper(); }
00350 inline QT3_SUPPORT QByteArray stripWhiteSpace() const { return trimmed(); }
00351 inline QT3_SUPPORT QByteArray simplifyWhiteSpace() const { return simplified(); }
00352 inline QT3_SUPPORT int find(char c, int from = 0) const { return indexOf(c, from); }
00353 inline QT3_SUPPORT int find(const char *c, int from = 0) const { return indexOf(c, from); }
00354 inline QT3_SUPPORT int find(const QByteArray &ba, int from = 0) const { return indexOf(ba, from); }
00355 inline QT3_SUPPORT int findRev(char c, int from = -1) const { return lastIndexOf(c, from); }
00356 inline QT3_SUPPORT int findRev(const char *c, int from = -1) const { return lastIndexOf(c, from); }
00357 inline QT3_SUPPORT int findRev(const QByteArray &ba, int from = -1) const { return lastIndexOf(ba, from); }
00358 #ifndef QT_NO_CAST_TO_ASCII
00359 QT3_SUPPORT int find(const QString &s, int from = 0) const;
00360 QT3_SUPPORT int findRev(const QString &s, int from = -1) const;
00361 #endif
00362 #endif
00363
00364 private:
00365 operator QNoImplicitBoolCast() const;
00366 static Data shared_null;
00367 static Data shared_empty;
00368 Data *d;
00369 QByteArray(Data *dd, int , int ) : d(dd) {}
00370 void realloc(int alloc);
00371 void expand(int i);
00372 QByteArray nulTerminated() const;
00373
00374 friend class QByteRef;
00375 friend class QString;
00376 friend Q_CORE_EXPORT QByteArray qUncompress(const uchar *data, int nbytes);
00377 public:
00378 typedef Data * DataPtr;
00379 inline DataPtr &data_ptr() { return d; }
00380 };
00381
00382 inline QByteArray::QByteArray(): d(&shared_null) { d->ref.ref(); }
00383 inline QByteArray::~QByteArray() { if (!d->ref.deref()) qFree(d); }
00384 inline int QByteArray::size() const
00385 { return d->size; }
00386
00387 #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
00388 inline const char QByteArray::at(int i) const
00389 { Q_ASSERT(i >= 0 && i < size()); return d->data[i]; }
00390 inline const char QByteArray::operator[](int i) const
00391 { Q_ASSERT(i >= 0 && i < size()); return d->data[i]; }
00392 inline const char QByteArray::operator[](uint i) const
00393 { Q_ASSERT(i < uint(size())); return d->data[i]; }
00394 #else
00395 inline char QByteArray::at(int i) const
00396 { Q_ASSERT(i >= 0 && i < size()); return d->data[i]; }
00397 inline char QByteArray::operator[](int i) const
00398 { Q_ASSERT(i >= 0 && i < size()); return d->data[i]; }
00399 inline char QByteArray::operator[](uint i) const
00400 { Q_ASSERT(i < uint(size())); return d->data[i]; }
00401 #endif
00402
00403 inline bool QByteArray::isEmpty() const
00404 { return d->size == 0; }
00405 #ifndef QT_NO_CAST_FROM_BYTEARRAY
00406 inline QByteArray::operator const char *() const
00407 { return d->data; }
00408 inline QByteArray::operator const void *() const
00409 { return d->data; }
00410 #endif
00411 inline char *QByteArray::data()
00412 { detach(); return d->data; }
00413 inline const char *QByteArray::data() const
00414 { return d->data; }
00415 inline const char *QByteArray::constData() const
00416 { return d->data; }
00417 inline void QByteArray::detach()
00418 { if (d->ref != 1 || d->data != d->array) realloc(d->size); }
00419 inline bool QByteArray::isDetached() const
00420 { return d->ref == 1; }
00421 inline QByteArray::QByteArray(const QByteArray &a) : d(a.d)
00422 { d->ref.ref(); }
00423 #ifdef QT3_SUPPORT
00424 inline QByteArray::QByteArray(int aSize) : d(&shared_null)
00425 { d->ref.ref(); if (aSize > 0) fill('\0', aSize); }
00426 #endif
00427
00428 inline int QByteArray::capacity() const
00429 { return d->alloc; }
00430
00431 inline void QByteArray::reserve(int asize)
00432 { if (d->ref != 1 || asize > d->alloc) realloc(asize); }
00433
00434 inline void QByteArray::squeeze()
00435 { if (d->size < d->alloc) realloc(d->size); }
00436
00437 class Q_CORE_EXPORT QByteRef {
00438 QByteArray &a;
00439 int i;
00440 inline QByteRef(QByteArray &array, int idx)
00441 : a(array),i(idx) {}
00442 friend class QByteArray;
00443 public:
00444 #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
00445 inline operator const char() const
00446 { return i < a.d->size ? a.d->data[i] : char(0); }
00447 #else
00448 inline operator char() const
00449 { return i < a.d->size ? a.d->data[i] : char(0); }
00450 #endif
00451 inline QByteRef &operator=(char c)
00452 { if (i >= a.d->size) a.expand(i); else a.detach();
00453 a.d->data[i] = c; return *this; }
00454 inline QByteRef &operator=(const QByteRef &c)
00455 { if (i >= a.d->size) a.expand(i); else a.detach();
00456 a.d->data[i] = c.a.d->data[c.i]; return *this; }
00457 inline bool operator==(char c) const
00458 { return a.d->data[i] == c; }
00459 inline bool operator!=(char c) const
00460 { return a.d->data[i] != c; }
00461 inline bool operator>(char c) const
00462 { return a.d->data[i] > c; }
00463 inline bool operator>=(char c) const
00464 { return a.d->data[i] >= c; }
00465 inline bool operator<(char c) const
00466 { return a.d->data[i] < c; }
00467 inline bool operator<=(char c) const
00468 { return a.d->data[i] <= c; }
00469 };
00470
00471 inline QByteRef QByteArray::operator[](int i)
00472 { Q_ASSERT(i >= 0); return QByteRef(*this, i); }
00473 inline QByteRef QByteArray::operator[](uint i)
00474 { return QByteRef(*this, i); }
00475 inline QByteArray::iterator QByteArray::begin()
00476 { detach(); return d->data; }
00477 inline QByteArray::const_iterator QByteArray::begin() const
00478 { return d->data; }
00479 inline QByteArray::const_iterator QByteArray::constBegin() const
00480 { return d->data; }
00481 inline QByteArray::iterator QByteArray::end()
00482 { detach(); return d->data + d->size; }
00483 inline QByteArray::const_iterator QByteArray::end() const
00484 { return d->data + d->size; }
00485 inline QByteArray::const_iterator QByteArray::constEnd() const
00486 { return d->data + d->size; }
00487 inline QByteArray &QByteArray::operator+=(char c)
00488 { return append(c); }
00489 inline QByteArray &QByteArray::operator+=(const char *s)
00490 { return append(s); }
00491 inline QByteArray &QByteArray::operator+=(const QByteArray &a)
00492 { return append(a); }
00493 inline void QByteArray::push_back(char c)
00494 { append(c); }
00495 inline void QByteArray::push_back(const char *c)
00496 { append(c); }
00497 inline void QByteArray::push_back(const QByteArray &a)
00498 { append(a); }
00499 inline void QByteArray::push_front(char c)
00500 { prepend(c); }
00501 inline void QByteArray::push_front(const char *c)
00502 { prepend(c); }
00503 inline void QByteArray::push_front(const QByteArray &a)
00504 { prepend(a); }
00505 inline QBool QByteArray::contains(const QByteArray &a) const
00506 { return QBool(indexOf(a) != -1); }
00507 inline QBool QByteArray::contains(char c) const
00508 { return QBool(indexOf(c) != -1); }
00509 inline bool operator==(const QByteArray &a1, const QByteArray &a2)
00510 { return (a1.size() == a2.size()) && (memcmp(a1.constData(), a2.constData(), a1.size())==0); }
00511 inline bool operator==(const QByteArray &a1, const char *a2)
00512 { return a2 ? qstrcmp(a1,a2) == 0 : a1.isEmpty(); }
00513 inline bool operator==(const char *a1, const QByteArray &a2)
00514 { return a1 ? qstrcmp(a1,a2) == 0 : a2.isEmpty(); }
00515 inline bool operator!=(const QByteArray &a1, const QByteArray &a2)
00516 { return !(a1==a2); }
00517 inline bool operator!=(const QByteArray &a1, const char *a2)
00518 { return a2 ? qstrcmp(a1,a2) != 0 : !a1.isEmpty(); }
00519 inline bool operator!=(const char *a1, const QByteArray &a2)
00520 { return a1 ? qstrcmp(a1,a2) != 0 : !a2.isEmpty(); }
00521 inline bool operator<(const QByteArray &a1, const QByteArray &a2)
00522 { return qstrcmp(a1, a2) < 0; }
00523 inline bool operator<(const QByteArray &a1, const char *a2)
00524 { return qstrcmp(a1, a2) < 0; }
00525 inline bool operator<(const char *a1, const QByteArray &a2)
00526 { return qstrcmp(a1, a2) < 0; }
00527 inline bool operator<=(const QByteArray &a1, const QByteArray &a2)
00528 { return qstrcmp(a1, a2) <= 0; }
00529 inline bool operator<=(const QByteArray &a1, const char *a2)
00530 { return qstrcmp(a1, a2) <= 0; }
00531 inline bool operator<=(const char *a1, const QByteArray &a2)
00532 { return qstrcmp(a1, a2) <= 0; }
00533 inline bool operator>(const QByteArray &a1, const QByteArray &a2)
00534 { return qstrcmp(a1, a2) > 0; }
00535 inline bool operator>(const QByteArray &a1, const char *a2)
00536 { return qstrcmp(a1, a2) > 0; }
00537 inline bool operator>(const char *a1, const QByteArray &a2)
00538 { return qstrcmp(a1, a2) > 0; }
00539 inline bool operator>=(const QByteArray &a1, const QByteArray &a2)
00540 { return qstrcmp(a1, a2) >= 0; }
00541 inline bool operator>=(const QByteArray &a1, const char *a2)
00542 { return qstrcmp(a1, a2) >= 0; }
00543 inline bool operator>=(const char *a1, const QByteArray &a2)
00544 { return qstrcmp(a1, a2) >= 0; }
00545 inline const QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
00546 { return QByteArray(a1) += a2; }
00547 inline const QByteArray operator+(const QByteArray &a1, const char *a2)
00548 { return QByteArray(a1) += a2; }
00549 inline const QByteArray operator+(const QByteArray &a1, char a2)
00550 { return QByteArray(a1) += a2; }
00551 inline const QByteArray operator+(const char *a1, const QByteArray &a2)
00552 { return QByteArray(a1) += a2; }
00553 inline const QByteArray operator+(char a1, const QByteArray &a2)
00554 { return QByteArray(&a1, 1) += a2; }
00555 inline QBool QByteArray::contains(const char *c) const
00556 { return QBool(indexOf(c) != -1); }
00557 inline QByteArray &QByteArray::replace(char before, const char *c)
00558 { return replace(&before, 1, c, qstrlen(c)); }
00559 inline QByteArray &QByteArray::replace(const QByteArray &before, const char *c)
00560 { return replace(before.constData(), before.size(), c, qstrlen(c)); }
00561 inline QByteArray &QByteArray::replace(const char *before, const char *after)
00562 { return replace(before, qstrlen(before), after, qstrlen(after)); }
00563
00564 inline QByteArray &QByteArray::setNum(short n, int base)
00565 { return setNum(qlonglong(n), base); }
00566 inline QByteArray &QByteArray::setNum(ushort n, int base)
00567 { return setNum(qulonglong(n), base); }
00568 inline QByteArray &QByteArray::setNum(int n, int base)
00569 { return setNum(qlonglong(n), base); }
00570 inline QByteArray &QByteArray::setNum(uint n, int base)
00571 { return setNum(qulonglong(n), base); }
00572 inline QByteArray &QByteArray::setNum(float n, char f, int prec)
00573 { return setNum(double(n),f,prec); }
00574
00575
00576 #if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
00577 Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QByteArray &);
00578 Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QByteArray &);
00579 #endif
00580
00581 #ifndef QT_NO_COMPRESS
00582 Q_CORE_EXPORT QByteArray qCompress(const uchar* data, int nbytes, int compressionLevel = -1);
00583 Q_CORE_EXPORT QByteArray qUncompress(const uchar* data, int nbytes);
00584 inline QByteArray qCompress(const QByteArray& data, int compressionLevel = -1)
00585 { return qCompress(reinterpret_cast<const uchar *>(data.constData()), data.size(), compressionLevel); }
00586 inline QByteArray qUncompress(const QByteArray& data)
00587 { return qUncompress(reinterpret_cast<const uchar*>(data.constData()), data.size()); }
00588 #endif
00589
00590 Q_DECLARE_TYPEINFO(QByteArray, Q_MOVABLE_TYPE);
00591 Q_DECLARE_SHARED(QByteArray)
00592
00593 QT_END_NAMESPACE
00594
00595 QT_END_HEADER
00596
00597 #endif // QBYTEARRAY_H