qbytearray.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:23k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtCore module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QBYTEARRAY_H
  38. #define QBYTEARRAY_H
  39. #include <QtCore/qglobal.h>
  40. #include <QtCore/qatomic.h>
  41. #include <string.h>
  42. #include <stdarg.h>
  43. #ifdef truncate
  44. #error qbytearray.h must be included before any header file that defines truncate
  45. #endif
  46. QT_BEGIN_HEADER
  47. QT_BEGIN_NAMESPACE
  48. QT_MODULE(Core)
  49. /*****************************************************************************
  50.   Safe and portable C string functions; extensions to standard string.h
  51.  *****************************************************************************/
  52. Q_CORE_EXPORT char *qstrdup(const char *);
  53. inline uint qstrlen(const char *str)
  54. { return str ? uint(strlen(str)) : 0; }
  55. inline uint qstrnlen(const char *str, uint maxlen)
  56. {
  57.     uint length = 0;
  58.     if (str) {
  59.         while (length < maxlen && *str++)
  60.             length++;
  61.     }
  62.     return length;
  63. }
  64. Q_CORE_EXPORT char *qstrcpy(char *dst, const char *src);
  65. Q_CORE_EXPORT char *qstrncpy(char *dst, const char *src, uint len);
  66. Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2);
  67. Q_CORE_EXPORT int qstrcmp(const QByteArray &str1, const QByteArray &str2);
  68. Q_CORE_EXPORT int qstrcmp(const QByteArray &str1, const char *str2);
  69. static inline int qstrcmp(const char *str1, const QByteArray &str2)
  70. { return -qstrcmp(str2, str1); }
  71. inline int qstrncmp(const char *str1, const char *str2, uint len)
  72. {
  73.     return (str1 && str2) ? strncmp(str1, str2, len)
  74.         : (str1 ? 1 : (str2 ? -1 : 0));
  75. }
  76. Q_CORE_EXPORT int qstricmp(const char *, const char *);
  77. Q_CORE_EXPORT int qstrnicmp(const char *, const char *, uint len);
  78. // implemented in qvsnprintf.cpp
  79. Q_CORE_EXPORT int qvsnprintf(char *str, size_t n, const char *fmt, va_list ap);
  80. Q_CORE_EXPORT int qsnprintf(char *str, size_t n, const char *fmt, ...);
  81. #ifdef QT3_SUPPORT
  82. inline QT3_SUPPORT void *qmemmove(void *dst, const void *src, uint len)
  83. { return memmove(dst, src, len); }
  84. inline QT3_SUPPORT uint cstrlen(const char *str)
  85. { return uint(strlen(str)); }
  86. inline QT3_SUPPORT char *cstrcpy(char *dst, const char *src)
  87. { return qstrcpy(dst,src); }
  88. inline QT3_SUPPORT int cstrcmp(const char *str1, const char *str2)
  89. { return strcmp(str1,str2); }
  90. inline QT3_SUPPORT int cstrncmp(const char *str1, const char *str2, uint len)
  91. { return strncmp(str1,str2,len); }
  92. #endif
  93. // qChecksum: Internet checksum
  94. Q_CORE_EXPORT quint16 qChecksum(const char *s, uint len);
  95. class QByteRef;
  96. class QString;
  97. class QDataStream;
  98. template <typename T> class QList;
  99. class Q_CORE_EXPORT QByteArray
  100. {
  101. public:
  102.     inline QByteArray();
  103.     QByteArray(const char *);
  104.     QByteArray(const char *, int size);
  105.     QByteArray(int size, char c);
  106.     inline QByteArray(const QByteArray &);
  107.     inline ~QByteArray();
  108.     QByteArray &operator=(const QByteArray &);
  109.     QByteArray &operator=(const char *str);
  110.     inline int size() const;
  111.     bool isEmpty() const;
  112.     void resize(int size);
  113.     QByteArray &fill(char c, int size = -1);
  114.     int capacity() const;
  115.     void reserve(int size);
  116.     void squeeze();
  117.     operator const char *() const;
  118.     operator const void *() const;
  119.     char *data();
  120.     const char *data() const;
  121.     inline const char *constData() const;
  122.     inline void detach();
  123.     bool isDetached() const;
  124.     void clear();
  125. #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
  126.     const char at(int i) const;
  127.     const char operator[](int i) const;
  128.     const char operator[](uint i) const;
  129. #else
  130.     char at(int i) const;
  131.     char operator[](int i) const;
  132.     char operator[](uint i) const;
  133. #endif
  134.     QByteRef operator[](int i);
  135.     QByteRef operator[](uint i);
  136.     int indexOf(char c, int from = 0) const;
  137.     inline int indexOf(const char *c, int from = 0) const;
  138.     int indexOf(const QByteArray &a, int from = 0) const;
  139.     int lastIndexOf(char c, int from = -1) const;
  140.     inline int lastIndexOf(const char *c, int from = -1) const;
  141.     int lastIndexOf(const QByteArray &a, int from = -1) const;
  142.     QBool contains(char c) const;
  143.     QBool contains(const char *a) const;
  144.     QBool contains(const QByteArray &a) const;
  145.     int count(char c) const;
  146.     int count(const char *a) const;
  147.     int count(const QByteArray &a) const;
  148.     QByteArray left(int len) const;
  149.     QByteArray right(int len) const;
  150.     QByteArray mid(int index, int len = -1) const;
  151.     bool startsWith(const QByteArray &a) const;
  152.     bool startsWith(char c) const;
  153.     bool startsWith(const char *c) const;
  154.     bool endsWith(const QByteArray &a) const;
  155.     bool endsWith(char c) const;
  156.     bool endsWith(const char *c) const;
  157.     void truncate(int pos);
  158.     void chop(int n);
  159.     QByteArray toLower() const;
  160.     QByteArray toUpper() const;
  161.     QByteArray trimmed() const;
  162.     QByteArray simplified() const;
  163.     QByteArray leftJustified(int width, char fill = ' ', bool truncate = false) const;
  164.     QByteArray rightJustified(int width, char fill = ' ', bool truncate = false) const;
  165. #ifdef QT3_SUPPORT
  166.     inline QT3_SUPPORT QByteArray leftJustify(uint width, char aFill = ' ', bool aTruncate = false) const
  167.     { return leftJustified(int(width), aFill, aTruncate); }
  168.     inline QT3_SUPPORT QByteArray rightJustify(uint width, char aFill = ' ', bool aTruncate = false) const
  169.     { return rightJustified(int(width), aFill, aTruncate); }
  170. #endif
  171.     QByteArray &prepend(char c);
  172.     QByteArray &prepend(const char *s);
  173.     QByteArray &prepend(const QByteArray &a);
  174.     QByteArray &append(char c);
  175.     QByteArray &append(const char *s);
  176.     QByteArray &append(const QByteArray &a);
  177.     QByteArray &insert(int i, char c);
  178.     QByteArray &insert(int i, const char *s);
  179.     QByteArray &insert(int i, const QByteArray &a);
  180.     QByteArray &remove(int index, int len);
  181.     QByteArray &replace(int index, int len, const char *s);
  182.     QByteArray &replace(int index, int len, const QByteArray &s);
  183.     QByteArray &replace(char before, const char *after);
  184.     QByteArray &replace(char before, const QByteArray &after);
  185.     QByteArray &replace(const char *before, const char *after);
  186.     QByteArray &replace(const QByteArray &before, const QByteArray &after);
  187.     QByteArray &replace(const QByteArray &before, const char *after);
  188.     QByteArray &replace(const char *before, const QByteArray &after);
  189.     QByteArray &replace(char before, char after);
  190.     QByteArray &operator+=(char c);
  191.     QByteArray &operator+=(const char *s);
  192.     QByteArray &operator+=(const QByteArray &a);
  193.     QList<QByteArray> split(char sep) const;
  194. #ifndef QT_NO_CAST_TO_ASCII
  195.     QT_ASCII_CAST_WARN QByteArray &append(const QString &s);
  196.     QT_ASCII_CAST_WARN QByteArray &insert(int i, const QString &s);
  197.     QT_ASCII_CAST_WARN QByteArray &replace(const QString &before, const char *after);
  198.     QT_ASCII_CAST_WARN QByteArray &replace(char c, const QString &after);
  199.     QT_ASCII_CAST_WARN QByteArray &replace(const QString &before, const QByteArray &after);
  200.     QT_ASCII_CAST_WARN QByteArray &operator+=(const QString &s);
  201.     QT_ASCII_CAST_WARN int indexOf(const QString &s, int from = 0) const;
  202.     QT_ASCII_CAST_WARN int lastIndexOf(const QString &s, int from = -1) const;
  203. #endif
  204. #ifndef QT_NO_CAST_FROM_ASCII
  205.     inline QT_ASCII_CAST_WARN bool operator==(const QString &s2) const;
  206.     inline QT_ASCII_CAST_WARN bool operator!=(const QString &s2) const;
  207.     inline QT_ASCII_CAST_WARN bool operator<(const QString &s2) const;
  208.     inline QT_ASCII_CAST_WARN bool operator>(const QString &s2) const;
  209.     inline QT_ASCII_CAST_WARN bool operator<=(const QString &s2) const;
  210.     inline QT_ASCII_CAST_WARN bool operator>=(const QString &s2) const;
  211. #endif
  212.     short toShort(bool *ok = 0, int base = 10) const;
  213.     ushort toUShort(bool *ok = 0, int base = 10) const;
  214.     int toInt(bool *ok = 0, int base = 10) const;
  215.     uint toUInt(bool *ok = 0, int base = 10) const;
  216.     long toLong(bool *ok = 0, int base = 10) const;
  217.     ulong toULong(bool *ok = 0, int base = 10) const;
  218.     qlonglong toLongLong(bool *ok = 0, int base = 10) const;
  219.     qulonglong toULongLong(bool *ok = 0, int base = 10) const;
  220.     float toFloat(bool *ok = 0) const;
  221.     double toDouble(bool *ok = 0) const;
  222.     QByteArray toBase64() const;
  223.     QByteArray toHex() const;
  224.     QByteArray toPercentEncoding(const QByteArray &exclude = QByteArray(),
  225.                                  const QByteArray &include = QByteArray(),
  226.                                  char percent = '%') const;
  227.     QByteArray &setNum(short, int base = 10);
  228.     QByteArray &setNum(ushort, int base = 10);
  229.     QByteArray &setNum(int, int base = 10);
  230.     QByteArray &setNum(uint, int base = 10);
  231.     QByteArray &setNum(qlonglong, int base = 10);
  232.     QByteArray &setNum(qulonglong, int base = 10);
  233.     QByteArray &setNum(float, char f = 'g', int prec = 6);
  234.     QByteArray &setNum(double, char f = 'g', int prec = 6);
  235.     static QByteArray number(int, int base = 10);
  236.     static QByteArray number(uint, int base = 10);
  237.     static QByteArray number(qlonglong, int base = 10);
  238.     static QByteArray number(qulonglong, int base = 10);
  239.     static QByteArray number(double, char f = 'g', int prec = 6);
  240.     static QByteArray fromRawData(const char *, int size);
  241.     static QByteArray fromBase64(const QByteArray &base64);
  242.     static QByteArray fromHex(const QByteArray &hexEncoded);
  243.     static QByteArray fromPercentEncoding(const QByteArray &pctEncoded, char percent = '%');
  244.     typedef char *iterator;
  245.     typedef const char *const_iterator;
  246.     typedef iterator Iterator;
  247.     typedef const_iterator ConstIterator;
  248.     iterator begin();
  249.     const_iterator begin() const;
  250.     const_iterator constBegin() const;
  251.     iterator end();
  252.     const_iterator end() const;
  253.     const_iterator constEnd() const;
  254.     // stl compatibility
  255.     typedef const char & const_reference;
  256.     typedef char & reference;
  257.     void push_back(char c);
  258.     void push_back(const char *c);
  259.     void push_back(const QByteArray &a);
  260.     void push_front(char c);
  261.     void push_front(const char *c);
  262.     void push_front(const QByteArray &a);
  263.     inline int count() const { return d->size; }
  264.     int length() const { return d->size; }
  265.     bool isNull() const;
  266.     // compatibility
  267. #ifdef QT3_SUPPORT
  268.     QT3_SUPPORT_CONSTRUCTOR QByteArray(int size);
  269.     inline QT3_SUPPORT QByteArray& duplicate(const QByteArray& a) { *this = a; return *this; }
  270.     inline QT3_SUPPORT QByteArray& duplicate(const char *a, uint n)
  271.     { *this = QByteArray(a, n); return *this; }
  272.     inline QT3_SUPPORT QByteArray& setRawData(const char *a, uint n)
  273.     { *this = fromRawData(a, n); return *this; }
  274.     inline QT3_SUPPORT void resetRawData(const char *, uint) { clear(); }
  275.     inline QT3_SUPPORT QByteArray lower() const { return toLower(); }
  276.     inline QT3_SUPPORT QByteArray upper() const { return toUpper(); }
  277.     inline QT3_SUPPORT QByteArray stripWhiteSpace() const { return trimmed(); }
  278.     inline QT3_SUPPORT QByteArray simplifyWhiteSpace() const { return simplified(); }
  279.     inline QT3_SUPPORT int find(char c, int from = 0) const { return indexOf(c, from); }
  280.     inline QT3_SUPPORT int find(const char *c, int from = 0) const { return indexOf(c, from); }
  281.     inline QT3_SUPPORT int find(const QByteArray &ba, int from = 0) const { return indexOf(ba, from); }
  282.     inline QT3_SUPPORT int findRev(char c, int from = -1) const { return lastIndexOf(c, from); }
  283.     inline QT3_SUPPORT int findRev(const char *c, int from = -1) const { return lastIndexOf(c, from); }
  284.     inline QT3_SUPPORT int findRev(const QByteArray &ba, int from = -1) const { return lastIndexOf(ba, from); }
  285. #ifndef QT_NO_CAST_TO_ASCII
  286.     QT3_SUPPORT int find(const QString &s, int from = 0) const;
  287.     QT3_SUPPORT int findRev(const QString &s, int from = -1) const;
  288. #endif
  289. #endif
  290. private:
  291.     operator QNoImplicitBoolCast() const;
  292.     struct Data {
  293.         QBasicAtomicInt ref;
  294.         int alloc, size;
  295. // ### Qt 5.0: We need to add the missing capacity bit
  296. // (like other tool classes have), to maintain the
  297. // reserved memory on resize.
  298.         char *data;
  299.         char array[1];
  300.     };
  301.     static Data shared_null;
  302.     static Data shared_empty;
  303.     Data *d;
  304.     QByteArray(Data *dd, int /*dummy*/, int /*dummy*/) : d(dd) {}
  305.     void realloc(int alloc);
  306.     void expand(int i);
  307.     friend class QByteRef;
  308.     friend class QString;
  309. public:
  310.     typedef Data * DataPtr;
  311.     inline DataPtr &data_ptr() { return d; }
  312. };
  313. inline QByteArray::QByteArray(): d(&shared_null) { d->ref.ref(); }
  314. inline QByteArray::~QByteArray() { if (!d->ref.deref()) qFree(d); }
  315. inline int QByteArray::size() const
  316. { return d->size; }
  317. #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
  318. inline const char QByteArray::at(int i) const
  319. { Q_ASSERT(i >= 0 && i < size()); return d->data[i]; }
  320. inline const char QByteArray::operator[](int i) const
  321. { Q_ASSERT(i >= 0 && i < size()); return d->data[i]; }
  322. inline const char QByteArray::operator[](uint i) const
  323. { Q_ASSERT(i < uint(size())); return d->data[i]; }
  324. #else
  325. inline char QByteArray::at(int i) const
  326. { Q_ASSERT(i >= 0 && i < size()); return d->data[i]; }
  327. inline char QByteArray::operator[](int i) const
  328. { Q_ASSERT(i >= 0 && i < size()); return d->data[i]; }
  329. inline char QByteArray::operator[](uint i) const
  330. { Q_ASSERT(i < uint(size())); return d->data[i]; }
  331. #endif
  332. inline bool QByteArray::isEmpty() const
  333. { return d->size == 0; }
  334. inline QByteArray::operator const char *() const
  335. { return d->data; }
  336. inline QByteArray::operator const void *() const
  337. { return d->data; }
  338. inline char *QByteArray::data()
  339. { detach(); return d->data; }
  340. inline const char *QByteArray::data() const
  341. { return d->data; }
  342. inline const char *QByteArray::constData() const
  343. { return d->data; }
  344. inline void QByteArray::detach()
  345. { if (d->ref != 1 || d->data != d->array) realloc(d->size); }
  346. inline bool QByteArray::isDetached() const
  347. { return d->ref == 1; }
  348. inline QByteArray::QByteArray(const QByteArray &a) : d(a.d)
  349. { d->ref.ref(); }
  350. #ifdef QT3_SUPPORT
  351. inline QByteArray::QByteArray(int aSize) : d(&shared_null)
  352. { d->ref.ref(); if (aSize > 0) fill('', aSize); }
  353. #endif
  354. inline int QByteArray::capacity() const
  355. { return d->alloc; }
  356. inline void QByteArray::reserve(int asize)
  357. { if (d->ref != 1 || asize > d->alloc) realloc(asize); }
  358. inline void QByteArray::squeeze()
  359. { if (d->size < d->alloc) realloc(d->size); }
  360. class Q_CORE_EXPORT QByteRef {
  361.     QByteArray &a;
  362.     int i;
  363.     inline QByteRef(QByteArray &array, int idx)
  364.         : a(array),i(idx) {}
  365.     friend class QByteArray;
  366. public:
  367. #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
  368.     inline operator const char() const
  369.         { return i < a.d->size ? a.d->data[i] : 0; }
  370. #else
  371.     inline operator char() const
  372.         { return i < a.d->size ? a.d->data[i] : 0; }
  373. #endif
  374.     inline QByteRef &operator=(char c)
  375.         { if (a.d->ref != 1 || i >= a.d->size) a.expand(i);
  376.           a.d->data[i] = c;  return *this; }
  377.     inline QByteRef &operator=(const QByteRef &c)
  378.         { if (a.d->ref != 1 || i >= a.d->size) a.expand(i);
  379.           a.d->data[i] = c.a.d->data[c.i];  return *this; }
  380.     inline bool operator==(char c) const
  381.     { return a.d->data[i] == c; }
  382.     inline bool operator!=(char c) const
  383.     { return a.d->data[i] != c; }
  384.     inline bool operator>(char c) const
  385.     { return a.d->data[i] > c; }
  386.     inline bool operator>=(char c) const
  387.     { return a.d->data[i] >= c; }
  388.     inline bool operator<(char c) const
  389.     { return a.d->data[i] < c; }
  390.     inline bool operator<=(char c) const
  391.     { return a.d->data[i] <= c; }
  392. };
  393. inline QByteRef QByteArray::operator[](int i)
  394. { Q_ASSERT(i >= 0); return QByteRef(*this, i); }
  395. inline QByteRef QByteArray::operator[](uint i)
  396. { return QByteRef(*this, i); }
  397. inline QByteArray::iterator QByteArray::begin()
  398. { detach(); return d->data; }
  399. inline QByteArray::const_iterator QByteArray::begin() const
  400. { return d->data; }
  401. inline QByteArray::const_iterator QByteArray::constBegin() const
  402. { return d->data; }
  403. inline QByteArray::iterator QByteArray::end()
  404. { detach(); return d->data + d->size; }
  405. inline QByteArray::const_iterator QByteArray::end() const
  406. { return d->data + d->size; }
  407. inline QByteArray::const_iterator QByteArray::constEnd() const
  408. { return d->data + d->size; }
  409. inline QByteArray &QByteArray::operator+=(char c)
  410. { return append(c); }
  411. inline QByteArray &QByteArray::operator+=(const char *s)
  412. { return append(s); }
  413. inline QByteArray &QByteArray::operator+=(const QByteArray &a)
  414. { return append(a); }
  415. inline void QByteArray::push_back(char c)
  416. { append(c); }
  417. inline void QByteArray::push_back(const char *c)
  418. { append(c); }
  419. inline void QByteArray::push_back(const QByteArray &a)
  420. { append(a); }
  421. inline void QByteArray::push_front(char c)
  422. { prepend(c); }
  423. inline void QByteArray::push_front(const char *c)
  424. { prepend(c); }
  425. inline void QByteArray::push_front(const QByteArray &a)
  426. { prepend(a); }
  427. inline QBool QByteArray::contains(const QByteArray &a) const
  428. { return QBool(indexOf(a) != -1); }
  429. inline QBool QByteArray::contains(char c) const
  430. { return QBool(indexOf(c) != -1); }
  431. inline bool operator==(const QByteArray &a1, const QByteArray &a2)
  432. { return (a1.size() == a2.size()) && (memcmp(a1, a2, a1.size())==0); }
  433. inline bool operator==(const QByteArray &a1, const char *a2)
  434. { return a2 ? qstrcmp(a1,a2) == 0 : a1.isEmpty(); }
  435. inline bool operator==(const char *a1, const QByteArray &a2)
  436. { return a1 ? qstrcmp(a1,a2) == 0 : a2.isEmpty(); }
  437. inline bool operator!=(const QByteArray &a1, const QByteArray &a2)
  438. { return !(a1==a2); }
  439. inline bool operator!=(const QByteArray &a1, const char *a2)
  440. { return a2 ? qstrcmp(a1,a2) != 0 : !a1.isEmpty(); }
  441. inline bool operator!=(const char *a1, const QByteArray &a2)
  442. { return a1 ? qstrcmp(a1,a2) != 0 : !a2.isEmpty(); }
  443. inline bool operator<(const QByteArray &a1, const QByteArray &a2)
  444. { return qstrcmp(a1, a2) < 0; }
  445.  inline bool operator<(const QByteArray &a1, const char *a2)
  446. { return qstrcmp(a1, a2) < 0; }
  447. inline bool operator<(const char *a1, const QByteArray &a2)
  448. { return qstrcmp(a1, a2) < 0; }
  449. inline bool operator<=(const QByteArray &a1, const QByteArray &a2)
  450. { return qstrcmp(a1, a2) <= 0; }
  451. inline bool operator<=(const QByteArray &a1, const char *a2)
  452. { return qstrcmp(a1, a2) <= 0; }
  453. inline bool operator<=(const char *a1, const QByteArray &a2)
  454. { return qstrcmp(a1, a2) <= 0; }
  455. inline bool operator>(const QByteArray &a1, const QByteArray &a2)
  456. { return qstrcmp(a1, a2) > 0; }
  457. inline bool operator>(const QByteArray &a1, const char *a2)
  458. { return qstrcmp(a1, a2) > 0; }
  459. inline bool operator>(const char *a1, const QByteArray &a2)
  460. { return qstrcmp(a1, a2) > 0; }
  461. inline bool operator>=(const QByteArray &a1, const QByteArray &a2)
  462. { return qstrcmp(a1, a2) >= 0; }
  463. inline bool operator>=(const QByteArray &a1, const char *a2)
  464. { return qstrcmp(a1, a2) >= 0; }
  465. inline bool operator>=(const char *a1, const QByteArray &a2)
  466. { return qstrcmp(a1, a2) >= 0; }
  467. inline const QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
  468. { return QByteArray(a1) += a2; }
  469. inline const QByteArray operator+(const QByteArray &a1, const char *a2)
  470. { return QByteArray(a1) += a2; }
  471. inline const QByteArray operator+(const QByteArray &a1, char a2)
  472. { return QByteArray(a1) += a2; }
  473. inline const QByteArray operator+(const char *a1, const QByteArray &a2)
  474. { return QByteArray(a1) += a2; }
  475. inline const QByteArray operator+(char a1, const QByteArray &a2)
  476. { return QByteArray(&a1, 1) += a2; }
  477. inline int QByteArray::indexOf(const char *c, int i) const
  478. { return indexOf(fromRawData(c, qstrlen(c)), i); }
  479. inline int QByteArray::lastIndexOf(const char *c, int i) const
  480. { return lastIndexOf(fromRawData(c, qstrlen(c)), i); }
  481. inline QBool QByteArray::contains(const char *c) const
  482. { return contains(fromRawData(c, qstrlen(c))); }
  483. inline QByteArray &QByteArray::replace(int index, int len, const char *c)
  484. { return replace(index, len, fromRawData(c, qstrlen(c))); }
  485. inline QByteArray &QByteArray::replace(char before, const char *c)
  486. { return replace(before, fromRawData(c, qstrlen(c))); }
  487. inline QByteArray &QByteArray::replace(const QByteArray &before, const char *c)
  488. { return replace(before, fromRawData(c, qstrlen(c))); }
  489. inline QByteArray &QByteArray::replace(const char *c, const QByteArray &after)
  490. { return replace(fromRawData(c, qstrlen(c)), after); }
  491. inline QByteArray &QByteArray::replace(const char *before, const char *after)
  492. { return replace(fromRawData(before, qstrlen(before)), fromRawData(after, qstrlen(after))); }
  493. inline QByteArray &QByteArray::setNum(short n, int base)
  494. { return setNum(qlonglong(n), base); }
  495. inline QByteArray &QByteArray::setNum(ushort n, int base)
  496. { return setNum(qulonglong(n), base); }
  497. inline QByteArray &QByteArray::setNum(int n, int base)
  498. { return setNum(qlonglong(n), base); }
  499. inline QByteArray &QByteArray::setNum(uint n, int base)
  500. { return setNum(qulonglong(n), base); }
  501. inline QByteArray &QByteArray::setNum(float n, char f, int prec)
  502. { return setNum(double(n),f,prec); }
  503. #ifndef QT_NO_DATASTREAM
  504. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QByteArray &);
  505. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QByteArray &);
  506. #endif
  507. #ifndef QT_NO_COMPRESS
  508. Q_CORE_EXPORT QByteArray qCompress(const uchar* data, int nbytes, int compressionLevel = -1);
  509. Q_CORE_EXPORT QByteArray qUncompress(const uchar* data, int nbytes);
  510. inline QByteArray qCompress(const QByteArray& data, int compressionLevel = -1)
  511. { return qCompress(reinterpret_cast<const uchar *>(data.constData()), data.size(), compressionLevel); }
  512. inline QByteArray qUncompress(const QByteArray& data)
  513. { return qUncompress(reinterpret_cast<const uchar*>(data.constData()), data.size()); }
  514. #endif
  515. Q_DECLARE_TYPEINFO(QByteArray, Q_MOVABLE_TYPE);
  516. Q_DECLARE_SHARED(QByteArray)
  517. QT_END_NAMESPACE
  518. QT_END_HEADER
  519. #endif // QBYTEARRAY_H