Use QCollator in QString and remove it from qlocale_icu
[profile/ivi/qtbase.git] / src / corelib / tools / qstring.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the QtCore module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "qstringlist.h"
43 #include "qregexp.h"
44 #include "qregularexpression.h"
45 #include "qunicodetables_p.h"
46 #ifndef QT_NO_TEXTCODEC
47 #include <qtextcodec.h>
48 #endif
49 #include <private/qutfcodec_p.h>
50 #include "qsimd_p.h"
51 #include <qnumeric.h>
52 #include <qdatastream.h>
53 #include <qlist.h>
54 #include "qlocale.h"
55 #include "qlocale_p.h"
56 #include "qstringmatcher.h"
57 #include "qvarlengtharray.h"
58 #include "qtools_p.h"
59 #include "qhash.h"
60 #include "qdebug.h"
61 #include "qendian.h"
62 #include "qcollator_p.h"
63
64 #ifdef Q_OS_MAC
65 #include <private/qcore_mac_p.h>
66 #endif
67
68 #include <private/qfunctions_p.h>
69
70 #include <limits.h>
71 #include <string.h>
72 #include <stdlib.h>
73 #include <stdio.h>
74 #include <stdarg.h>
75
76 #include "qchar.cpp"
77 #include "qstringmatcher.cpp"
78
79 #ifdef Q_OS_WIN
80 #  include <qt_windows.h>
81 #  ifdef Q_OS_WINCE
82 #    include <winnls.h>
83 #  endif
84 #endif
85
86 #ifdef truncate
87 #  undef truncate
88 #endif
89
90 #ifndef LLONG_MAX
91 #define LLONG_MAX qint64_C(9223372036854775807)
92 #endif
93 #ifndef LLONG_MIN
94 #define LLONG_MIN (-LLONG_MAX - qint64_C(1))
95 #endif
96 #ifndef ULLONG_MAX
97 #define ULLONG_MAX quint64_C(18446744073709551615)
98 #endif
99
100 #define IS_RAW_DATA(d) ((d)->offset != sizeof(QStringData))
101
102 QT_BEGIN_NAMESPACE
103
104 // internal
105 int qFindString(const QChar *haystack, int haystackLen, int from,
106     const QChar *needle, int needleLen, Qt::CaseSensitivity cs);
107 int qFindStringBoyerMoore(const QChar *haystack, int haystackLen, int from,
108     const QChar *needle, int needleLen, Qt::CaseSensitivity cs);
109 static inline int qt_last_index_of(const QChar *haystack, int haystackLen, QChar needle,
110                                    int from, Qt::CaseSensitivity cs);
111 static inline int qt_string_count(const QChar *haystack, int haystackLen,
112                                   const QChar *needle, int needleLen,
113                                   Qt::CaseSensitivity cs);
114 static inline int qt_string_count(const QChar *haystack, int haystackLen,
115                                   QChar needle, Qt::CaseSensitivity cs);
116 static inline int qt_find_latin1_string(const QChar *hay, int size, QLatin1String needle,
117                                         int from, Qt::CaseSensitivity cs);
118 static inline bool qt_starts_with(const QChar *haystack, int haystackLen,
119                                   const QChar *needle, int needleLen, Qt::CaseSensitivity cs);
120 static inline bool qt_starts_with(const QChar *haystack, int haystackLen,
121                                   QLatin1String needle, Qt::CaseSensitivity cs);
122 static inline bool qt_ends_with(const QChar *haystack, int haystackLen,
123                                 const QChar *needle, int needleLen, Qt::CaseSensitivity cs);
124 static inline bool qt_ends_with(const QChar *haystack, int haystackLen,
125                                 QLatin1String needle, Qt::CaseSensitivity cs);
126
127 // Unicode case-insensitive comparison
128 static int ucstricmp(const ushort *a, const ushort *ae, const ushort *b, const ushort *be)
129 {
130     if (a == b)
131         return (ae - be);
132     if (a == 0)
133         return 1;
134     if (b == 0)
135         return -1;
136
137     const ushort *e = ae;
138     if (be - b < ae - a)
139         e = a + (be - b);
140
141     uint alast = 0;
142     uint blast = 0;
143     while (a < e) {
144 //         qDebug() << hex << alast << blast;
145 //         qDebug() << hex << "*a=" << *a << "alast=" << alast << "folded=" << foldCase (*a, alast);
146 //         qDebug() << hex << "*b=" << *b << "blast=" << blast << "folded=" << foldCase (*b, blast);
147         int diff = foldCase(*a, alast) - foldCase(*b, blast);
148         if ((diff))
149             return diff;
150         ++a;
151         ++b;
152     }
153     if (a == ae) {
154         if (b == be)
155             return 0;
156         return -1;
157     }
158     return 1;
159 }
160
161 // Case-insensitive comparison between a Unicode string and a QLatin1String
162 static int ucstricmp(const ushort *a, const ushort *ae, const uchar *b, const uchar *be)
163 {
164     if (a == 0) {
165         if (b == 0)
166             return 0;
167         return 1;
168     }
169     if (b == 0)
170         return -1;
171
172     const ushort *e = ae;
173     if (be - b < ae - a)
174         e = a + (be - b);
175
176     while (a < e) {
177         int diff = foldCase(*a) - foldCase(*b);
178         if ((diff))
179             return diff;
180         ++a;
181         ++b;
182     }
183     if (a == ae) {
184         if (b == be)
185             return 0;
186         return -1;
187     }
188     return 1;
189 }
190
191 // Unicode case-sensitive compare two same-sized strings
192 static int ucstrncmp(const QChar *a, const QChar *b, int l)
193 {
194     while (l-- && *a == *b)
195         a++,b++;
196     if (l==-1)
197         return 0;
198     return a->unicode() - b->unicode();
199 }
200
201 // Unicode case-sensitive comparison
202 static int ucstrcmp(const QChar *a, int alen, const QChar *b, int blen)
203 {
204     if (a == b && alen == blen)
205         return 0;
206     int l = qMin(alen, blen);
207     int cmp = ucstrncmp(a, b, l);
208     return cmp ? cmp : (alen-blen);
209 }
210
211 // Unicode case-insensitive compare two same-sized strings
212 static int ucstrnicmp(const ushort *a, const ushort *b, int l)
213 {
214     return ucstricmp(a, a + l, b, b + l);
215 }
216
217 // Benchmarking indicates that doing memcmp is much slower than
218 // executing the comparison ourselves.
219 //
220 // The profiling was done on a population of calls to qMemEquals, generated
221 // during a run of the demo browser. The profile of the data (32-bit x86
222 // Linux) was:
223 //
224 //  total number of comparisons: 21353
225 //  longest string compared: 95
226 //  average comparison length: 14.8786
227 //  cache-line crosses: 5661 (13.3%)
228 //  alignment histogram:
229 //   0xXXX0 = 512 (1.2%) strings, 0 (0.0%) of which same-aligned
230 //   0xXXX2 = 15087 (35.3%) strings, 5145 (34.1%) of which same-aligned
231 //   0xXXX4 = 525 (1.2%) strings, 0 (0.0%) of which same-aligned
232 //   0xXXX6 = 557 (1.3%) strings, 6 (1.1%) of which same-aligned
233 //   0xXXX8 = 509 (1.2%) strings, 0 (0.0%) of which same-aligned
234 //   0xXXXa = 24358 (57.0%) strings, 9901 (40.6%) of which same-aligned
235 //   0xXXXc = 557 (1.3%) strings, 0 (0.0%) of which same-aligned
236 //   0xXXXe = 601 (1.4%) strings, 15 (2.5%) of which same-aligned
237 //   total  = 42706 (100%) strings, 15067 (35.3%) of which same-aligned
238 //
239 // 92% of the strings have alignment of 2 or 10, which is due to malloc on
240 // 32-bit Linux returning values aligned to 8 bytes, and offsetof(array, QString::Data) == 18.
241 //
242 // The profile on 64-bit will be different since offsetof(array, QString::Data) == 26.
243 //
244 // The benchmark results were, for a Core-i7 @ 2.67 GHz 32-bit, compiled with -O3 -funroll-loops:
245 //   16-bit loads only:           872,301 CPU ticks [Qt 4.5 / memcmp]
246 //   32- and 16-bit loads:        773,362 CPU ticks [Qt 4.6]
247 //   SSE2 "movdqu" 128-bit loads: 618,736 CPU ticks
248 //   SSE3 "lddqu" 128-bit loads:  619,954 CPU ticks
249 //   SSSE3 "palignr" corrections: 852,147 CPU ticks
250 //   SSE4.2 "pcmpestrm":          738,702 CPU ticks
251 //
252 // The same benchmark on an Atom N450 @ 1.66 GHz, is:
253 //  16-bit loads only:            2,185,882 CPU ticks
254 //  32- and 16-bit loads:         1,805,060 CPU ticks
255 //  SSE2 "movdqu" 128-bit loads:  2,529,843 CPU ticks
256 //  SSE3 "lddqu" 128-bit loads:   2,514,858 CPU ticks
257 //  SSSE3 "palignr" corrections:  2,160,325 CPU ticks
258 //  SSE4.2 not available
259 //
260 // The conclusion we reach is that alignment the SSE2 unaligned code can gain
261 // 20% improvement in performance in some systems, but suffers a penalty due
262 // to the unaligned loads on others.
263
264 static bool qMemEquals(const quint16 *a, const quint16 *b, int length)
265 {
266     if (a == b || !length)
267         return true;
268
269     register union {
270         const quint16 *w;
271         const quint32 *d;
272         quintptr value;
273     } sa, sb;
274     sa.w = a;
275     sb.w = b;
276
277     // check alignment
278     if ((sa.value & 2) == (sb.value & 2)) {
279         // both addresses have the same alignment
280         if (sa.value & 2) {
281             // both addresses are not aligned to 4-bytes boundaries
282             // compare the first character
283             if (*sa.w != *sb.w)
284                 return false;
285             --length;
286             ++sa.w;
287             ++sb.w;
288
289             // now both addresses are 4-bytes aligned
290         }
291
292         // both addresses are 4-bytes aligned
293         // do a fast 32-bit comparison
294         register const quint32 *e = sa.d + (length >> 1);
295         for ( ; sa.d != e; ++sa.d, ++sb.d) {
296             if (*sa.d != *sb.d)
297                 return false;
298         }
299
300         // do we have a tail?
301         return (length & 1) ? *sa.w == *sb.w : true;
302     } else {
303         // one of the addresses isn't 4-byte aligned but the other is
304         register const quint16 *e = sa.w + length;
305         for ( ; sa.w != e; ++sa.w, ++sb.w) {
306             if (*sa.w != *sb.w)
307                 return false;
308         }
309     }
310     return true;
311 }
312
313 /*!
314     \internal
315
316     Returns the index position of the first occurrence of the
317     character \a ch in the string given by \a str and \a len,
318     searching forward from index
319     position \a from. Returns -1 if \a ch could not be found.
320 */
321 static int findChar(const QChar *str, int len, QChar ch, int from,
322     Qt::CaseSensitivity cs)
323 {
324     const ushort *s = (const ushort *)str;
325     ushort c = ch.unicode();
326     if (from < 0)
327         from = qMax(from + len, 0);
328     if (from < len) {
329         const ushort *n = s + from - 1;
330         const ushort *e = s + len;
331         if (cs == Qt::CaseSensitive) {
332             while (++n != e)
333                 if (*n == c)
334                     return  n - s;
335         } else {
336             c = foldCase(c);
337             while (++n != e)
338                 if (foldCase(*n) == c)
339                     return  n - s;
340         }
341     }
342     return -1;
343 }
344
345 #define REHASH(a) \
346     if (sl_minus_1 < (int)sizeof(int) * CHAR_BIT)       \
347         hashHaystack -= (a) << sl_minus_1; \
348     hashHaystack <<= 1
349
350 inline bool qIsUpper(char ch)
351 {
352     return ch >= 'A' && ch <= 'Z';
353 }
354
355 inline bool qIsDigit(char ch)
356 {
357     return ch >= '0' && ch <= '9';
358 }
359
360 inline char qToLower(char ch)
361 {
362     if (ch >= 'A' && ch <= 'Z')
363         return ch - 'A' + 'a';
364     else
365         return ch;
366 }
367
368
369 const QString::Null QString::null = { };
370
371 /*!
372   \macro QT_NO_CAST_FROM_ASCII
373   \relates QString
374
375   Disables automatic conversions from 8-bit strings (char *) to unicode QStrings
376
377   \sa QT_NO_CAST_TO_ASCII, QT_NO_CAST_FROM_BYTEARRAY
378 */
379
380 /*!
381   \macro QT_NO_CAST_TO_ASCII
382   \relates QString
383
384   disables automatic conversion from QString to 8-bit strings (char *)
385
386   \sa QT_NO_CAST_FROM_ASCII, QT_NO_CAST_FROM_BYTEARRAY
387 */
388
389 /*!
390   \macro QT_ASCII_CAST_WARNINGS
391   \internal
392   \relates QString
393
394   This macro can be defined to force a warning whenever a function is
395   called that automatically converts between unicode and 8-bit encodings.
396
397   Note: This only works for compilers that support warnings for
398   deprecated API.
399
400   \sa QT_NO_CAST_TO_ASCII, QT_NO_CAST_FROM_ASCII
401 */
402
403 /*!
404     \class QCharRef
405     \reentrant
406     \brief The QCharRef class is a helper class for QString.
407
408     \internal
409
410     \ingroup string-processing
411
412     When you get an object of type QCharRef, if you can assign to it,
413     the assignment will apply to the character in the string from
414     which you got the reference. That is its whole purpose in life.
415     The QCharRef becomes invalid once modifications are made to the
416     string: if you want to keep the character, copy it into a QChar.
417
418     Most of the QChar member functions also exist in QCharRef.
419     However, they are not explicitly documented here.
420
421     \sa QString::operator[](), QString::at(), QChar
422 */
423
424 /*!
425     \class QString
426     \reentrant
427
428     \brief The QString class provides a Unicode character string.
429
430     \ingroup tools
431     \ingroup shared
432     \ingroup string-processing
433
434     QString stores a string of 16-bit \l{QChar}s, where each QChar
435     corresponds one Unicode 4.0 character. (Unicode characters
436     with code values above 65535 are stored using surrogate pairs,
437     i.e., two consecutive \l{QChar}s.)
438
439     \l{Unicode} is an international standard that supports most of the
440     writing systems in use today. It is a superset of US-ASCII (ANSI
441     X3.4-1986) and Latin-1 (ISO 8859-1), and all the US-ASCII/Latin-1
442     characters are available at the same code positions.
443
444     Behind the scenes, QString uses \l{implicit sharing}
445     (copy-on-write) to reduce memory usage and to avoid the needless
446     copying of data. This also helps reduce the inherent overhead of
447     storing 16-bit characters instead of 8-bit characters.
448
449     In addition to QString, Qt also provides the QByteArray class to
450     store raw bytes and traditional 8-bit '\\0'-terminated strings.
451     For most purposes, QString is the class you want to use. It is
452     used throughout the Qt API, and the Unicode support ensures that
453     your applications will be easy to translate if you want to expand
454     your application's market at some point. The two main cases where
455     QByteArray is appropriate are when you need to store raw binary
456     data, and when memory conservation is critical (e.g., with
457     \l{Qt for Embedded Linux}).
458
459     \tableofcontents
460
461     \section1 Initializing a String
462
463     One way to initialize a QString is simply to pass a \c{const char
464     *} to its constructor. For example, the following code creates a
465     QString of size 5 containing the data "Hello":
466
467     \snippet qstring/main.cpp 0
468
469     QString converts the \c{const char *} data into Unicode using the
470     fromUtf8() function.
471
472     In all of the QString functions that take \c{const char *}
473     parameters, the \c{const char *} is interpreted as a classic
474     C-style '\\0'-terminated string encoded in UTF-8. It is legal for
475     the \c{const char *} parameter to be 0.
476
477     You can also provide string data as an array of \l{QChar}s:
478
479     \snippet qstring/main.cpp 1
480
481     QString makes a deep copy of the QChar data, so you can modify it
482     later without experiencing side effects. (If for performance
483     reasons you don't want to take a deep copy of the character data,
484     use QString::fromRawData() instead.)
485
486     Another approach is to set the size of the string using resize()
487     and to initialize the data character per character. QString uses
488     0-based indexes, just like C++ arrays. To access the character at
489     a particular index position, you can use \l operator[](). On
490     non-const strings, \l operator[]() returns a reference to a
491     character that can be used on the left side of an assignment. For
492     example:
493
494     \snippet qstring/main.cpp 2
495
496     For read-only access, an alternative syntax is to use the at()
497     function:
498
499     \snippet qstring/main.cpp 3
500
501     The at() function can be faster than \l operator[](), because it
502     never causes a \l{deep copy} to occur. Alternatively, use the
503     left(), right(), or mid() functions to extract several characters
504     at a time.
505
506     A QString can embed '\\0' characters (QChar::Null). The size()
507     function always returns the size of the whole string, including
508     embedded '\\0' characters.
509
510     After a call to the resize() function, newly allocated characters
511     have undefined values. To set all the characters in the string to
512     a particular value, use the fill() function.
513
514     QString provides dozens of overloads designed to simplify string
515     usage. For example, if you want to compare a QString with a string
516     literal, you can write code like this and it will work as expected:
517
518     \snippet qstring/main.cpp 4
519
520     You can also pass string literals to functions that take QStrings
521     as arguments, invoking the QString(const char *)
522     constructor. Similarly, you can pass a QString to a function that
523     takes a \c{const char *} argument using the \l qPrintable() macro
524     which returns the given QString as a \c{const char *}. This is
525     equivalent to calling <QString>.toLocal8Bit().constData().
526
527     \section1 Manipulating String Data
528
529     QString provides the following basic functions for modifying the
530     character data: append(), prepend(), insert(), replace(), and
531     remove(). For example:
532
533     \snippet qstring/main.cpp 5
534
535     If you are building a QString gradually and know in advance
536     approximately how many characters the QString will contain, you
537     can call reserve(), asking QString to preallocate a certain amount
538     of memory. You can also call capacity() to find out how much
539     memory QString actually allocated.
540
541     The replace() and remove() functions' first two arguments are the
542     position from which to start erasing and the number of characters
543     that should be erased.  If you want to replace all occurrences of
544     a particular substring with another, use one of the two-parameter
545     replace() overloads.
546
547     A frequent requirement is to remove whitespace characters from a
548     string ('\\n', '\\t', ' ', etc.). If you want to remove whitespace
549     from both ends of a QString, use the trimmed() function. If you
550     want to remove whitespace from both ends and replace multiple
551     consecutive whitespaces with a single space character within the
552     string, use simplified().
553
554     If you want to find all occurrences of a particular character or
555     substring in a QString, use the indexOf() or lastIndexOf()
556     functions. The former searches forward starting from a given index
557     position, the latter searches backward. Both return the index
558     position of the character or substring if they find it; otherwise,
559     they return -1.  For example, here's a typical loop that finds all
560     occurrences of a particular substring:
561
562     \snippet qstring/main.cpp 6
563
564     QString provides many functions for converting numbers into
565     strings and strings into numbers. See the arg() functions, the
566     setNum() functions, the number() static functions, and the
567     toInt(), toDouble(), and similar functions.
568
569     To get an upper- or lowercase version of a string use toUpper() or
570     toLower().
571
572     Lists of strings are handled by the QStringList class. You can
573     split a string into a list of strings using the split() function,
574     and join a list of strings into a single string with an optional
575     separator using QStringList::join(). You can obtain a list of
576     strings from a string list that contain a particular substring or
577     that match a particular QRegExp using the QStringList::filter()
578     function.
579
580     \section1 Querying String Data
581
582     If you want to see if a QString starts or ends with a particular
583     substring use startsWith() or endsWith(). If you simply want to
584     check whether a QString contains a particular character or
585     substring, use the contains() function. If you want to find out
586     how many times a particular character or substring occurs in the
587     string, use count().
588
589     QStrings can be compared using overloaded operators such as \l
590     operator<(), \l operator<=(), \l operator==(), \l operator>=(),
591     and so on.  Note that the comparison is based exclusively on the
592     numeric Unicode values of the characters. It is very fast, but is
593     not what a human would expect; the QString::localeAwareCompare()
594     function is a better choice for sorting user-interface strings.
595
596     To obtain a pointer to the actual character data, call data() or
597     constData(). These functions return a pointer to the beginning of
598     the QChar data. The pointer is guaranteed to remain valid until a
599     non-const function is called on the QString.
600
601     \section1 Converting Between 8-Bit Strings and Unicode Strings
602
603     QString provides the following three functions that return a
604     \c{const char *} version of the string as QByteArray: toUtf8(),
605     toLatin1(), and toLocal8Bit().
606
607     \list
608     \li toLatin1() returns a Latin-1 (ISO 8859-1) encoded 8-bit string.
609     \li toUtf8() returns a UTF-8 encoded 8-bit string. UTF-8 is a
610        superset of US-ASCII (ANSI X3.4-1986) that supports the entire
611        Unicode character set through multibyte sequences.
612     \li toLocal8Bit() returns an 8-bit string using the system's local
613        encoding.
614     \endlist
615
616     To convert from one of these encodings, QString provides
617     fromLatin1(), fromUtf8(), and fromLocal8Bit(). Other
618     encodings are supported through the QTextCodec class.
619
620     As mentioned above, QString provides a lot of functions and
621     operators that make it easy to interoperate with \c{const char *}
622     strings. But this functionality is a double-edged sword: It makes
623     QString more convenient to use if all strings are US-ASCII or
624     Latin-1, but there is always the risk that an implicit conversion
625     from or to \c{const char *} is done using the wrong 8-bit
626     encoding. To minimize these risks, you can turn off these implicit
627     conversions by defining the following two preprocessor symbols:
628
629     \list
630     \li \c QT_NO_CAST_FROM_ASCII disables automatic conversions from
631        C string literals and pointers to Unicode.
632     \li \c QT_NO_CAST_TO_ASCII disables automatic conversion from QString
633        to C strings.
634     \endlist
635
636     One way to define these preprocessor symbols globally for your
637     application is to add the following entry to your
638     \l{qmake Project Files}{qmake project file}:
639
640     \snippet code/src_corelib_tools_qstring.cpp 0
641
642     You then need to explicitly call fromUtf8(), fromLatin1(),
643     or fromLocal8Bit() to construct a QString from an
644     8-bit string, or use the lightweight QLatin1String class, for
645     example:
646
647     \snippet code/src_corelib_tools_qstring.cpp 1
648
649     Similarly, you must call toLatin1(), toUtf8(), or
650     toLocal8Bit() explicitly to convert the QString to an 8-bit
651     string.  (Other encodings are supported through the QTextCodec
652     class.)
653
654     \table 100 %
655     \header
656     \li Note for C Programmers
657
658     \row
659     \li
660     Due to C++'s type system and the fact that QString is
661     \l{implicitly shared}, QStrings may be treated like \c{int}s or
662     other basic types. For example:
663
664     \snippet qstring/main.cpp 7
665
666     The \c result variable, is a normal variable allocated on the
667     stack. When \c return is called, and because we're returning by
668     value, the copy constructor is called and a copy of the string is
669     returned. No actual copying takes place thanks to the implicit
670     sharing.
671
672     \endtable
673
674     \section1 Distinction Between Null and Empty Strings
675
676     For historical reasons, QString distinguishes between a null
677     string and an empty string. A \e null string is a string that is
678     initialized using QString's default constructor or by passing
679     (const char *)0 to the constructor. An \e empty string is any
680     string with size 0. A null string is always empty, but an empty
681     string isn't necessarily null:
682
683     \snippet qstring/main.cpp 8
684
685     All functions except isNull() treat null strings the same as empty
686     strings. For example, toUtf8().constData() returns a pointer to a
687     '\\0' character for a null string (\e not a null pointer), and
688     QString() compares equal to QString(""). We recommend that you
689     always use the isEmpty() function and avoid isNull().
690
691     \section1 Argument Formats
692
693     In member functions where an argument \e format can be specified
694     (e.g., arg(), number()), the argument \e format can be one of the
695     following:
696
697     \table
698     \header \li Format \li Meaning
699     \row \li \c e \li format as [-]9.9e[+|-]999
700     \row \li \c E \li format as [-]9.9E[+|-]999
701     \row \li \c f \li format as [-]9.9
702     \row \li \c g \li use \c e or \c f format, whichever is the most concise
703     \row \li \c G \li use \c E or \c f format, whichever is the most concise
704     \endtable
705
706     A \e precision is also specified with the argument \e format. For
707     the 'e', 'E', and 'f' formats, the \e precision represents the
708     number of digits \e after the decimal point. For the 'g' and 'G'
709     formats, the \e precision represents the maximum number of
710     significant digits (trailing zeroes are omitted).
711
712     \section1 More Efficient String Construction
713
714     Many strings are known at compile time. But the trivial
715     constructor QString("Hello"), will copy the contents of the string,
716     treating the contents as Latin-1. To avoid this one can use the
717     QStringLiteral macro to directly create the required data at compile
718     time. Constructing a QString out of the literal does then not cause
719     any overhead at runtime.
720
721     A slightly less efficient way is to use QLatin1String. This class wraps
722     a C string literal, precalculates it length at compile time and can
723     then be used for faster comparison with QStrings and conversion to
724     QStrings than a regular C string literal.
725
726     Using the QString \c{'+'} operator, it is easy to construct a
727     complex string from multiple substrings. You will often write code
728     like this:
729
730     \snippet qstring/stringbuilder.cpp 0
731
732     There is nothing wrong with either of these string constructions,
733     but there are a few hidden inefficiencies. Beginning with Qt 4.6,
734     you can eliminate them.
735
736     First, multiple uses of the \c{'+'} operator usually means
737     multiple memory allocations. When concatenating \e{n} substrings,
738     where \e{n > 2}, there can be as many as \e{n - 1} calls to the
739     memory allocator.
740
741     In 4.6, an internal template class \c{QStringBuilder} has been
742     added along with a few helper functions. This class is marked
743     internal and does not appear in the documentation, because you
744     aren't meant to instantiate it in your code. Its use will be
745     automatic, as described below. The class is found in
746     \c {src/corelib/tools/qstringbuilder.cpp} if you want to have a
747     look at it.
748
749     \c{QStringBuilder} uses expression templates and reimplements the
750     \c{'%'} operator so that when you use \c{'%'} for string
751     concatenation instead of \c{'+'}, multiple substring
752     concatenations will be postponed until the final result is about
753     to be assigned to a QString. At this point, the amount of memory
754     required for the final result is known. The memory allocator is
755     then called \e{once} to get the required space, and the substrings
756     are copied into it one by one.
757
758     Additional efficiency is gained by inlining and reduced reference
759     counting (the QString created from a \c{QStringBuilder} typically
760     has a ref count of 1, whereas QString::append() needs an extra
761     test).
762
763     There are three ways you can access this improved method of string
764     construction. The straightforward way is to include
765     \c{QStringBuilder} wherever you want to use it, and use the
766     \c{'%'} operator instead of \c{'+'} when concatenating strings:
767
768     \snippet qstring/stringbuilder.cpp 5
769
770     A more global approach which is the most convenient but
771     not entirely source compatible, is to this define in your
772     .pro file:
773
774     \snippet qstring/stringbuilder.cpp 3
775
776     and the \c{'+'} will automatically be performed as the
777     \c{QStringBuilder} \c{'%'} everywhere.
778
779     \sa fromRawData(), QChar, QLatin1String, QByteArray, QStringRef
780 */
781
782 /*!
783     \enum QString::SplitBehavior
784
785     This enum specifies how the split() function should behave with
786     respect to empty strings.
787
788     \value KeepEmptyParts  If a field is empty, keep it in the result.
789     \value SkipEmptyParts  If a field is empty, don't include it in the result.
790
791     \sa split()
792 */
793
794 /*! \typedef QString::ConstIterator
795
796     Qt-style synonym for QString::const_iterator.
797 */
798
799 /*! \typedef QString::Iterator
800
801     Qt-style synonym for QString::iterator.
802 */
803
804 /*! \typedef QString::const_iterator
805
806     The QString::const_iterator typedef provides an STL-style const
807     iterator for QString.
808
809     \sa QString::iterator
810 */
811
812 /*! \typedef QString::iterator
813
814     The QString::iterator typedef provides an STL-style non-const
815     iterator for QString.
816
817     \sa QString::const_iterator
818 */
819
820 /*!
821     \typedef QString::const_reference
822
823     The QString::const_reference typedef provides an STL-style
824     const reference for QString.
825 */
826 /*!
827     \typedef QString::reference
828
829     The QString::const_reference typedef provides an STL-style
830     reference for QString.
831 */
832 /*!
833     \typedef QString::value_type
834
835     The QString::const_reference typedef provides an STL-style
836     value type for QString.
837 */
838
839 /*! \fn QString::iterator QString::begin()
840
841     Returns an \l{STL-style iterator} pointing to the first character in
842     the string.
843
844     \sa constBegin(), end()
845 */
846
847 /*! \fn QString::const_iterator QString::begin() const
848
849     \overload begin()
850 */
851
852 /*! \fn QString::const_iterator QString::cbegin() const
853     \since 5.0
854
855     Returns a const \l{STL-style iterator} pointing to the first character
856     in the string.
857
858     \sa begin(), cend()
859 */
860
861 /*! \fn QString::const_iterator QString::constBegin() const
862
863     Returns a const \l{STL-style iterator} pointing to the first character
864     in the string.
865
866     \sa begin(), constEnd()
867 */
868
869 /*! \fn QString::iterator QString::end()
870
871     Returns an \l{STL-style iterator} pointing to the imaginary character
872     after the last character in the string.
873
874     \sa begin(), constEnd()
875 */
876
877 /*! \fn QString::const_iterator QString::end() const
878
879     \overload end()
880 */
881
882 /*! \fn QString::const_iterator QString::cend() const
883     \since 5.0
884
885     Returns a const \l{STL-style iterator} pointing to the imaginary
886     item after the last item in the list.
887
888     \sa cbegin(), end()
889 */
890
891 /*! \fn QString::const_iterator QString::constEnd() const
892
893     Returns a const \l{STL-style iterator} pointing to the imaginary
894     item after the last item in the list.
895
896     \sa constBegin(), end()
897 */
898
899 /*!
900     \fn QString::QString()
901
902     Constructs a null string. Null strings are also empty.
903
904     \sa isEmpty()
905 */
906
907 /*! \fn QString::QString(const char *str)
908
909     Constructs a string initialized with the 8-bit string \a str. The
910     given const char pointer is converted to Unicode using the
911     fromUtf8() function.
912
913     You can disable this constructor by defining \c
914     QT_NO_CAST_FROM_ASCII when you compile your applications. This
915     can be useful if you want to ensure that all user-visible strings
916     go through QObject::tr(), for example.
917
918     \sa fromLatin1(), fromLocal8Bit(), fromUtf8()
919 */
920
921 /*! \fn QString QString::fromStdString(const std::string &str)
922
923     Returns a copy of the \a str string. The given string is converted
924     to Unicode using the fromUtf8() function.
925
926     This constructor is only available if Qt is configured with STL
927     compatibility enabled.
928
929     \sa fromLatin1(), fromLocal8Bit(), fromUtf8()
930 */
931
932 /*! \fn QString QString::fromStdWString(const std::wstring &str)
933
934     Returns a copy of the \a str string. The given string is assumed
935     to be encoded in utf16 if the size of wchar_t is 2 bytes (e.g. on
936     windows) and ucs4 if the size of wchar_t is 4 bytes (most Unix
937     systems).
938
939     \sa fromUtf16(), fromLatin1(), fromLocal8Bit(), fromUtf8(), fromUcs4()
940 */
941
942 /*! \fn QString QString::fromWCharArray(const wchar_t *string, int size)
943     \since 4.2
944
945     Returns a copy of the \a string, where the encoding of \a string depends on
946     the size of wchar. If wchar is 4 bytes, the \a string is interpreted as ucs-4,
947     if wchar is 2 bytes it is interpreted as ucs-2.
948
949     If \a size is -1 (default), the \a string has to be 0 terminated.
950
951     \sa fromUtf16(), fromLatin1(), fromLocal8Bit(), fromUtf8(), fromUcs4(), fromStdWString()
952 */
953
954 /*! \fn std::wstring QString::toStdWString() const
955
956     Returns a std::wstring object with the data contained in this
957     QString. The std::wstring is encoded in utf16 on platforms where
958     wchar_t is 2 bytes wide (e.g. windows) and in ucs4 on platforms
959     where wchar_t is 4 bytes wide (most Unix systems).
960
961     This operator is mostly useful to pass a QString to a function
962     that accepts a std::wstring object.
963
964     \sa utf16(), toLatin1(), toUtf8(), toLocal8Bit()
965 */
966
967 // ### replace with QCharIterator
968 int QString::toUcs4_helper(const ushort *uc, int length, uint *out)
969 {
970     int i = 0;
971     for (; i < length; ++i) {
972         uint u = uc[i];
973         if (QChar::isHighSurrogate(u) && i + 1 < length) {
974             ushort low = uc[i+1];
975             if (QChar::isLowSurrogate(low)) {
976                 ++i;
977                 u = QChar::surrogateToUcs4(u, low);
978             }
979         }
980         *out++ = u;
981     }
982     return i;
983 }
984
985 /*! \fn int QString::toWCharArray(wchar_t *array) const
986   \since 4.2
987
988   Fills the \a array with the data contained in this QString object.
989   The array is encoded in utf16 on platforms where
990   wchar_t is 2 bytes wide (e.g. windows) and in ucs4 on platforms
991   where wchar_t is 4 bytes wide (most Unix systems).
992
993   \a array has to be allocated by the caller and contain enough space to
994   hold the complete string (allocating the array with the same length as the
995   string is always sufficient).
996
997   This function returns the actual length of the string in \a array.
998
999   \note This function does not append a null character to the array.
1000
1001   \sa utf16(), toUcs4(), toLatin1(), toUtf8(), toLocal8Bit(), toStdWString()
1002 */
1003
1004 /*! \fn QString::QString(const QString &other)
1005
1006     Constructs a copy of \a other.
1007
1008     This operation takes \l{constant time}, because QString is
1009     \l{implicitly shared}. This makes returning a QString from a
1010     function very fast. If a shared instance is modified, it will be
1011     copied (copy-on-write), and that takes \l{linear time}.
1012
1013     \sa operator=()
1014 */
1015
1016 /*!
1017     Constructs a string initialized with the first \a size characters
1018     of the QChar array \a unicode.
1019
1020     If \a unicode is 0, a null string is constructed.
1021
1022     If \a size is negative, \a unicode is assumed to point to a nul-terminated
1023     array and its length is determined dynamically. The terminating
1024     nul-character is not considered part of the string.
1025
1026     QString makes a deep copy of the string data. The unicode data is copied as
1027     is and the Byte Order Mark is preserved if present.
1028
1029     \sa fromRawData()
1030 */
1031 QString::QString(const QChar *unicode, int size)
1032 {
1033    if (!unicode) {
1034         d = Data::sharedNull();
1035     } else {
1036         if (size < 0) {
1037             size = 0;
1038             while (unicode[size] != 0)
1039                 ++size;
1040         }
1041         if (!size) {
1042             d = Data::allocate(0);
1043         } else {
1044             d = Data::allocate(size + 1);
1045             Q_CHECK_PTR(d);
1046             d->size = size;
1047             memcpy(d->data(), unicode, size * sizeof(QChar));
1048             d->data()[size] = '\0';
1049         }
1050     }
1051 }
1052
1053 /*!
1054     Constructs a string of the given \a size with every character set
1055     to \a ch.
1056
1057     \sa fill()
1058 */
1059 QString::QString(int size, QChar ch)
1060 {
1061    if (size <= 0) {
1062         d = Data::allocate(0);
1063     } else {
1064         d = Data::allocate(size + 1);
1065         Q_CHECK_PTR(d);
1066         d->size = size;
1067         d->data()[size] = '\0';
1068         ushort *i = d->data() + size;
1069         ushort *b = d->data();
1070         const ushort value = ch.unicode();
1071         while (i != b)
1072            *--i = value;
1073     }
1074 }
1075
1076 /*! \fn QString::QString(int size, Qt::Initialization)
1077   \internal
1078
1079   Constructs a string of the given \a size without initializing the
1080   characters. This is only used in \c QStringBuilder::toString().
1081 */
1082 QString::QString(int size, Qt::Initialization)
1083 {
1084     d = Data::allocate(size + 1);
1085     Q_CHECK_PTR(d);
1086     d->size = size;
1087     d->data()[size] = '\0';
1088 }
1089
1090 /*! \fn QString::QString(QLatin1String str)
1091
1092     Constructs a copy of the Latin-1 string \a str.
1093
1094     \sa fromLatin1()
1095 */
1096
1097 /*!
1098     Constructs a string of size 1 containing the character \a ch.
1099 */
1100 QString::QString(QChar ch)
1101 {
1102     d = Data::allocate(2);
1103     Q_CHECK_PTR(d);
1104     d->size = 1;
1105     d->data()[0] = ch.unicode();
1106     d->data()[1] = '\0';
1107 }
1108
1109 /*! \fn QString::QString(const QByteArray &ba)
1110
1111     Constructs a string initialized with the byte array \a ba. The
1112     given byte array is converted to Unicode using fromUtf8(). Stops
1113     copying at the first 0 character, otherwise copies the entire byte
1114     array.
1115
1116     You can disable this constructor by defining \c
1117     QT_NO_CAST_FROM_ASCII when you compile your applications. This
1118     can be useful if you want to ensure that all user-visible strings
1119     go through QObject::tr(), for example.
1120
1121     \sa fromLatin1(), fromLocal8Bit(), fromUtf8()
1122 */
1123
1124 /*! \fn QString::QString(const Null &)
1125     \internal
1126 */
1127
1128 /*! \fn QString &QString::operator=(const Null &)
1129     \internal
1130 */
1131
1132 /*!
1133   \fn QString::~QString()
1134
1135     Destroys the string.
1136 */
1137
1138
1139 /*! \fn void QString::swap(QString &other)
1140     \since 4.8
1141
1142     Swaps string \a other with this string. This operation is very fast and
1143     never fails.
1144 */
1145
1146 /*! \fn void QString::detach()
1147
1148     \internal
1149 */
1150
1151 /*! \fn bool QString::isDetached() const
1152
1153     \internal
1154 */
1155
1156 /*! \fn bool QString::isSharedWith(const QString &other) const
1157
1158     \internal
1159 */
1160
1161 /*!
1162     Sets the size of the string to \a size characters.
1163
1164     If \a size is greater than the current size, the string is
1165     extended to make it \a size characters long with the extra
1166     characters added to the end. The new characters are uninitialized.
1167
1168     If \a size is less than the current size, characters are removed
1169     from the end.
1170
1171     Example:
1172
1173     \snippet qstring/main.cpp 45
1174
1175     If you want to append a certain number of identical characters to
1176     the string, use \l operator+=() as follows rather than resize():
1177
1178     \snippet qstring/main.cpp 46
1179
1180     If you want to expand the string so that it reaches a certain
1181     width and fill the new positions with a particular character, use
1182     the leftJustified() function:
1183
1184     If \a size is negative, it is equivalent to passing zero.
1185
1186     \snippet qstring/main.cpp 47
1187
1188     \sa truncate(), reserve()
1189 */
1190
1191 void QString::resize(int size)
1192 {
1193     if (size < 0)
1194         size = 0;
1195
1196     if (IS_RAW_DATA(d) && !d->ref.isShared() && size < d->size) {
1197         d->size = size;
1198         return;
1199     }
1200
1201     if (size == 0 && !d->capacityReserved) {
1202         Data *x = Data::allocate(0);
1203         if (!d->ref.deref())
1204             Data::deallocate(d);
1205         d = x;
1206     } else {
1207         if (d->ref.isShared() || uint(size) + 1u > d->alloc
1208                 || (!d->capacityReserved && size < d->size
1209                     && uint(size) + 1u < uint(d->alloc >> 1)))
1210             reallocData(uint(size) + 1u, true);
1211         if (d->alloc) {
1212             d->size = size;
1213             d->data()[size] = '\0';
1214         }
1215     }
1216 }
1217
1218 /*! \fn int QString::capacity() const
1219
1220     Returns the maximum number of characters that can be stored in
1221     the string without forcing a reallocation.
1222
1223     The sole purpose of this function is to provide a means of fine
1224     tuning QString's memory usage. In general, you will rarely ever
1225     need to call this function. If you want to know how many
1226     characters are in the string, call size().
1227
1228     \sa reserve(), squeeze()
1229 */
1230
1231 /*!
1232     \fn void QString::reserve(int size)
1233
1234     Attempts to allocate memory for at least \a size characters. If
1235     you know in advance how large the string will be, you can call
1236     this function, and if you resize the string often you are likely
1237     to get better performance. If \a size is an underestimate, the
1238     worst that will happen is that the QString will be a bit slower.
1239
1240     The sole purpose of this function is to provide a means of fine
1241     tuning QString's memory usage. In general, you will rarely ever
1242     need to call this function. If you want to change the size of the
1243     string, call resize().
1244
1245     This function is useful for code that needs to build up a long
1246     string and wants to avoid repeated reallocation. In this example,
1247     we want to add to the string until some condition is true, and
1248     we're fairly sure that size is large enough to make a call to
1249     reserve() worthwhile:
1250
1251     \snippet qstring/main.cpp 44
1252
1253     \sa squeeze(), capacity()
1254 */
1255
1256 /*!
1257     \fn void QString::squeeze()
1258
1259     Releases any memory not required to store the character data.
1260
1261     The sole purpose of this function is to provide a means of fine
1262     tuning QString's memory usage. In general, you will rarely ever
1263     need to call this function.
1264
1265     \sa reserve(), capacity()
1266 */
1267
1268 void QString::reallocData(uint alloc, bool grow)
1269 {
1270     if (grow)
1271         alloc = qAllocMore(alloc * sizeof(QChar), sizeof(Data)) / sizeof(QChar);
1272
1273     if (d->ref.isShared() || IS_RAW_DATA(d)) {
1274         Data::AllocationOptions allocOptions(d->capacityReserved ? Data::CapacityReserved : 0);
1275         Data *x = Data::allocate(alloc, allocOptions);
1276         Q_CHECK_PTR(x);
1277         x->size = qMin(int(alloc) - 1, d->size);
1278         ::memcpy(x->data(), d->data(), x->size * sizeof(QChar));
1279         x->data()[x->size] = 0;
1280         if (!d->ref.deref())
1281             Data::deallocate(d);
1282         d = x;
1283     } else {
1284         Data *p = static_cast<Data *>(::realloc(d, sizeof(Data) + alloc * sizeof(QChar)));
1285         Q_CHECK_PTR(p);
1286         d = p;
1287         d->alloc = alloc;
1288         d->offset = sizeof(QStringData);
1289     }
1290 }
1291
1292 void QString::expand(int i)
1293 {
1294     int sz = d->size;
1295     resize(qMax(i + 1, sz));
1296     if (d->size - 1 > sz) {
1297         ushort *n = d->data() + d->size - 1;
1298         ushort *e = d->data() + sz;
1299         while (n != e)
1300            * --n = ' ';
1301     }
1302 }
1303
1304 /*! \fn void QString::clear()
1305
1306     Clears the contents of the string and makes it empty.
1307
1308     \sa resize(), isEmpty()
1309 */
1310
1311 /*! \fn QString &QString::operator=(const QString &other)
1312
1313     Assigns \a other to this string and returns a reference to this
1314     string.
1315 */
1316
1317 QString &QString::operator=(const QString &other)
1318 {
1319     other.d->ref.ref();
1320     if (!d->ref.deref())
1321         Data::deallocate(d);
1322     d = other.d;
1323     return *this;
1324 }
1325
1326
1327 /*! \fn QString &QString::operator=(QLatin1String str)
1328
1329     \overload operator=()
1330
1331     Assigns the Latin-1 string \a str to this string.
1332 */
1333
1334 /*! \fn QString &QString::operator=(const QByteArray &ba)
1335
1336     \overload operator=()
1337
1338     Assigns \a ba to this string. The byte array is converted to Unicode
1339     using the fromUtf8() function. This function stops conversion at the
1340     first NUL character found, or the end of the \a ba byte array.
1341
1342     You can disable this operator by defining \c
1343     QT_NO_CAST_FROM_ASCII when you compile your applications. This
1344     can be useful if you want to ensure that all user-visible strings
1345     go through QObject::tr(), for example.
1346 */
1347
1348 /*! \fn QString &QString::operator=(const char *str)
1349
1350     \overload operator=()
1351
1352     Assigns \a str to this string. The const char pointer is converted
1353     to Unicode using the fromUtf8() function.
1354
1355     You can disable this operator by defining \c
1356     QT_NO_CAST_FROM_ASCII when you compile your applications. This
1357     can be useful if you want to ensure that all user-visible strings
1358     go through QObject::tr(), for example.
1359 */
1360
1361 /*! \fn QString &QString::operator=(char ch)
1362
1363     \overload operator=()
1364
1365     Assigns character \a ch to this string. Note that the character is
1366     converted to Unicode using the fromLatin1() function, unlike other 8-bit
1367     functions that operate on UTF-8 data.
1368
1369     You can disable this operator by defining \c
1370     QT_NO_CAST_FROM_ASCII when you compile your applications. This
1371     can be useful if you want to ensure that all user-visible strings
1372     go through QObject::tr(), for example.
1373 */
1374
1375 /*!
1376     \overload operator=()
1377
1378     Sets the string to contain the single character \a ch.
1379 */
1380 QString &QString::operator=(QChar ch)
1381 {
1382     return operator=(QString(ch));
1383 }
1384
1385 /*!
1386      \fn QString& QString::insert(int position, const QString &str)
1387
1388     Inserts the string \a str at the given index \a position and
1389     returns a reference to this string.
1390
1391     Example:
1392
1393     \snippet qstring/main.cpp 26
1394
1395     If the given \a position is greater than size(), the array is
1396     first extended using resize().
1397
1398     \sa append(), prepend(), replace(), remove()
1399 */
1400
1401
1402 /*!
1403     \fn QString &QString::insert(int position, QLatin1String str)
1404     \overload insert()
1405
1406     Inserts the Latin-1 string \a str at the given index \a position.
1407 */
1408 QString &QString::insert(int i, QLatin1String str)
1409 {
1410     const uchar *s = (const uchar *)str.latin1();
1411     if (i < 0 || !s || !(*s))
1412         return *this;
1413
1414     int len = str.size();
1415     expand(qMax(d->size, i) + len - 1);
1416
1417     ::memmove(d->data() + i + len, d->data() + i, (d->size - i - len) * sizeof(QChar));
1418     for (int j = 0; j < len; ++j)
1419         d->data()[i + j] = s[j];
1420     return *this;
1421 }
1422
1423 /*!
1424     \fn QString& QString::insert(int position, const QChar *unicode, int size)
1425     \overload insert()
1426
1427     Inserts the first \a size characters of the QChar array \a unicode
1428     at the given index \a position in the string.
1429 */
1430 QString& QString::insert(int i, const QChar *unicode, int size)
1431 {
1432     if (i < 0 || size <= 0)
1433         return *this;
1434
1435     const ushort *s = (const ushort *)unicode;
1436     if (s >= d->data() && s < d->data() + d->alloc) {
1437         // Part of me - take a copy
1438         ushort *tmp = static_cast<ushort *>(::malloc(size * sizeof(QChar)));
1439         Q_CHECK_PTR(tmp);
1440         memcpy(tmp, s, size * sizeof(QChar));
1441         insert(i, reinterpret_cast<const QChar *>(tmp), size);
1442         ::free(tmp);
1443         return *this;
1444     }
1445
1446     expand(qMax(d->size, i) + size - 1);
1447
1448     ::memmove(d->data() + i + size, d->data() + i, (d->size - i - size) * sizeof(QChar));
1449     memcpy(d->data() + i, s, size * sizeof(QChar));
1450     return *this;
1451 }
1452
1453 /*!
1454     \fn QString& QString::insert(int position, QChar ch)
1455     \overload insert()
1456
1457     Inserts \a ch at the given index \a position in the string.
1458 */
1459
1460 QString& QString::insert(int i, QChar ch)
1461 {
1462     if (i < 0)
1463         i += d->size;
1464     if (i < 0)
1465         return *this;
1466     expand(qMax(i, d->size));
1467     ::memmove(d->data() + i + 1, d->data() + i, (d->size - i - 1) * sizeof(QChar));
1468     d->data()[i] = ch.unicode();
1469     return *this;
1470 }
1471
1472 /*!
1473     Appends the string \a str onto the end of this string.
1474
1475     Example:
1476
1477     \snippet qstring/main.cpp 9
1478
1479     This is the same as using the insert() function:
1480
1481     \snippet qstring/main.cpp 10
1482
1483     The append() function is typically very fast (\l{constant time}),
1484     because QString preallocates extra space at the end of the string
1485     data so it can grow without reallocating the entire string each
1486     time.
1487
1488     \sa operator+=(), prepend(), insert()
1489 */
1490 QString &QString::append(const QString &str)
1491 {
1492     if (str.d != Data::sharedNull()) {
1493         if (d == Data::sharedNull()) {
1494             operator=(str);
1495         } else {
1496             if (d->ref.isShared() || uint(d->size + str.d->size) + 1u > d->alloc)
1497                 reallocData(uint(d->size + str.d->size) + 1u, true);
1498             memcpy(d->data() + d->size, str.d->data(), str.d->size * sizeof(QChar));
1499             d->size += str.d->size;
1500             d->data()[d->size] = '\0';
1501         }
1502     }
1503     return *this;
1504 }
1505
1506 /*!
1507   \overload append()
1508
1509   Appends the Latin-1 string \a str to this string.
1510 */
1511 QString &QString::append(QLatin1String str)
1512 {
1513     const uchar *s = (const uchar *)str.latin1();
1514     if (s) {
1515         int len = str.size();
1516         if (d->ref.isShared() || uint(d->size + len) + 1u > d->alloc)
1517             reallocData(uint(d->size + len) + 1u, true);
1518         ushort *i = d->data() + d->size;
1519         while ((*i++ = *s++))
1520             ;
1521         d->size += len;
1522     }
1523     return *this;
1524 }
1525
1526 /*! \fn QString &QString::append(const QByteArray &ba)
1527
1528     \overload append()
1529
1530     Appends the byte array \a ba to this string. The given byte array
1531     is converted to Unicode using the fromUtf8() function.
1532
1533     You can disable this function by defining \c QT_NO_CAST_FROM_ASCII
1534     when you compile your applications. This can be useful if you want
1535     to ensure that all user-visible strings go through QObject::tr(),
1536     for example.
1537 */
1538
1539 /*! \fn QString &QString::append(const char *str)
1540
1541     \overload append()
1542
1543     Appends the string \a str to this string. The given const char
1544     pointer is converted to Unicode using the fromUtf8() function.
1545
1546     You can disable this function by defining \c QT_NO_CAST_FROM_ASCII
1547     when you compile your applications. This can be useful if you want
1548     to ensure that all user-visible strings go through QObject::tr(),
1549     for example.
1550 */
1551
1552 /*!
1553     \overload append()
1554
1555     Appends the character \a ch to this string.
1556 */
1557 QString &QString::append(QChar ch)
1558 {
1559     if (d->ref.isShared() || uint(d->size) + 2u > d->alloc)
1560         reallocData(uint(d->size) + 2u, true);
1561     d->data()[d->size++] = ch.unicode();
1562     d->data()[d->size] = '\0';
1563     return *this;
1564 }
1565
1566 /*! \fn QString &QString::prepend(const QString &str)
1567
1568     Prepends the string \a str to the beginning of this string and
1569     returns a reference to this string.
1570
1571     Example:
1572
1573     \snippet qstring/main.cpp 36
1574
1575     \sa append(), insert()
1576 */
1577
1578 /*! \fn QString &QString::prepend(QLatin1String str)
1579
1580     \overload prepend()
1581
1582     Prepends the Latin-1 string \a str to this string.
1583 */
1584
1585 /*! \fn QString &QString::prepend(const QByteArray &ba)
1586
1587     \overload prepend()
1588
1589     Prepends the byte array \a ba to this string. The byte array is
1590     converted to Unicode using the fromUtf8() function.
1591
1592     You can disable this function by defining \c
1593     QT_NO_CAST_FROM_ASCII when you compile your applications. This
1594     can be useful if you want to ensure that all user-visible strings
1595     go through QObject::tr(), for example.
1596 */
1597
1598 /*! \fn QString &QString::prepend(const char *str)
1599
1600     \overload prepend()
1601
1602     Prepends the string \a str to this string. The const char pointer
1603     is converted to Unicode using the fromUtf8() function.
1604
1605     You can disable this function by defining \c
1606     QT_NO_CAST_FROM_ASCII when you compile your applications. This
1607     can be useful if you want to ensure that all user-visible strings
1608     go through QObject::tr(), for example.
1609 */
1610
1611 /*! \fn QString &QString::prepend(QChar ch)
1612
1613     \overload prepend()
1614
1615     Prepends the character \a ch to this string.
1616 */
1617
1618 /*!
1619   \fn QString &QString::remove(int position, int n)
1620
1621   Removes \a n characters from the string, starting at the given \a
1622   position index, and returns a reference to the string.
1623
1624   If the specified \a position index is within the string, but \a
1625   position + \a n is beyond the end of the string, the string is
1626   truncated at the specified \a position.
1627
1628   \snippet qstring/main.cpp 37
1629
1630   \sa insert(), replace()
1631 */
1632 QString &QString::remove(int pos, int len)
1633 {
1634     if (pos < 0)  // count from end of string
1635         pos += d->size;
1636     if (pos < 0 || pos >= d->size) {
1637         // range problems
1638     } else if (len >= d->size - pos) {
1639         resize(pos); // truncate
1640     } else if (len > 0) {
1641         detach();
1642         memmove(d->data() + pos, d->data() + pos + len,
1643                 (d->size - pos - len + 1) * sizeof(ushort));
1644         d->size -= len;
1645     }
1646     return *this;
1647 }
1648
1649 /*!
1650   Removes every occurrence of the given \a str string in this
1651   string, and returns a reference to this string.
1652
1653   If \a cs is Qt::CaseSensitive (default), the search is
1654   case sensitive; otherwise the search is case insensitive.
1655
1656   This is the same as \c replace(str, "", cs).
1657
1658   \sa replace()
1659 */
1660 QString &QString::remove(const QString &str, Qt::CaseSensitivity cs)
1661 {
1662     if (str.d->size) {
1663         int i = 0;
1664         while ((i = indexOf(str, i, cs)) != -1)
1665             remove(i, str.d->size);
1666     }
1667     return *this;
1668 }
1669
1670 /*!
1671   Removes every occurrence of the character \a ch in this string, and
1672   returns a reference to this string.
1673
1674   If \a cs is Qt::CaseSensitive (default), the search is case
1675   sensitive; otherwise the search is case insensitive.
1676
1677   Example:
1678
1679   \snippet qstring/main.cpp 38
1680
1681   This is the same as \c replace(ch, "", cs).
1682
1683   \sa replace()
1684 */
1685 QString &QString::remove(QChar ch, Qt::CaseSensitivity cs)
1686 {
1687     int i = 0;
1688     ushort c = ch.unicode();
1689     if (cs == Qt::CaseSensitive) {
1690         while (i < d->size)
1691             if (d->data()[i] == ch)
1692                 remove(i, 1);
1693             else
1694                 i++;
1695     } else {
1696         c = foldCase(c);
1697         while (i < d->size)
1698             if (foldCase(d->data()[i]) == c)
1699                 remove(i, 1);
1700             else
1701                 i++;
1702     }
1703     return *this;
1704 }
1705
1706 /*!
1707   \fn QString &QString::remove(const QRegExp &rx)
1708
1709   Removes every occurrence of the regular expression \a rx in the
1710   string, and returns a reference to the string. For example:
1711
1712   \snippet qstring/main.cpp 39
1713
1714   \sa indexOf(), lastIndexOf(), replace()
1715 */
1716
1717 /*!
1718   \fn QString &QString::remove(const QRegularExpression &re)
1719   \since 5.0
1720
1721   Removes every occurrence of the regular expression \a re in the
1722   string, and returns a reference to the string. For example:
1723
1724   \snippet qstring/main.cpp 96
1725
1726   \sa indexOf(), lastIndexOf(), replace()
1727 */
1728
1729 /*!
1730   \fn QString &QString::replace(int position, int n, const QString &after)
1731
1732   Replaces \a n characters beginning at index \a position with
1733   the string \a after and returns a reference to this string.
1734
1735   Example:
1736
1737   \snippet qstring/main.cpp 40
1738
1739   \sa insert(), remove()
1740 */
1741 QString &QString::replace(int pos, int len, const QString &after)
1742 {
1743     QString copy = after;
1744     return replace(pos, len, copy.constData(), copy.length());
1745 }
1746
1747 /*!
1748   \fn QString &QString::replace(int position, int n, const QChar *unicode, int size)
1749   \overload replace()
1750   Replaces \a n characters beginning at index \a position with the
1751   first \a size characters of the QChar array \a unicode and returns a
1752   reference to this string.
1753 */
1754 QString &QString::replace(int pos, int len, const QChar *unicode, int size)
1755 {
1756     if (pos < 0 || pos > d->size)
1757         return *this;
1758     if (pos + len > d->size)
1759         len = d->size - pos;
1760
1761     uint index = pos;
1762     replace_helper(&index, 1, len, unicode, size);
1763     return *this;
1764 }
1765
1766 /*!
1767   \fn QString &QString::replace(int position, int n, QChar after)
1768   \overload replace()
1769
1770   Replaces \a n characters beginning at index \a position with the
1771   character \a after and returns a reference to this string.
1772 */
1773 QString &QString::replace(int pos, int len, QChar after)
1774 {
1775     return replace(pos, len, &after, 1);
1776 }
1777
1778 /*!
1779   \overload replace()
1780   Replaces every occurrence of the string \a before with the string \a
1781   after and returns a reference to this string.
1782
1783   If \a cs is Qt::CaseSensitive (default), the search is case
1784   sensitive; otherwise the search is case insensitive.
1785
1786   Example:
1787
1788   \snippet qstring/main.cpp 41
1789
1790   \note The replacement text is not rescanned after it is inserted.
1791
1792   Example:
1793
1794   \snippet qstring/main.cpp 86
1795 */
1796 QString &QString::replace(const QString &before, const QString &after, Qt::CaseSensitivity cs)
1797 {
1798     return replace(before.constData(), before.size(), after.constData(), after.size(), cs);
1799 }
1800
1801 /*!
1802   \internal
1803  */
1804 void QString::replace_helper(uint *indices, int nIndices, int blen, const QChar *after, int alen)
1805 {
1806     // copy *after in case it lies inside our own d->data() area
1807     // (which we could possibly invalidate via a realloc or corrupt via memcpy operations.)
1808     QChar *afterBuffer = const_cast<QChar *>(after);
1809     if (after >= reinterpret_cast<QChar *>(d->data()) && after < reinterpret_cast<QChar *>(d->data()) + d->size) {
1810         afterBuffer = static_cast<QChar *>(::malloc(alen*sizeof(QChar)));
1811         Q_CHECK_PTR(afterBuffer);
1812         ::memcpy(afterBuffer, after, alen*sizeof(QChar));
1813     }
1814
1815     QT_TRY {
1816         if (blen == alen) {
1817             // replace in place
1818             detach();
1819             for (int i = 0; i < nIndices; ++i)
1820                 memcpy(d->data() + indices[i], afterBuffer, alen * sizeof(QChar));
1821         } else if (alen < blen) {
1822             // replace from front
1823             detach();
1824             uint to = indices[0];
1825             if (alen)
1826                 memcpy(d->data()+to, after, alen*sizeof(QChar));
1827             to += alen;
1828             uint movestart = indices[0] + blen;
1829             for (int i = 1; i < nIndices; ++i) {
1830                 int msize = indices[i] - movestart;
1831                 if (msize > 0) {
1832                     memmove(d->data() + to, d->data() + movestart, msize * sizeof(QChar));
1833                     to += msize;
1834                 }
1835                 if (alen) {
1836                     memcpy(d->data() + to, afterBuffer, alen*sizeof(QChar));
1837                     to += alen;
1838                 }
1839                 movestart = indices[i] + blen;
1840             }
1841             int msize = d->size - movestart;
1842             if (msize > 0)
1843                 memmove(d->data() + to, d->data() + movestart, msize * sizeof(QChar));
1844             resize(d->size - nIndices*(blen-alen));
1845         } else {
1846             // replace from back
1847             int adjust = nIndices*(alen-blen);
1848             int newLen = d->size + adjust;
1849             int moveend = d->size;
1850             resize(newLen);
1851
1852             while (nIndices) {
1853                 --nIndices;
1854                 int movestart = indices[nIndices] + blen;
1855                 int insertstart = indices[nIndices] + nIndices*(alen-blen);
1856                 int moveto = insertstart + alen;
1857                 memmove(d->data() + moveto, d->data() + movestart,
1858                         (moveend - movestart)*sizeof(QChar));
1859                 memcpy(d->data() + insertstart, afterBuffer, alen*sizeof(QChar));
1860                 moveend = movestart-blen;
1861             }
1862         }
1863     } QT_CATCH(const std::bad_alloc &) {
1864         if (afterBuffer != after)
1865             ::free(afterBuffer);
1866         QT_RETHROW;
1867     }
1868     if (afterBuffer != after)
1869         ::free(afterBuffer);
1870 }
1871
1872 /*!
1873   \since 4.5
1874   \overload replace()
1875
1876   Replaces each occurrence in this string of the first \a blen
1877   characters of \a before with the first \a alen characters of \a
1878   after and returns a reference to this string.
1879
1880   If \a cs is Qt::CaseSensitive (default), the search is case
1881   sensitive; otherwise the search is case insensitive.
1882 */
1883 QString &QString::replace(const QChar *before, int blen,
1884                           const QChar *after, int alen,
1885                           Qt::CaseSensitivity cs)
1886 {
1887     if (d->size == 0) {
1888         if (blen)
1889             return *this;
1890     } else {
1891         if (cs == Qt::CaseSensitive && before == after && blen == alen)
1892             return *this;
1893     }
1894     if (alen == 0 && blen == 0)
1895         return *this;
1896
1897     QStringMatcher matcher(before, blen, cs);
1898
1899     int index = 0;
1900     while (1) {
1901         uint indices[1024];
1902         uint pos = 0;
1903         while (pos < 1023) {
1904             index = matcher.indexIn(*this, index);
1905             if (index == -1)
1906                 break;
1907             indices[pos++] = index;
1908             index += blen;
1909             // avoid infinite loop
1910             if (!blen)
1911                 index++;
1912         }
1913         if (!pos)
1914             break;
1915
1916         replace_helper(indices, pos, blen, after, alen);
1917
1918         if (index == -1)
1919             break;
1920         // index has to be adjusted in case we get back into the loop above.
1921         index += pos*(alen-blen);
1922     }
1923
1924     return *this;
1925 }
1926
1927 /*!
1928   \overload replace()
1929   Replaces every occurrence of the character \a ch in the string with
1930   \a after and returns a reference to this string.
1931
1932   If \a cs is Qt::CaseSensitive (default), the search is case
1933   sensitive; otherwise the search is case insensitive.
1934 */
1935 QString& QString::replace(QChar ch, const QString &after, Qt::CaseSensitivity cs)
1936 {
1937     if (after.d->size == 0)
1938         return remove(ch, cs);
1939
1940     if (after.d->size == 1)
1941         return replace(ch, after.d->data()[0], cs);
1942
1943     if (d->size == 0)
1944         return *this;
1945
1946     ushort cc = (cs == Qt::CaseSensitive ? ch.unicode() : ch.toCaseFolded().unicode());
1947
1948     int index = 0;
1949     while (1) {
1950         uint indices[1024];
1951         uint pos = 0;
1952         if (cs == Qt::CaseSensitive) {
1953             while (pos < 1023 && index < d->size) {
1954                 if (d->data()[index] == cc)
1955                     indices[pos++] = index;
1956                 index++;
1957             }
1958         } else {
1959             while (pos < 1023 && index < d->size) {
1960                 if (QChar::toCaseFolded(d->data()[index]) == cc)
1961                     indices[pos++] = index;
1962                 index++;
1963             }
1964         }
1965         if (!pos)
1966             break;
1967
1968         replace_helper(indices, pos, 1, after.constData(), after.d->size);
1969
1970         if (index == -1)
1971             break;
1972         // index has to be adjusted in case we get back into the loop above.
1973         index += pos*(after.d->size - 1);
1974     }
1975     return *this;
1976 }
1977
1978 /*!
1979   \overload replace()
1980   Replaces every occurrence of the character \a before with the
1981   character \a after and returns a reference to this string.
1982
1983   If \a cs is Qt::CaseSensitive (default), the search is case
1984   sensitive; otherwise the search is case insensitive.
1985 */
1986 QString& QString::replace(QChar before, QChar after, Qt::CaseSensitivity cs)
1987 {
1988     ushort a = after.unicode();
1989     ushort b = before.unicode();
1990     if (d->size) {
1991         detach();
1992         ushort *i = d->data();
1993         const ushort *e = i + d->size;
1994         if (cs == Qt::CaseSensitive) {
1995             for (; i != e; ++i)
1996                 if (*i == b)
1997                     *i = a;
1998         } else {
1999             b = foldCase(b);
2000             for (; i != e; ++i)
2001                 if (foldCase(*i) == b)
2002                     *i = a;
2003         }
2004     }
2005     return *this;
2006 }
2007
2008 /*!
2009   \since 4.5
2010   \overload replace()
2011
2012   Replaces every occurrence of the string \a before with the string \a
2013   after and returns a reference to this string.
2014
2015   If \a cs is Qt::CaseSensitive (default), the search is case
2016   sensitive; otherwise the search is case insensitive.
2017
2018   \note The text is not rescanned after a replacement.
2019 */
2020 QString &QString::replace(QLatin1String before, QLatin1String after, Qt::CaseSensitivity cs)
2021 {
2022     int alen = after.size();
2023     QVarLengthArray<ushort> a(alen);
2024     for (int i = 0; i < alen; ++i)
2025         a[i] = (uchar)after.latin1()[i];
2026     int blen = before.size();
2027     QVarLengthArray<ushort> b(blen);
2028     for (int i = 0; i < blen; ++i)
2029         b[i] = (uchar)before.latin1()[i];
2030     return replace((const QChar *)b.data(), blen, (const QChar *)a.data(), alen, cs);
2031 }
2032
2033 /*!
2034   \since 4.5
2035   \overload replace()
2036
2037   Replaces every occurrence of the string \a before with the string \a
2038   after and returns a reference to this string.
2039
2040   If \a cs is Qt::CaseSensitive (default), the search is case
2041   sensitive; otherwise the search is case insensitive.
2042
2043   \note The text is not rescanned after a replacement.
2044 */
2045 QString &QString::replace(QLatin1String before, const QString &after, Qt::CaseSensitivity cs)
2046 {
2047     int blen = before.size();
2048     QVarLengthArray<ushort> b(blen);
2049     for (int i = 0; i < blen; ++i)
2050         b[i] = (uchar)before.latin1()[i];
2051     return replace((const QChar *)b.data(), blen, after.constData(), after.d->size, cs);
2052 }
2053
2054 /*!
2055   \since 4.5
2056   \overload replace()
2057
2058   Replaces every occurrence of the string \a before with the string \a
2059   after and returns a reference to this string.
2060
2061   If \a cs is Qt::CaseSensitive (default), the search is case
2062   sensitive; otherwise the search is case insensitive.
2063
2064   \note The text is not rescanned after a replacement.
2065 */
2066 QString &QString::replace(const QString &before, QLatin1String after, Qt::CaseSensitivity cs)
2067 {
2068     int alen = after.size();
2069     QVarLengthArray<ushort> a(alen);
2070     for (int i = 0; i < alen; ++i)
2071         a[i] = (uchar)after.latin1()[i];
2072     return replace(before.constData(), before.d->size, (const QChar *)a.data(), alen, cs);
2073 }
2074
2075 /*!
2076   \since 4.5
2077   \overload replace()
2078
2079   Replaces every occurrence of the character \a c with the string \a
2080   after and returns a reference to this string.
2081
2082   If \a cs is Qt::CaseSensitive (default), the search is case
2083   sensitive; otherwise the search is case insensitive.
2084
2085   \note The text is not rescanned after a replacement.
2086 */
2087 QString &QString::replace(QChar c, QLatin1String after, Qt::CaseSensitivity cs)
2088 {
2089     int alen = after.size();
2090     QVarLengthArray<ushort> a(alen);
2091     for (int i = 0; i < alen; ++i)
2092         a[i] = (uchar)after.latin1()[i];
2093     return replace(&c, 1, (const QChar *)a.data(), alen, cs);
2094 }
2095
2096
2097 /*!
2098   \relates QString
2099   Returns true if string \a s1 is equal to string \a s2; otherwise
2100   returns false.
2101
2102   The comparison is based exclusively on the numeric Unicode values of
2103   the characters and is very fast, but is not what a human would
2104   expect. Consider sorting user-interface strings with
2105   localeAwareCompare().
2106 */
2107 bool operator==(const QString &s1, const QString &s2)
2108 {
2109     if (s1.d->size != s2.d->size)
2110         return false;
2111
2112     return qMemEquals(s1.d->data(), s2.d->data(), s1.d->size);
2113 }
2114
2115 /*!
2116     \overload operator==()
2117 */
2118 bool QString::operator==(QLatin1String other) const
2119 {
2120     if (d->size != other.size())
2121         return false;
2122
2123     if (!other.size())
2124         return isEmpty();
2125
2126     const ushort *uc = d->data();
2127     const ushort *e = uc + d->size;
2128     const uchar *c = (uchar *)other.latin1();
2129
2130     while (uc < e) {
2131         if (*uc != *c)
2132             return false;
2133         ++uc;
2134         ++c;
2135     }
2136     return true;
2137 }
2138
2139 /*! \fn bool QString::operator==(const QByteArray &other) const
2140
2141     \overload operator==()
2142
2143     The \a other byte array is converted to a QString using the
2144     fromUtf8() function. This function stops conversion at the
2145     first NUL character found, or the end of the byte array.
2146
2147     You can disable this operator by defining \c
2148     QT_NO_CAST_FROM_ASCII when you compile your applications. This
2149     can be useful if you want to ensure that all user-visible strings
2150     go through QObject::tr(), for example.
2151 */
2152
2153 /*! \fn bool QString::operator==(const char *other) const
2154
2155     \overload operator==()
2156
2157     The \a other const char pointer is converted to a QString using
2158     the fromUtf8() function.
2159
2160     You can disable this operator by defining \c
2161     QT_NO_CAST_FROM_ASCII when you compile your applications. This
2162     can be useful if you want to ensure that all user-visible strings
2163     go through QObject::tr(), for example.
2164 */
2165
2166 /*!
2167    \relates QString
2168     Returns true if string \a s1 is lexically less than string
2169     \a s2; otherwise returns false.
2170
2171     The comparison is based exclusively on the numeric Unicode values
2172     of the characters and is very fast, but is not what a human would
2173     expect. Consider sorting user-interface strings using the
2174     QString::localeAwareCompare() function.
2175 */
2176 bool operator<(const QString &s1, const QString &s2)
2177 {
2178     return ucstrcmp(s1.constData(), s1.length(), s2.constData(), s2.length()) < 0;
2179 }
2180
2181 /*!
2182     \overload operator<()
2183 */
2184 bool QString::operator<(QLatin1String other) const
2185 {
2186     const uchar *c = (uchar *) other.latin1();
2187     if (!c || *c == 0)
2188         return false;
2189
2190     const ushort *uc = d->data();
2191     const ushort *e = uc + qMin(d->size, other.size());
2192
2193     while (uc < e) {
2194         if (*uc != *c)
2195             break;
2196         ++uc;
2197         ++c;
2198     }
2199     return (uc == e ? d->size < other.size() : *uc < *c);
2200 }
2201
2202 /*! \fn bool QString::operator<(const QByteArray &other) const
2203
2204     \overload operator<()
2205
2206     The \a other byte array is converted to a QString using the
2207     fromUtf8() function. If any NUL characters ('\\0') are embedded
2208     in the byte array, they will be included in the transformation.
2209
2210     You can disable this operator by defining \c
2211     QT_NO_CAST_FROM_ASCII when you compile your applications. This
2212     can be useful if you want to ensure that all user-visible strings
2213     go through QObject::tr(), for example.
2214 */
2215
2216 /*! \fn bool QString::operator<(const char *other) const
2217
2218     \overload operator<()
2219
2220     The \a other const char pointer is converted to a QString using
2221     the fromUtf8() function.
2222
2223     You can disable this operator by defining \c
2224     QT_NO_CAST_FROM_ASCII when you compile your applications. This
2225     can be useful if you want to ensure that all user-visible strings
2226     go through QObject::tr(), for example.
2227 */
2228
2229 /*! \fn bool QString::operator<=(const QString &s1, const QString &s2)
2230
2231     Returns true if string \a s1 is lexically less than or equal to
2232     string \a s2; otherwise returns false.
2233
2234     The comparison is based exclusively on the numeric Unicode values
2235     of the characters and is very fast, but is not what a human would
2236     expect. Consider sorting user-interface strings with
2237     localeAwareCompare().
2238 */
2239
2240 /*! \fn bool QString::operator<=(QLatin1String other) const
2241
2242     \overload operator<=()
2243 */
2244
2245 /*! \fn bool QString::operator<=(const QByteArray &other) const
2246
2247     \overload operator<=()
2248
2249     The \a other byte array is converted to a QString using the
2250     fromUtf8() function. If any NUL characters ('\\0') are embedded
2251     in the byte array, they will be included in the transformation.
2252
2253     You can disable this operator by defining \c
2254     QT_NO_CAST_FROM_ASCII when you compile your applications. This
2255     can be useful if you want to ensure that all user-visible strings
2256     go through QObject::tr(), for example.
2257 */
2258
2259 /*! \fn bool QString::operator<=(const char *other) const
2260
2261     \overload operator<=()
2262
2263     The \a other const char pointer is converted to a QString using
2264     the fromUtf8() function.
2265
2266     You can disable this operator by defining \c
2267     QT_NO_CAST_FROM_ASCII when you compile your applications. This
2268     can be useful if you want to ensure that all user-visible strings
2269     go through QObject::tr(), for example.
2270 */
2271
2272 /*! \fn bool QString::operator>(const QString &s1, const QString &s2)
2273
2274     Returns true if string \a s1 is lexically greater than string \a
2275     s2; otherwise returns false.
2276
2277     The comparison is based exclusively on the numeric Unicode values
2278     of the characters and is very fast, but is not what a human would
2279     expect. Consider sorting user-interface strings with
2280     localeAwareCompare().
2281 */
2282
2283 /*!
2284     \overload operator>()
2285 */
2286 bool QString::operator>(QLatin1String other) const
2287 {
2288     const uchar *c = (uchar *) other.latin1();
2289     if (!c || *c == '\0')
2290         return !isEmpty();
2291
2292     const ushort *uc = d->data();
2293     const ushort *e = uc + qMin(d->size, other.size());
2294
2295     while (uc < e) {
2296         if (*uc != *c)
2297             break;
2298         ++uc;
2299         ++c;
2300     }
2301     return (uc == e) ? d->size > other.size() : *uc > *c;
2302 }
2303
2304 /*! \fn bool QString::operator>(const QByteArray &other) const
2305
2306     \overload operator>()
2307
2308     The \a other byte array is converted to a QString using the
2309     fromUtf8() function. If any NUL characters ('\\0') are embedded
2310     in the byte array, they will be included in the transformation.
2311
2312     You can disable this operator by defining \c
2313     QT_NO_CAST_FROM_ASCII when you compile your applications. This
2314     can be useful if you want to ensure that all user-visible strings
2315     go through QObject::tr(), for example.
2316 */
2317
2318 /*! \fn bool QString::operator>(const char *other) const
2319
2320     \overload operator>()
2321
2322     The \a other const char pointer is converted to a QString using
2323     the fromUtf8() function.
2324
2325     You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
2326     when you compile your applications. This can be useful if you want
2327     to ensure that all user-visible strings go through QObject::tr(),
2328     for example.
2329 */
2330
2331 /*! \fn bool operator>=(const QString &s1, const QString &s2)
2332     \relates QString
2333
2334     Returns true if string \a s1 is lexically greater than or equal to
2335     string \a s2; otherwise returns false.
2336
2337     The comparison is based exclusively on the numeric Unicode values
2338     of the characters and is very fast, but is not what a human would
2339     expect. Consider sorting user-interface strings with
2340     localeAwareCompare().
2341 */
2342
2343 /*! \fn bool QString::operator>=(QLatin1String other) const
2344
2345     \overload operator>=()
2346 */
2347
2348 /*! \fn bool QString::operator>=(const QByteArray &other) const
2349
2350     \overload operator>=()
2351
2352     The \a other byte array is converted to a QString using the
2353     fromUtf8() function. If any NUL characters ('\\0') are embedded in
2354     the byte array, they will be included in the transformation.
2355
2356     You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
2357     when you compile your applications. This can be useful if you want
2358     to ensure that all user-visible strings go through QObject::tr(),
2359     for example.
2360 */
2361
2362 /*! \fn bool QString::operator>=(const char *other) const
2363
2364     \overload operator>=()
2365
2366     The \a other const char pointer is converted to a QString using
2367     the fromUtf8() function.
2368
2369     You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
2370     when you compile your applications. This can be useful if you want
2371     to ensure that all user-visible strings go through QObject::tr(),
2372     for example.
2373 */
2374
2375 /*! \fn bool operator!=(const QString &s1, const QString &s2)
2376     \relates QString
2377
2378     Returns true if string \a s1 is not equal to string \a s2;
2379     otherwise returns false.
2380
2381     The comparison is based exclusively on the numeric Unicode values
2382     of the characters and is very fast, but is not what a human would
2383     expect. Consider sorting user-interface strings with
2384     localeAwareCompare().
2385 */
2386
2387 /*! \fn bool QString::operator!=(QLatin1String other) const
2388
2389     \overload operator!=()
2390 */
2391
2392 /*! \fn bool QString::operator!=(const QByteArray &other) const
2393
2394     \overload operator!=()
2395
2396     The \a other byte array is converted to a QString using the
2397     fromUtf8() function. If any NUL characters ('\\0') are embedded
2398     in the byte array, they will be included in the transformation.
2399
2400     You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
2401     when you compile your applications. This can be useful if you want
2402     to ensure that all user-visible strings go through QObject::tr(),
2403     for example.
2404 */
2405
2406 /*! \fn bool QString::operator!=(const char *other) const
2407
2408     \overload operator!=()
2409
2410     The \a other const char pointer is converted to a QString using
2411     the fromUtf8() function.
2412
2413     You can disable this operator by defining \c
2414     QT_NO_CAST_FROM_ASCII when you compile your applications. This
2415     can be useful if you want to ensure that all user-visible strings
2416     go through QObject::tr(), for example.
2417 */
2418
2419 /*!
2420   Returns the index position of the first occurrence of the string \a
2421   str in this string, searching forward from index position \a
2422   from. Returns -1 if \a str is not found.
2423
2424   If \a cs is Qt::CaseSensitive (default), the search is case
2425   sensitive; otherwise the search is case insensitive.
2426
2427   Example:
2428
2429   \snippet qstring/main.cpp 24
2430
2431   If \a from is -1, the search starts at the last character; if it is
2432   -2, at the next to last character and so on.
2433
2434   \sa lastIndexOf(), contains(), count()
2435 */
2436 int QString::indexOf(const QString &str, int from, Qt::CaseSensitivity cs) const
2437 {
2438     return qFindString(unicode(), length(), from, str.unicode(), str.length(), cs);
2439 }
2440
2441 /*!
2442   \since 4.5
2443   Returns the index position of the first occurrence of the string \a
2444   str in this string, searching forward from index position \a
2445   from. Returns -1 if \a str is not found.
2446
2447   If \a cs is Qt::CaseSensitive (default), the search is case
2448   sensitive; otherwise the search is case insensitive.
2449
2450   Example:
2451
2452   \snippet qstring/main.cpp 24
2453
2454   If \a from is -1, the search starts at the last character; if it is
2455   -2, at the next to last character and so on.
2456
2457   \sa lastIndexOf(), contains(), count()
2458 */
2459
2460 int QString::indexOf(QLatin1String str, int from, Qt::CaseSensitivity cs) const
2461 {
2462     return qt_find_latin1_string(unicode(), size(), str, from, cs);
2463 }
2464
2465 int qFindString(
2466     const QChar *haystack0, int haystackLen, int from,
2467     const QChar *needle0, int needleLen, Qt::CaseSensitivity cs)
2468 {
2469     const int l = haystackLen;
2470     const int sl = needleLen;
2471     if (from < 0)
2472         from += l;
2473     if (uint(sl + from) > (uint)l)
2474         return -1;
2475     if (!sl)
2476         return from;
2477     if (!l)
2478         return -1;
2479
2480     if (sl == 1)
2481         return findChar(haystack0, haystackLen, needle0[0], from, cs);
2482
2483     /*
2484         We use the Boyer-Moore algorithm in cases where the overhead
2485         for the skip table should pay off, otherwise we use a simple
2486         hash function.
2487     */
2488     if (l > 500 && sl > 5)
2489         return qFindStringBoyerMoore(haystack0, haystackLen, from,
2490             needle0, needleLen, cs);
2491
2492     /*
2493         We use some hashing for efficiency's sake. Instead of
2494         comparing strings, we compare the hash value of str with that
2495         of a part of this QString. Only if that matches, we call
2496         ucstrncmp() or ucstrnicmp().
2497     */
2498     const ushort *needle = (const ushort *)needle0;
2499     const ushort *haystack = (const ushort *)haystack0 + from;
2500     const ushort *end = (const ushort *)haystack0 + (l-sl);
2501     const int sl_minus_1 = sl-1;
2502     int hashNeedle = 0, hashHaystack = 0, idx;
2503
2504     if (cs == Qt::CaseSensitive) {
2505         for (idx = 0; idx < sl; ++idx) {
2506             hashNeedle = ((hashNeedle<<1) + needle[idx]);
2507             hashHaystack = ((hashHaystack<<1) + haystack[idx]);
2508         }
2509         hashHaystack -= haystack[sl_minus_1];
2510
2511         while (haystack <= end) {
2512             hashHaystack += haystack[sl_minus_1];
2513             if (hashHaystack == hashNeedle
2514                  && ucstrncmp((const QChar *)needle, (const QChar *)haystack, sl) == 0)
2515                 return haystack - (const ushort *)haystack0;
2516
2517             REHASH(*haystack);
2518             ++haystack;
2519         }
2520     } else {
2521         const ushort *haystack_start = (const ushort *)haystack0;
2522         for (idx = 0; idx < sl; ++idx) {
2523             hashNeedle = (hashNeedle<<1) + foldCase(needle + idx, needle);
2524             hashHaystack = (hashHaystack<<1) + foldCase(haystack + idx, haystack_start);
2525         }
2526         hashHaystack -= foldCase(haystack + sl_minus_1, haystack_start);
2527
2528         while (haystack <= end) {
2529             hashHaystack += foldCase(haystack + sl_minus_1, haystack_start);
2530             if (hashHaystack == hashNeedle && ucstrnicmp(needle, haystack, sl) == 0)
2531                 return haystack - (const ushort *)haystack0;
2532
2533             REHASH(foldCase(haystack, haystack_start));
2534             ++haystack;
2535         }
2536     }
2537     return -1;
2538 }
2539
2540 /*!
2541     \overload indexOf()
2542
2543     Returns the index position of the first occurrence of the
2544     character \a ch in the string, searching forward from index
2545     position \a from. Returns -1 if \a ch could not be found.
2546 */
2547 int QString::indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
2548 {
2549     return findChar(unicode(), length(), ch, from, cs);
2550 }
2551
2552 /*!
2553     \since 4.8
2554
2555     \overload indexOf()
2556
2557     Returns the index position of the first occurrence of the string
2558     reference \a str in this string, searching forward from index
2559     position \a from. Returns -1 if \a str is not found.
2560
2561     If \a cs is Qt::CaseSensitive (default), the search is case
2562     sensitive; otherwise the search is case insensitive.
2563 */
2564 int QString::indexOf(const QStringRef &str, int from, Qt::CaseSensitivity cs) const
2565 {
2566     return qFindString(unicode(), length(), from, str.unicode(), str.length(), cs);
2567 }
2568
2569 static int lastIndexOfHelper(const ushort *haystack, int from, const ushort *needle, int sl, Qt::CaseSensitivity cs)
2570 {
2571     /*
2572         See indexOf() for explanations.
2573     */
2574
2575     const ushort *end = haystack;
2576     haystack += from;
2577     const int sl_minus_1 = sl-1;
2578     const ushort *n = needle+sl_minus_1;
2579     const ushort *h = haystack+sl_minus_1;
2580     int hashNeedle = 0, hashHaystack = 0, idx;
2581
2582     if (cs == Qt::CaseSensitive) {
2583         for (idx = 0; idx < sl; ++idx) {
2584             hashNeedle = ((hashNeedle<<1) + *(n-idx));
2585             hashHaystack = ((hashHaystack<<1) + *(h-idx));
2586         }
2587         hashHaystack -= *haystack;
2588
2589         while (haystack >= end) {
2590             hashHaystack += *haystack;
2591             if (hashHaystack == hashNeedle
2592                  && ucstrncmp((const QChar *)needle, (const QChar *)haystack, sl) == 0)
2593                 return haystack - end;
2594             --haystack;
2595             REHASH(haystack[sl]);
2596         }
2597     } else {
2598         for (idx = 0; idx < sl; ++idx) {
2599             hashNeedle = ((hashNeedle<<1) + foldCase(n-idx, needle));
2600             hashHaystack = ((hashHaystack<<1) + foldCase(h-idx, end));
2601         }
2602         hashHaystack -= foldCase(haystack, end);
2603
2604         while (haystack >= end) {
2605             hashHaystack += foldCase(haystack, end);
2606             if (hashHaystack == hashNeedle && ucstrnicmp(needle, haystack, sl) == 0)
2607                 return haystack - end;
2608             --haystack;
2609             REHASH(foldCase(haystack + sl, end));
2610         }
2611     }
2612     return -1;
2613 }
2614
2615 /*!
2616   Returns the index position of the last occurrence of the string \a
2617   str in this string, searching backward from index position \a
2618   from. If \a from is -1 (default), the search starts at the last
2619   character; if \a from is -2, at the next to last character and so
2620   on. Returns -1 if \a str is not found.
2621
2622   If \a cs is Qt::CaseSensitive (default), the search is case
2623   sensitive; otherwise the search is case insensitive.
2624
2625   Example:
2626
2627   \snippet qstring/main.cpp 29
2628
2629   \sa indexOf(), contains(), count()
2630 */
2631 int QString::lastIndexOf(const QString &str, int from, Qt::CaseSensitivity cs) const
2632 {
2633     const int sl = str.d->size;
2634     if (sl == 1)
2635         return lastIndexOf(QChar(str.d->data()[0]), from, cs);
2636
2637     const int l = d->size;
2638     if (from < 0)
2639         from += l;
2640     int delta = l-sl;
2641     if (from == l && sl == 0)
2642         return from;
2643     if (from < 0 || from >= l || delta < 0)
2644         return -1;
2645     if (from > delta)
2646         from = delta;
2647
2648     return lastIndexOfHelper(d->data(), from, str.d->data(), str.d->size, cs);
2649 }
2650
2651 /*!
2652   \since 4.5
2653   \overload lastIndexOf()
2654
2655   Returns the index position of the last occurrence of the string \a
2656   str in this string, searching backward from index position \a
2657   from. If \a from is -1 (default), the search starts at the last
2658   character; if \a from is -2, at the next to last character and so
2659   on. Returns -1 if \a str is not found.
2660
2661   If \a cs is Qt::CaseSensitive (default), the search is case
2662   sensitive; otherwise the search is case insensitive.
2663
2664   Example:
2665
2666   \snippet qstring/main.cpp 29
2667
2668   \sa indexOf(), contains(), count()
2669 */
2670 int QString::lastIndexOf(QLatin1String str, int from, Qt::CaseSensitivity cs) const
2671 {
2672     const int sl = str.size();
2673     if (sl == 1)
2674         return lastIndexOf(QLatin1Char(str.latin1()[0]), from, cs);
2675
2676     const int l = d->size;
2677     if (from < 0)
2678         from += l;
2679     int delta = l-sl;
2680     if (from == l && sl == 0)
2681         return from;
2682     if (from < 0 || from >= l || delta < 0)
2683         return -1;
2684     if (from > delta)
2685         from = delta;
2686
2687     QVarLengthArray<ushort> s(sl);
2688     for (int i = 0; i < sl; ++i)
2689         s[i] = str.latin1()[i];
2690
2691     return lastIndexOfHelper(d->data(), from, s.data(), sl, cs);
2692 }
2693
2694 /*!
2695   \overload lastIndexOf()
2696
2697   Returns the index position of the last occurrence of the character
2698   \a ch, searching backward from position \a from.
2699 */
2700 int QString::lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
2701 {
2702     return qt_last_index_of(unicode(), size(), ch, from, cs);
2703 }
2704
2705 /*!
2706   \since 4.8
2707   \overload lastIndexOf()
2708
2709   Returns the index position of the last occurrence of the string
2710   reference \a str in this string, searching backward from index
2711   position \a from. If \a from is -1 (default), the search starts at
2712   the last character; if \a from is -2, at the next to last character
2713   and so on. Returns -1 if \a str is not found.
2714
2715   If \a cs is Qt::CaseSensitive (default), the search is case
2716   sensitive; otherwise the search is case insensitive.
2717
2718   \sa indexOf(), contains(), count()
2719 */
2720 int QString::lastIndexOf(const QStringRef &str, int from, Qt::CaseSensitivity cs) const
2721 {
2722     const int sl = str.size();
2723     if (sl == 1)
2724         return lastIndexOf(str.at(0), from, cs);
2725
2726     const int l = d->size;
2727     if (from < 0)
2728         from += l;
2729     int delta = l - sl;
2730     if (from == l && sl == 0)
2731         return from;
2732     if (from < 0 || from >= l || delta < 0)
2733     return -1;
2734     if (from > delta)
2735         from = delta;
2736
2737     return lastIndexOfHelper(d->data(), from, reinterpret_cast<const ushort*>(str.unicode()),
2738                              str.size(), cs);
2739 }
2740
2741 #ifndef QT_NO_REGEXP
2742 struct QStringCapture
2743 {
2744     int pos;
2745     int len;
2746     int no;
2747 };
2748
2749 /*!
2750   \overload replace()
2751
2752   Replaces every occurrence of the regular expression \a rx in the
2753   string with \a after. Returns a reference to the string. For
2754   example:
2755
2756   \snippet qstring/main.cpp 42
2757
2758   For regular expressions containing \l{capturing parentheses},
2759   occurrences of \b{\\1}, \b{\\2}, ..., in \a after are replaced
2760   with \a{rx}.cap(1), cap(2), ...
2761
2762   \snippet qstring/main.cpp 43
2763
2764   \sa indexOf(), lastIndexOf(), remove(), QRegExp::cap()
2765 */
2766 QString& QString::replace(const QRegExp &rx, const QString &after)
2767 {
2768     QRegExp rx2(rx);
2769
2770     if (isEmpty() && rx2.indexIn(*this) == -1)
2771         return *this;
2772
2773     reallocData(uint(d->size) + 1u);
2774
2775     int index = 0;
2776     int numCaptures = rx2.captureCount();
2777     int al = after.length();
2778     QRegExp::CaretMode caretMode = QRegExp::CaretAtZero;
2779
2780     if (numCaptures > 0) {
2781         const QChar *uc = after.unicode();
2782         int numBackRefs = 0;
2783
2784         for (int i = 0; i < al - 1; i++) {
2785             if (uc[i] == QLatin1Char('\\')) {
2786                 int no = uc[i + 1].digitValue();
2787                 if (no > 0 && no <= numCaptures)
2788                     numBackRefs++;
2789             }
2790         }
2791
2792         /*
2793             This is the harder case where we have back-references.
2794         */
2795         if (numBackRefs > 0) {
2796             QVarLengthArray<QStringCapture, 16> captures(numBackRefs);
2797             int j = 0;
2798
2799             for (int i = 0; i < al - 1; i++) {
2800                 if (uc[i] == QLatin1Char('\\')) {
2801                     int no = uc[i + 1].digitValue();
2802                     if (no > 0 && no <= numCaptures) {
2803                         QStringCapture capture;
2804                         capture.pos = i;
2805                         capture.len = 2;
2806
2807                         if (i < al - 2) {
2808                             int secondDigit = uc[i + 2].digitValue();
2809                             if (secondDigit != -1 && ((no * 10) + secondDigit) <= numCaptures) {
2810                                 no = (no * 10) + secondDigit;
2811                                 ++capture.len;
2812                             }
2813                         }
2814
2815                         capture.no = no;
2816                         captures[j++] = capture;
2817                     }
2818                 }
2819             }
2820
2821             while (index <= length()) {
2822                 index = rx2.indexIn(*this, index, caretMode);
2823                 if (index == -1)
2824                     break;
2825
2826                 QString after2(after);
2827                 for (j = numBackRefs - 1; j >= 0; j--) {
2828                     const QStringCapture &capture = captures[j];
2829                     after2.replace(capture.pos, capture.len, rx2.cap(capture.no));
2830                 }
2831
2832                 replace(index, rx2.matchedLength(), after2);
2833                 index += after2.length();
2834
2835                 // avoid infinite loop on 0-length matches (e.g., QRegExp("[a-z]*"))
2836                 if (rx2.matchedLength() == 0)
2837                     ++index;
2838
2839                 caretMode = QRegExp::CaretWontMatch;
2840             }
2841             return *this;
2842         }
2843     }
2844
2845     /*
2846         This is the simple and optimized case where we don't have
2847         back-references.
2848     */
2849     while (index != -1) {
2850         struct {
2851             int pos;
2852             int length;
2853         } replacements[2048];
2854
2855         int pos = 0;
2856         int adjust = 0;
2857         while (pos < 2047) {
2858             index = rx2.indexIn(*this, index, caretMode);
2859             if (index == -1)
2860                 break;
2861             int ml = rx2.matchedLength();
2862             replacements[pos].pos = index;
2863             replacements[pos++].length = ml;
2864             index += ml;
2865             adjust += al - ml;
2866             // avoid infinite loop
2867             if (!ml)
2868                 index++;
2869         }
2870         if (!pos)
2871             break;
2872         replacements[pos].pos = d->size;
2873         int newlen = d->size + adjust;
2874
2875         // to continue searching at the right position after we did
2876         // the first round of replacements
2877         if (index != -1)
2878             index += adjust;
2879         QString newstring;
2880         newstring.reserve(newlen + 1);
2881         QChar *newuc = newstring.data();
2882         QChar *uc = newuc;
2883         int copystart = 0;
2884         int i = 0;
2885         while (i < pos) {
2886             int copyend = replacements[i].pos;
2887             int size = copyend - copystart;
2888             memcpy(uc, d->data() + copystart, size * sizeof(QChar));
2889             uc += size;
2890             memcpy(uc, after.d->data(), al * sizeof(QChar));
2891             uc += al;
2892             copystart = copyend + replacements[i].length;
2893             i++;
2894         }
2895         memcpy(uc, d->data() + copystart, (d->size - copystart) * sizeof(QChar));
2896         newstring.resize(newlen);
2897         *this = newstring;
2898         caretMode = QRegExp::CaretWontMatch;
2899     }
2900     return *this;
2901 }
2902 #endif
2903
2904 #ifndef QT_NO_REGEXP
2905 #ifndef QT_BOOTSTRAPPED
2906 /*!
2907   \overload replace()
2908   \since 5.0
2909
2910   Replaces every occurrence of the regular expression \a re in the
2911   string with \a after. Returns a reference to the string. For
2912   example:
2913
2914   \snippet qstring/main.cpp 87
2915
2916   For regular expressions containing capturing groups,
2917   occurrences of \b{\\1}, \b{\\2}, ..., in \a after are replaced
2918   with the string captured by the corresponding capturing group.
2919
2920   \snippet qstring/main.cpp 88
2921
2922   \sa indexOf(), lastIndexOf(), remove(), QRegularExpression, QRegularExpressionMatch
2923 */
2924 QString &QString::replace(const QRegularExpression &re, const QString &after)
2925 {
2926     if (!re.isValid()) {
2927         qWarning("QString::replace: invalid QRegularExpresssion object");
2928         return *this;
2929     }
2930
2931     const QString copy(*this);
2932     QRegularExpressionMatchIterator iterator = re.globalMatch(copy);
2933     if (!iterator.hasNext()) // no matches at all
2934         return *this;
2935
2936     reallocData(uint(d->size) + 1u);
2937
2938     int numCaptures = re.captureCount();
2939
2940     // 1. build the backreferences vector, holding where the backreferences
2941     // are in the replacement string
2942     QVector<QStringCapture> backReferences;
2943     const int al = after.length();
2944     const QChar *ac = after.unicode();
2945
2946     for (int i = 0; i < al - 1; i++) {
2947         if (ac[i] == QLatin1Char('\\')) {
2948             int no = ac[i + 1].digitValue();
2949             if (no > 0 && no <= numCaptures) {
2950                 QStringCapture backReference;
2951                 backReference.pos = i;
2952                 backReference.len = 2;
2953
2954                 if (i < al - 2) {
2955                     int secondDigit = ac[i + 2].digitValue();
2956                     if (secondDigit != -1 && ((no * 10) + secondDigit) <= numCaptures) {
2957                         no = (no * 10) + secondDigit;
2958                         ++backReference.len;
2959                     }
2960                 }
2961
2962                 backReference.no = no;
2963                 backReferences.append(backReference);
2964             }
2965         }
2966     }
2967
2968     // 2. iterate on the matches. For every match, copy in chunks
2969     // - the part before the match
2970     // - the after string, with the proper replacements for the backreferences
2971
2972     int newLength = 0; // length of the new string, with all the replacements
2973     int lastEnd = 0;
2974     QVector<QStringRef> chunks;
2975     while (iterator.hasNext()) {
2976         QRegularExpressionMatch match = iterator.next();
2977         int len;
2978         // add the part before the match
2979         len = match.capturedStart() - lastEnd;
2980         if (len > 0) {
2981             chunks << copy.midRef(lastEnd, len);
2982             newLength += len;
2983         }
2984
2985         lastEnd = 0;
2986         // add the after string, with replacements for the backreferences
2987         foreach (const QStringCapture &backReference, backReferences) {
2988             // part of "after" before the backreference
2989             len = backReference.pos - lastEnd;
2990             if (len > 0) {
2991                 chunks << after.midRef(lastEnd, len);
2992                 newLength += len;
2993             }
2994
2995             // backreference itself
2996             len = match.capturedLength(backReference.no);
2997             if (len > 0) {
2998                 chunks << copy.midRef(match.capturedStart(backReference.no), len);
2999                 newLength += len;
3000             }
3001
3002             lastEnd = backReference.pos + backReference.len;
3003         }
3004
3005         // add the last part of the after string
3006         len = after.length() - lastEnd;
3007         if (len > 0) {
3008             chunks << after.midRef(lastEnd, len);
3009             newLength += len;
3010         }
3011
3012         lastEnd = match.capturedEnd();
3013     }
3014
3015     // 3. trailing string after the last match
3016     if (copy.length() > lastEnd) {
3017         chunks << copy.midRef(lastEnd);
3018         newLength += copy.length() - lastEnd;
3019     }
3020
3021     // 4. assemble the chunks together
3022     resize(newLength);
3023     int i = 0;
3024     QChar *uc = data();
3025     foreach (const QStringRef &chunk, chunks) {
3026         int len = chunk.length();
3027         memcpy(uc + i, chunk.unicode(), len * sizeof(QChar));
3028         i += len;
3029     }
3030
3031     return *this;
3032 }
3033 #endif // QT_BOOTSTRAPPED
3034 #endif // QT_NO_REGEXP
3035
3036 /*!
3037     Returns the number of (potentially overlapping) occurrences of
3038     the string \a str in this string.
3039
3040     If \a cs is Qt::CaseSensitive (default), the search is
3041     case sensitive; otherwise the search is case insensitive.
3042
3043     \sa contains(), indexOf()
3044 */
3045
3046 int QString::count(const QString &str, Qt::CaseSensitivity cs) const
3047 {
3048     return qt_string_count(unicode(), size(), str.unicode(), str.size(), cs);
3049 }
3050
3051 /*!
3052   \overload count()
3053
3054   Returns the number of occurrences of character \a ch in the string.
3055 */
3056
3057 int QString::count(QChar ch, Qt::CaseSensitivity cs) const
3058 {
3059     return qt_string_count(unicode(), size(), ch, cs);
3060     }
3061
3062 /*!
3063     \since 4.8
3064     \overload count()
3065     Returns the number of (potentially overlapping) occurrences of the
3066     string reference \a str in this string.
3067
3068     If \a cs is Qt::CaseSensitive (default), the search is
3069     case sensitive; otherwise the search is case insensitive.
3070
3071     \sa contains(), indexOf()
3072 */
3073 int QString::count(const QStringRef &str, Qt::CaseSensitivity cs) const
3074 {
3075     return qt_string_count(unicode(), size(), str.unicode(), str.size(), cs);
3076 }
3077
3078
3079 /*! \fn bool QString::contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
3080
3081     Returns true if this string contains an occurrence of the string
3082     \a str; otherwise returns false.
3083
3084     If \a cs is Qt::CaseSensitive (default), the search is
3085     case sensitive; otherwise the search is case insensitive.
3086
3087     Example:
3088     \snippet qstring/main.cpp 17
3089
3090     \sa indexOf(), count()
3091 */
3092
3093 /*! \fn bool QString::contains(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
3094
3095     \overload contains()
3096
3097     Returns true if this string contains an occurrence of the
3098     character \a ch; otherwise returns false.
3099 */
3100
3101 /*! \fn bool QString::contains(const QStringRef &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
3102     \since 4.8
3103
3104     Returns true if this string contains an occurrence of the string
3105     reference \a str; otherwise returns false.
3106
3107     If \a cs is Qt::CaseSensitive (default), the search is
3108     case sensitive; otherwise the search is case insensitive.
3109
3110     \sa indexOf(), count()
3111 */
3112
3113 /*! \fn bool QString::contains(const QRegExp &rx) const
3114
3115     \overload contains()
3116
3117     Returns true if the regular expression \a rx matches somewhere in
3118     this string; otherwise returns false.
3119 */
3120
3121 /*! \fn bool QString::contains(QRegExp &rx) const
3122     \overload contains()
3123     \since 4.5
3124
3125     Returns true if the regular expression \a rx matches somewhere in
3126     this string; otherwise returns false.
3127
3128     If there is a match, the \a rx regular expression will contain the
3129     matched captures (see QRegExp::matchedLength, QRegExp::cap).
3130 */
3131
3132 #ifndef QT_NO_REGEXP
3133 /*!
3134     \overload indexOf()
3135
3136     Returns the index position of the first match of the regular
3137     expression \a rx in the string, searching forward from index
3138     position \a from. Returns -1 if \a rx didn't match anywhere.
3139
3140     Example:
3141
3142     \snippet qstring/main.cpp 25
3143 */
3144 int QString::indexOf(const QRegExp& rx, int from) const
3145 {
3146     QRegExp rx2(rx);
3147     return rx2.indexIn(*this, from);
3148 }
3149
3150 /*!
3151     \overload indexOf()
3152     \since 4.5
3153
3154     Returns the index position of the first match of the regular
3155     expression \a rx in the string, searching forward from index
3156     position \a from. Returns -1 if \a rx didn't match anywhere.
3157
3158     If there is a match, the \a rx regular expression will contain the
3159     matched captures (see QRegExp::matchedLength, QRegExp::cap).
3160
3161     Example:
3162
3163     \snippet qstring/main.cpp 25
3164 */
3165 int QString::indexOf(QRegExp& rx, int from) const
3166 {
3167     return rx.indexIn(*this, from);
3168 }
3169
3170 /*!
3171     \overload lastIndexOf()
3172
3173     Returns the index position of the last match of the regular
3174     expression \a rx in the string, searching backward from index
3175     position \a from. Returns -1 if \a rx didn't match anywhere.
3176
3177     Example:
3178
3179     \snippet qstring/main.cpp 30
3180 */
3181 int QString::lastIndexOf(const QRegExp& rx, int from) const
3182 {
3183     QRegExp rx2(rx);
3184     return rx2.lastIndexIn(*this, from);
3185 }
3186
3187 /*!
3188     \overload lastIndexOf()
3189     \since 4.5
3190
3191     Returns the index position of the last match of the regular
3192     expression \a rx in the string, searching backward from index
3193     position \a from. Returns -1 if \a rx didn't match anywhere.
3194
3195     If there is a match, the \a rx regular expression will contain the
3196     matched captures (see QRegExp::matchedLength, QRegExp::cap).
3197
3198     Example:
3199
3200     \snippet qstring/main.cpp 30
3201 */
3202 int QString::lastIndexOf(QRegExp& rx, int from) const
3203 {
3204     return rx.lastIndexIn(*this, from);
3205 }
3206
3207 /*!
3208     \overload count()
3209
3210     Returns the number of times the regular expression \a rx matches
3211     in the string.
3212
3213     This function counts overlapping matches, so in the example
3214     below, there are four instances of "ana" or "ama":
3215
3216     \snippet qstring/main.cpp 18
3217
3218 */
3219 int QString::count(const QRegExp& rx) const
3220 {
3221     QRegExp rx2(rx);
3222     int count = 0;
3223     int index = -1;
3224     int len = length();
3225     while (index < len - 1) {                 // count overlapping matches
3226         index = rx2.indexIn(*this, index + 1);
3227         if (index == -1)
3228             break;
3229         count++;
3230     }
3231     return count;
3232 }
3233 #endif // QT_NO_REGEXP
3234
3235 #ifndef QT_NO_REGEXP
3236 #ifndef QT_BOOTSTRAPPED
3237 /*!
3238     \overload indexOf()
3239     \since 5.0
3240
3241     Returns the index position of the first match of the regular
3242     expression \a re in the string, searching forward from index
3243     position \a from. Returns -1 if \a re didn't match anywhere.
3244
3245     Example:
3246
3247     \snippet qstring/main.cpp 93
3248 */
3249 int QString::indexOf(const QRegularExpression& re, int from) const
3250 {
3251     if (!re.isValid()) {
3252         qWarning("QString::indexOf: invalid QRegularExpresssion object");
3253         return -1;
3254     }
3255
3256     QRegularExpressionMatch match = re.match(*this, from);
3257     if (match.hasMatch())
3258         return match.capturedStart();
3259
3260     return -1;
3261 }
3262
3263 /*!
3264     \overload lastIndexOf()
3265     \since 5.0
3266
3267     Returns the index position of the last match of the regular
3268     expression \a re in the string, which starts before the index
3269     position \a from. Returns -1 if \a re didn't match anywhere.
3270
3271     Example:
3272
3273     \snippet qstring/main.cpp 94
3274 */
3275 int QString::lastIndexOf(const QRegularExpression &re, int from) const
3276 {
3277     if (!re.isValid()) {
3278         qWarning("QString::lastIndexOf: invalid QRegularExpresssion object");
3279         return -1;
3280     }
3281
3282     int endpos = (from < 0) ? (size() + from + 1) : (from + 1);
3283
3284     QRegularExpressionMatchIterator iterator = re.globalMatch(*this);
3285     int lastIndex = -1;
3286     while (iterator.hasNext()) {
3287         QRegularExpressionMatch match = iterator.next();
3288         int start = match.capturedStart();
3289         if (start < endpos)
3290             lastIndex = start;
3291         else
3292             break;
3293     }
3294
3295     return lastIndex;
3296 }
3297
3298 /*! \overload contains()
3299     \since 5.0
3300
3301     Returns true if the regular expression \a re matches somewhere in
3302     this string; otherwise returns false.
3303 */
3304 bool QString::contains(const QRegularExpression &re) const
3305 {
3306     if (!re.isValid()) {
3307         qWarning("QString::contains: invalid QRegularExpresssion object");
3308         return false;
3309     }
3310     QRegularExpressionMatch match = re.match(*this);
3311     return match.hasMatch();
3312 }
3313
3314 /*!
3315     \overload count()
3316     \since 5.0
3317
3318     Returns the number of times the regular expression \a re matches
3319     in the string.
3320
3321     This function counts overlapping matches, so in the example
3322     below, there are four instances of "ana" or "ama":
3323
3324     \snippet qstring/main.cpp 95
3325 */
3326 int QString::count(const QRegularExpression &re) const
3327 {
3328     if (!re.isValid()) {
3329         qWarning("QString::count: invalid QRegularExpresssion object");
3330         return 0;
3331     }
3332     int count = 0;
3333     int index = -1;
3334     int len = length();
3335     while (index < len - 1) {
3336         QRegularExpressionMatch match = re.match(*this, index + 1);
3337         if (!match.hasMatch())
3338             break;
3339         index = match.capturedStart();
3340         count++;
3341     }
3342     return count;
3343 }
3344 #endif // QT_BOOTSTRAPPED
3345 #endif // QT_NO_REGEXP
3346
3347 /*! \fn int QString::count() const
3348
3349     \overload count()
3350
3351     Same as size().
3352 */
3353
3354
3355 /*!
3356     \enum QString::SectionFlag
3357
3358     This enum specifies flags that can be used to affect various
3359     aspects of the section() function's behavior with respect to
3360     separators and empty fields.
3361
3362     \value SectionDefault Empty fields are counted, leading and
3363     trailing separators are not included, and the separator is
3364     compared case sensitively.
3365
3366     \value SectionSkipEmpty Treat empty fields as if they don't exist,
3367     i.e. they are not considered as far as \e start and \e end are
3368     concerned.
3369
3370     \value SectionIncludeLeadingSep Include the leading separator (if
3371     any) in the result string.
3372
3373     \value SectionIncludeTrailingSep Include the trailing separator
3374     (if any) in the result string.
3375
3376     \value SectionCaseInsensitiveSeps Compare the separator
3377     case-insensitively.
3378
3379     \sa section()
3380 */
3381
3382 /*!
3383     \fn QString QString::section(QChar sep, int start, int end = -1, SectionFlags flags) const
3384
3385     This function returns a section of the string.
3386
3387     This string is treated as a sequence of fields separated by the
3388     character, \a sep. The returned string consists of the fields from
3389     position \a start to position \a end inclusive. If \a end is not
3390     specified, all fields from position \a start to the end of the
3391     string are included. Fields are numbered 0, 1, 2, etc., counting
3392     from the left, and -1, -2, etc., counting from right to left.
3393
3394     The \a flags argument can be used to affect some aspects of the
3395     function's behavior, e.g. whether to be case sensitive, whether
3396     to skip empty fields and how to deal with leading and trailing
3397     separators; see \l{SectionFlags}.
3398
3399     \snippet qstring/main.cpp 52
3400
3401     If \a start or \a end is negative, we count fields from the right
3402     of the string, the right-most field being -1, the one from
3403     right-most field being -2, and so on.
3404
3405     \snippet qstring/main.cpp 53
3406
3407     \sa split()
3408 */
3409
3410 /*!
3411     \overload section()
3412
3413     \snippet qstring/main.cpp 51
3414     \snippet qstring/main.cpp 54
3415
3416     \sa split()
3417 */
3418
3419 QString QString::section(const QString &sep, int start, int end, SectionFlags flags) const
3420 {
3421     QStringList sections = split(sep, KeepEmptyParts,
3422                                  (flags & SectionCaseInsensitiveSeps) ? Qt::CaseInsensitive : Qt::CaseSensitive);
3423     if (sections.isEmpty())
3424         return QString();
3425     if (!(flags & SectionSkipEmpty)) {
3426         if (start < 0)
3427             start += sections.count();
3428         if (end < 0)
3429             end += sections.count();
3430     } else {
3431         int skip = 0;
3432         for (int k=0; k<sections.size(); ++k) {
3433             if (sections.at(k).isEmpty())
3434                 skip++;
3435         }
3436         if (start < 0)
3437             start += sections.count() - skip;
3438         if (end < 0)
3439             end += sections.count() - skip;
3440     }
3441     int x = 0;
3442     QString ret;
3443     int first_i = start, last_i = end;
3444     for (int i = 0; x <= end && i < sections.size(); ++i) {
3445         QString section = sections.at(i);
3446         const bool empty = section.isEmpty();
3447         if (x >= start) {
3448             if(x == start)
3449                 first_i = i;
3450             if(x == end)
3451                 last_i = i;
3452             if(x > start)
3453                 ret += sep;
3454             ret += section;
3455         }
3456         if (!empty || !(flags & SectionSkipEmpty))
3457             x++;
3458     }
3459     if((flags & SectionIncludeLeadingSep) && first_i)
3460         ret.prepend(sep);
3461     if((flags & SectionIncludeTrailingSep) && last_i < sections.size()-1)
3462         ret += sep;
3463     return ret;
3464 }
3465
3466 #ifndef QT_NO_REGEXP
3467 class qt_section_chunk {
3468 public:
3469     qt_section_chunk(int l, QString s) { length = l; string = s; }
3470     int length;
3471     QString string;
3472 };
3473
3474 static QString extractSections(const QList<qt_section_chunk> &sections,
3475                                int start,
3476                                int end,
3477                                QString::SectionFlags flags)
3478 {
3479     if (start < 0)
3480         start += sections.count();
3481     if (end < 0)
3482         end += sections.count();
3483
3484     QString ret;
3485     int x = 0;
3486     int first_i = start, last_i = end;
3487     for (int i = 0; x <= end && i < sections.size(); ++i) {
3488         const qt_section_chunk &section = sections.at(i);
3489         const bool empty = (section.length == section.string.length());
3490         if (x >= start) {
3491             if (x == start)
3492                 first_i = i;
3493             if (x == end)
3494                 last_i = i;
3495             if (x != start)
3496                 ret += section.string;
3497             else
3498                 ret += section.string.mid(section.length);
3499         }
3500         if (!empty || !(flags & QString::SectionSkipEmpty))
3501             x++;
3502     }
3503
3504     if ((flags & QString::SectionIncludeLeadingSep) && first_i < sections.size()) {
3505         const qt_section_chunk &section = sections.at(first_i);
3506         ret.prepend(section.string.left(section.length));
3507     }
3508
3509     if ((flags & QString::SectionIncludeTrailingSep) && last_i+1 <= sections.size()-1) {
3510         const qt_section_chunk &section = sections.at(last_i+1);
3511         ret += section.string.left(section.length);
3512     }
3513
3514     return ret;
3515 }
3516
3517 /*!
3518     \overload section()
3519
3520     This string is treated as a sequence of fields separated by the
3521     regular expression, \a reg.
3522
3523     \snippet qstring/main.cpp 55
3524
3525     \warning Using this QRegExp version is much more expensive than
3526     the overloaded string and character versions.
3527
3528     \sa split(), simplified()
3529 */
3530 QString QString::section(const QRegExp &reg, int start, int end, SectionFlags flags) const
3531 {
3532     const QChar *uc = unicode();
3533     if(!uc)
3534         return QString();
3535
3536     QRegExp sep(reg);
3537     sep.setCaseSensitivity((flags & SectionCaseInsensitiveSeps) ? Qt::CaseInsensitive
3538                                                                 : Qt::CaseSensitive);
3539
3540     QList<qt_section_chunk> sections;
3541     int n = length(), m = 0, last_m = 0, last_len = 0;
3542     while ((m = sep.indexIn(*this, m)) != -1) {
3543         sections.append(qt_section_chunk(last_len, QString(uc + last_m, m - last_m)));
3544         last_m = m;
3545         last_len = sep.matchedLength();
3546         m += qMax(sep.matchedLength(), 1);
3547     }
3548     sections.append(qt_section_chunk(last_len, QString(uc + last_m, n - last_m)));
3549
3550     return extractSections(sections, start, end, flags);
3551 }
3552 #endif
3553
3554 #ifndef QT_NO_REGEXP
3555 #ifndef QT_BOOTSTRAPPED
3556 /*!
3557     \overload section()
3558     \since 5.0
3559
3560     This string is treated as a sequence of fields separated by the
3561     regular expression, \a re.
3562
3563     \snippet qstring/main.cpp 89
3564
3565     \warning Using this QRegularExpression version is much more expensive than
3566     the overloaded string and character versions.
3567
3568     \sa split(), simplified()
3569 */
3570 QString QString::section(const QRegularExpression &re, int start, int end, SectionFlags flags) const
3571 {
3572     if (!re.isValid()) {
3573         qWarning("QString::section: invalid QRegularExpression object");
3574         return QString();
3575     }
3576
3577     const QChar *uc = unicode();
3578     if (!uc)
3579         return QString();
3580
3581     QRegularExpression sep(re);
3582     if (flags & SectionCaseInsensitiveSeps)
3583         sep.setPatternOptions(sep.patternOptions() | QRegularExpression::CaseInsensitiveOption);
3584
3585     QList<qt_section_chunk> sections;
3586     int n = length(), m = 0, last_m = 0, last_len = 0;
3587     QRegularExpressionMatchIterator iterator = sep.globalMatch(*this);
3588     while (iterator.hasNext()) {
3589         QRegularExpressionMatch match = iterator.next();
3590         m = match.capturedStart();
3591         sections.append(qt_section_chunk(last_len, QString(uc + last_m, m - last_m)));
3592         last_m = m;
3593         last_len = match.capturedLength();
3594     }
3595     sections.append(qt_section_chunk(last_len, QString(uc + last_m, n - last_m)));
3596
3597     return extractSections(sections, start, end, flags);
3598 }
3599 #endif // QT_BOOTSTRAPPED
3600 #endif // QT_NO_REGEXP
3601
3602 /*!
3603     Returns a substring that contains the \a n leftmost characters
3604     of the string.
3605
3606     The entire string is returned if \a n is greater than size() or
3607     less than zero.
3608
3609     \snippet qstring/main.cpp 31
3610
3611     \sa right(), mid(), startsWith()
3612 */
3613 QString QString::left(int n)  const
3614 {
3615     if (n >= d->size || n < 0)
3616         return *this;
3617     return QString((const QChar*) d->data(), n);
3618 }
3619
3620 /*!
3621     Returns a substring that contains the \a n rightmost characters
3622     of the string.
3623
3624     The entire string is returned if \a n is greater than size() or
3625     less than zero.
3626
3627     \snippet qstring/main.cpp 48
3628
3629     \sa left(), mid(), endsWith()
3630 */
3631 QString QString::right(int n) const
3632 {
3633     if (n >= d->size || n < 0)
3634         return *this;
3635     return QString((const QChar*) d->data() + d->size - n, n);
3636 }
3637
3638 /*!
3639     Returns a string that contains \a n characters of this string,
3640     starting at the specified \a position index.
3641
3642     Returns a null string if the \a position index exceeds the
3643     length of the string. If there are less than \a n characters
3644     available in the string starting at the given \a position, or if
3645     \a n is -1 (default), the function returns all characters that
3646     are available from the specified \a position.
3647
3648     Example:
3649
3650     \snippet qstring/main.cpp 34
3651
3652     \sa left(), right()
3653 */
3654
3655 QString QString::mid(int position, int n) const
3656 {
3657     if (position > d->size)
3658         return QString();
3659     if (position < 0) {
3660         if (n < 0 || n + position >= d->size)
3661             return *this;
3662         if (n + position <= 0)
3663             return QString();
3664
3665         n += position;
3666         position = 0;
3667     } else if (n < 0 || n > d->size - position)
3668         n = d->size - position;
3669     if (position == 0 && n == d->size)
3670         return *this;
3671     return QString((const QChar*) d->data() + position, n);
3672 }
3673
3674 /*!
3675     Returns true if the string starts with \a s; otherwise returns
3676     false.
3677
3678     If \a cs is Qt::CaseSensitive (default), the search is
3679     case sensitive; otherwise the search is case insensitive.
3680
3681     \snippet qstring/main.cpp 65
3682
3683     \sa endsWith()
3684 */
3685 bool QString::startsWith(const QString& s, Qt::CaseSensitivity cs) const
3686 {
3687     return qt_starts_with(isNull() ? 0 : unicode(), size(),
3688                           s.isNull() ? 0 : s.unicode(), s.size(), cs);
3689 }
3690
3691 /*!
3692   \overload startsWith()
3693  */
3694 bool QString::startsWith(QLatin1String s, Qt::CaseSensitivity cs) const
3695 {
3696     return qt_starts_with(isNull() ? 0 : unicode(), size(), s, cs);
3697 }
3698
3699 /*!
3700   \overload startsWith()
3701
3702   Returns true if the string starts with \a c; otherwise returns
3703   false.
3704 */
3705 bool QString::startsWith(QChar c, Qt::CaseSensitivity cs) const
3706 {
3707     return d->size
3708            && (cs == Qt::CaseSensitive
3709                ? d->data()[0] == c
3710                : foldCase(d->data()[0]) == foldCase(c.unicode()));
3711 }
3712
3713 /*!
3714     \since 4.8
3715     \overload
3716     Returns true if the string starts with the string reference \a s;
3717     otherwise returns false.
3718
3719     If \a cs is Qt::CaseSensitive (default), the search is case
3720     sensitive; otherwise the search is case insensitive.
3721
3722     \sa endsWith()
3723 */
3724 bool QString::startsWith(const QStringRef &s, Qt::CaseSensitivity cs) const
3725 {
3726     return qt_starts_with(isNull() ? 0 : unicode(), size(),
3727                           s.isNull() ? 0 : s.unicode(), s.size(), cs);
3728 }
3729
3730 /*!
3731     Returns true if the string ends with \a s; otherwise returns
3732     false.
3733
3734     If \a cs is Qt::CaseSensitive (default), the search is case
3735     sensitive; otherwise the search is case insensitive.
3736
3737     \snippet qstring/main.cpp 20
3738
3739     \sa startsWith()
3740 */
3741 bool QString::endsWith(const QString& s, Qt::CaseSensitivity cs) const
3742 {
3743     return qt_ends_with(isNull() ? 0 : unicode(), size(),
3744                         s.isNull() ? 0 : s.unicode(), s.size(), cs);
3745     }
3746
3747 /*!
3748     \since 4.8
3749     \overload endsWith()
3750     Returns true if the string ends with the string reference \a s;
3751     otherwise returns false.
3752
3753     If \a cs is Qt::CaseSensitive (default), the search is case
3754     sensitive; otherwise the search is case insensitive.
3755
3756     \sa startsWith()
3757 */
3758 bool QString::endsWith(const QStringRef &s, Qt::CaseSensitivity cs) const
3759 {
3760     return qt_ends_with(isNull() ? 0 : unicode(), size(),
3761                         s.isNull() ? 0 : s.unicode(), s.size(), cs);
3762 }
3763
3764
3765 /*!
3766     \overload endsWith()
3767 */
3768 bool QString::endsWith(QLatin1String s, Qt::CaseSensitivity cs) const
3769 {
3770     return qt_ends_with(isNull() ? 0 : unicode(), size(), s, cs);
3771 }
3772
3773 /*!
3774   Returns true if the string ends with \a c; otherwise returns
3775   false.
3776
3777   \overload endsWith()
3778  */
3779 bool QString::endsWith(QChar c, Qt::CaseSensitivity cs) const
3780 {
3781     return d->size
3782            && (cs == Qt::CaseSensitive
3783                ? d->data()[d->size - 1] == c
3784                : foldCase(d->data()[d->size - 1]) == foldCase(c.unicode()));
3785 }
3786
3787
3788 #if defined(__SSE2__)
3789 static inline __m128i mergeQuestionMarks(__m128i chunk)
3790 {
3791     const __m128i questionMark = _mm_set1_epi16('?');
3792
3793 # ifdef __SSE4_2__
3794     // compare the unsigned shorts for the range 0x0100-0xFFFF
3795     // note on the use of _mm_cmpestrm:
3796     //  The MSDN documentation online (http://technet.microsoft.com/en-us/library/bb514080.aspx)
3797     //  says for range search the following:
3798     //    For each character c in a, determine whether b0 <= c <= b1 or b2 <= c <= b3
3799     //
3800     //  However, all examples on the Internet, including from Intel
3801     //  (see http://software.intel.com/en-us/articles/xml-parsing-accelerator-with-intel-streaming-simd-extensions-4-intel-sse4/)
3802     //  put the range to be searched first
3803     //
3804     //  Disassembly and instruction-level debugging with GCC and ICC show
3805     //  that they are doing the right thing. Inverting the arguments in the
3806     //  instruction does cause a bunch of test failures.
3807
3808     const int mode = _SIDD_UWORD_OPS | _SIDD_CMP_RANGES | _SIDD_UNIT_MASK;
3809     const __m128i rangeMatch = _mm_cvtsi32_si128(0xffff0100);
3810     const __m128i offLimitMask = _mm_cmpestrm(rangeMatch, 2, chunk, 8, mode);
3811
3812     // replace the non-Latin 1 characters in the chunk with question marks
3813     chunk = _mm_blendv_epi8(chunk, questionMark, offLimitMask);
3814 # else
3815     // SSE has no compare instruction for unsigned comparison.
3816     // The variables must be shiffted + 0x8000 to be compared
3817     const __m128i signedBitOffset = _mm_set1_epi16(0x8000);
3818     const __m128i thresholdMask = _mm_set1_epi16(0xff + 0x8000);
3819
3820     const __m128i signedChunk = _mm_add_epi16(chunk, signedBitOffset);
3821     const __m128i offLimitMask = _mm_cmpgt_epi16(signedChunk, thresholdMask);
3822
3823 #  ifdef __SSE4_1__
3824     // replace the non-Latin 1 characters in the chunk with question marks
3825     chunk = _mm_blendv_epi8(chunk, questionMark, offLimitMask);
3826 #  else
3827     // offLimitQuestionMark contains '?' for each 16 bits that was off-limit
3828     // the 16 bits that were correct contains zeros
3829     const __m128i offLimitQuestionMark = _mm_and_si128(offLimitMask, questionMark);
3830
3831     // correctBytes contains the bytes that were in limit
3832     // the 16 bits that were off limits contains zeros
3833     const __m128i correctBytes = _mm_andnot_si128(offLimitMask, chunk);
3834
3835     // merge offLimitQuestionMark and correctBytes to have the result
3836     chunk = _mm_or_si128(correctBytes, offLimitQuestionMark);
3837 #  endif
3838 # endif
3839     return chunk;
3840 }
3841 #endif
3842
3843 static QByteArray toLatin1_helper(const QChar *data, int length)
3844 {
3845     QByteArray ba;
3846     if (length) {
3847         ba.resize(length);
3848         const ushort *src = reinterpret_cast<const ushort *>(data);
3849         uchar *dst = (uchar*) ba.data();
3850 #if defined(__SSE2__)
3851         if (length >= 16) {
3852             const int chunkCount = length >> 4; // divided by 16
3853
3854             for (int i = 0; i < chunkCount; ++i) {
3855                 __m128i chunk1 = _mm_loadu_si128((__m128i*)src); // load
3856                 chunk1 = mergeQuestionMarks(chunk1);
3857                 src += 8;
3858
3859                 __m128i chunk2 = _mm_loadu_si128((__m128i*)src); // load
3860                 chunk2 = mergeQuestionMarks(chunk2);
3861                 src += 8;
3862
3863                 // pack the two vector to 16 x 8bits elements
3864                 const __m128i result = _mm_packus_epi16(chunk1, chunk2);
3865
3866                 _mm_storeu_si128((__m128i*)dst, result); // store
3867                 dst += 16;
3868             }
3869             length = length % 16;
3870         }
3871 #elif defined(__ARM_NEON__)
3872         // Refer to the documentation of the SSE2 implementation
3873         // this use eactly the same method as for SSE except:
3874         // 1) neon has unsigned comparison
3875         // 2) packing is done to 64 bits (8 x 8bits component).
3876         if (length >= 16) {
3877             const int chunkCount = length >> 3; // divided by 8
3878             const uint16x8_t questionMark = vdupq_n_u16('?'); // set
3879             const uint16x8_t thresholdMask = vdupq_n_u16(0xff); // set
3880             for (int i = 0; i < chunkCount; ++i) {
3881                 uint16x8_t chunk = vld1q_u16((uint16_t *)src); // load
3882                 src += 8;
3883
3884                 const uint16x8_t offLimitMask = vcgtq_u16(chunk, thresholdMask); // chunk > thresholdMask
3885                 const uint16x8_t offLimitQuestionMark = vandq_u16(offLimitMask, questionMark); // offLimitMask & questionMark
3886                 const uint16x8_t correctBytes = vbicq_u16(chunk, offLimitMask); // !offLimitMask & chunk
3887                 chunk = vorrq_u16(correctBytes, offLimitQuestionMark); // correctBytes | offLimitQuestionMark
3888                 const uint8x8_t result = vmovn_u16(chunk); // narrowing move->packing
3889                 vst1_u8(dst, result); // store
3890                 dst += 8;
3891             }
3892             length = length % 8;
3893         }
3894 #endif
3895         while (length--) {
3896             *dst++ = (*src>0xff) ? '?' : (uchar) *src;
3897             ++src;
3898         }
3899     }
3900     return ba;
3901 }
3902
3903 /*!
3904     Returns a Latin-1 representation of the string as a QByteArray.
3905
3906     The returned byte array is undefined if the string contains non-Latin1
3907     characters. Those characters may be suppressed or replaced with a
3908     question mark.
3909
3910     \sa fromLatin1(), toUtf8(), toLocal8Bit(), QTextCodec
3911 */
3912 QByteArray QString::toLatin1() const
3913 {
3914     return toLatin1_helper(unicode(), length());
3915 }
3916
3917 /*!
3918     \fn QByteArray QString::toAscii() const
3919     \deprecated
3920     Returns an 8-bit representation of the string as a QByteArray.
3921
3922     This function does the same as toLatin1().
3923
3924     Note that, despite the name, this function does not necessarily return an US-ASCII
3925     (ANSI X3.4-1986) string and its result may not be US-ASCII compatible.
3926
3927     \sa fromAscii(), toLatin1(), toUtf8(), toLocal8Bit(), QTextCodec
3928 */
3929
3930 #if !defined(Q_OS_MAC) && defined(Q_OS_UNIX)
3931 static QByteArray toLocal8Bit_helper(const QChar *data, int length)
3932 {
3933 #ifndef QT_NO_TEXTCODEC
3934     if (QTextCodec::codecForLocale())
3935         return QTextCodec::codecForLocale()->fromUnicode(data, length);
3936 #endif // QT_NO_TEXTCODEC
3937     return toLatin1_helper(data, length);
3938 }
3939 #endif
3940
3941 /*!
3942     Returns the local 8-bit representation of the string as a
3943     QByteArray. The returned byte array is undefined if the string
3944     contains characters not supported by the local 8-bit encoding.
3945
3946     QTextCodec::codecForLocale() is used to perform the conversion from
3947     Unicode. If the locale encoding could not be determined, this function
3948     does the same as toLatin1().
3949
3950     If this string contains any characters that cannot be encoded in the
3951     locale, the returned byte array is undefined. Those characters may be
3952     suppressed or replaced by another.
3953
3954     \sa fromLocal8Bit(), toLatin1(), toUtf8(), QTextCodec
3955 */
3956 QByteArray QString::toLocal8Bit() const
3957 {
3958 #ifndef QT_NO_TEXTCODEC
3959     if (QTextCodec::codecForLocale())
3960         return QTextCodec::codecForLocale()->fromUnicode(*this);
3961 #endif // QT_NO_TEXTCODEC
3962     return toLatin1();
3963 }
3964
3965 /*!
3966     Returns a UTF-8 representation of the string as a QByteArray.
3967
3968     UTF-8 is a Unicode codec and can represent all characters in a Unicode
3969     string like QString.
3970
3971     However, in the Unicode range, there are certain codepoints that are not
3972     considered characters. The Unicode standard reserves the last two
3973     codepoints in each Unicode Plane (U+FFFE, U+FFFF, U+1FFFE, U+1FFFF,
3974     U+2FFFE, etc.), as well as 32 codepoints in the range U+FDD0..U+FDEF,
3975     inclusive, as non-characters. If any of those appear in the string, they
3976     may be discarded and will not appear in the UTF-8 representation, or they
3977     may be replaced by one or more replacement characters.
3978
3979     \sa fromUtf8(), toLatin1(), toLocal8Bit(), QTextCodec
3980 */
3981 QByteArray QString::toUtf8() const
3982 {
3983     if (isNull())
3984         return QByteArray();
3985
3986     return QUtf8::convertFromUnicode(constData(), length(), 0);
3987 }
3988
3989 /*!
3990     \since 4.2
3991
3992     Returns a UCS-4/UTF-32 representation of the string as a QVector<uint>.
3993
3994     UCS-4 is a Unicode codec and is lossless. All characters from this string
3995     can be encoded in UCS-4. The vector is not null terminated.
3996
3997     \sa fromUtf8(), toUtf8(), toLatin1(), toLocal8Bit(), QTextCodec, fromUcs4(), toWCharArray()
3998 */
3999 QVector<uint> QString::toUcs4() const
4000 {
4001     QVector<uint> v(length());
4002     uint *a = v.data();
4003     int len = toUcs4_helper(d->data(), length(), a);
4004     v.resize(len);
4005     return v;
4006 }
4007
4008 QString::Data *QString::fromLatin1_helper(const char *str, int size)
4009 {
4010     Data *d;
4011     if (!str) {
4012         d = Data::sharedNull();
4013     } else if (size == 0 || (!*str && size < 0)) {
4014         d = Data::allocate(0);
4015     } else {
4016         if (size < 0)
4017             size = qstrlen(str);
4018         d = Data::allocate(size + 1);
4019         Q_CHECK_PTR(d);
4020         d->size = size;
4021         d->data()[size] = '\0';
4022         ushort *dst = d->data();
4023         /* SIMD:
4024          * Unpacking with SSE has been shown to improve performance on recent CPUs
4025          * The same method gives no improvement with NEON.
4026          */
4027 #if defined(__SSE2__)
4028         if (size >= 16) {
4029             int chunkCount = size >> 4; // divided by 16
4030             const __m128i nullMask = _mm_set1_epi32(0);
4031             for (int i = 0; i < chunkCount; ++i) {
4032                 const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load
4033                 str += 16;
4034
4035                 // unpack the first 8 bytes, padding with zeros
4036                 const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask);
4037                 _mm_storeu_si128((__m128i*)dst, firstHalf); // store
4038                 dst += 8;
4039
4040                 // unpack the last 8 bytes, padding with zeros
4041                 const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask);
4042                 _mm_storeu_si128((__m128i*)dst, secondHalf); // store
4043                 dst += 8;
4044             }
4045             size = size % 16;
4046         }
4047 #endif
4048         while (size--)
4049             *dst++ = (uchar)*str++;
4050     }
4051     return d;
4052 }
4053
4054 QString::Data *QString::fromAscii_helper(const char *str, int size)
4055 {
4056     QString s = fromUtf8(str, size);
4057     s.d->ref.ref();
4058     return s.d;
4059 }
4060
4061 /*! \fn QString QString::fromLatin1(const char *str, int size)
4062     Returns a QString initialized with the first \a size characters
4063     of the Latin-1 string \a str.
4064
4065     If \a size is -1 (default), it is taken to be strlen(\a
4066     str).
4067
4068     \sa toLatin1(), fromUtf8(), fromLocal8Bit()
4069 */
4070
4071
4072 /*! \fn QString QString::fromLocal8Bit(const char *str, int size)
4073     Returns a QString initialized with the first \a size characters
4074     of the 8-bit string \a str.
4075
4076     If \a size is -1 (default), it is taken to be strlen(\a
4077     str).
4078
4079     QTextCodec::codecForLocale() is used to perform the conversion.
4080
4081     \sa toLocal8Bit(), fromLatin1(), fromUtf8()
4082 */
4083 QString QString::fromLocal8Bit_helper(const char *str, int size)
4084 {
4085     if (!str)
4086         return QString();
4087     if (size == 0 || (!*str && size < 0)) {
4088         QStringDataPtr empty = { Data::allocate(0) };
4089         return QString(empty);
4090     }
4091 #if !defined(QT_NO_TEXTCODEC)
4092     if (size < 0)
4093         size = qstrlen(str);
4094     QTextCodec *codec = QTextCodec::codecForLocale();
4095     if (codec)
4096         return codec->toUnicode(str, size);
4097 #endif // !QT_NO_TEXTCODEC
4098     return fromLatin1(str, size);
4099 }
4100
4101 /*! \fn QString QString::fromAscii(const char *, int size);
4102     \deprecated
4103
4104     Returns a QString initialized with the first \a size characters
4105     from the string \a str.
4106
4107     If \a size is -1 (default), it is taken to be strlen(\a
4108     str).
4109
4110     This function does the same as fromLatin1().
4111
4112     \sa toAscii(), fromLatin1(), fromUtf8(), fromLocal8Bit()
4113 */
4114
4115 /*! \fn QString QString::fromUtf8(const char *str, int size)
4116     Returns a QString initialized with the first \a size bytes
4117     of the UTF-8 string \a str.
4118
4119     If \a size is -1 (default), it is taken to be strlen(\a
4120     str).
4121
4122     UTF-8 is a Unicode codec and can represent all characters in a Unicode
4123     string like QString. However, invalid sequences are possible with UTF-8
4124     and, if any such are found, they will be replaced with one or more
4125     "replacement characters", or suppressed. These include non-Unicode
4126     sequences, non-characters, overlong sequences or surrogate codepoints
4127     encoded into UTF-8.
4128
4129     Non-characters are codepoints that the Unicode standard reserves and must
4130     not be used in text interchange. They are the last two codepoints in each
4131     Unicode Plane (U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, U+2FFFE, etc.), as well
4132     as 32 codepoints in the range U+FDD0..U+FDEF, inclusive.
4133
4134     \sa toUtf8(), fromLatin1(), fromLocal8Bit()
4135 */
4136 QString QString::fromUtf8_helper(const char *str, int size)
4137 {
4138     if (!str)
4139         return QString();
4140
4141     Q_ASSERT(size != -1);
4142     return QUtf8::convertToUnicode(str, size, 0);
4143 }
4144
4145 /*!
4146     Returns a QString initialized with the first \a size characters
4147     of the Unicode string \a unicode (ISO-10646-UTF-16 encoded).
4148
4149     If \a size is -1 (default), \a unicode must be terminated
4150     with a 0.
4151
4152     This function checks for a Byte Order Mark (BOM). If it is missing,
4153     host byte order is assumed.
4154
4155     This function is slow compared to the other Unicode conversions.
4156     Use QString(const QChar *, int) or QString(const QChar *) if possible.
4157
4158     QString makes a deep copy of the Unicode data.
4159
4160     \sa utf16(), setUtf16()
4161 */
4162 QString QString::fromUtf16(const ushort *unicode, int size)
4163 {
4164     if (!unicode)
4165         return QString();
4166     if (size < 0) {
4167         size = 0;
4168         while (unicode[size] != 0)
4169             ++size;
4170     }
4171     return QUtf16::convertToUnicode((const char *)unicode, size*2, 0);
4172 }
4173
4174
4175 /*!
4176     \since 4.2
4177
4178     Returns a QString initialized with the first \a size characters
4179     of the Unicode string \a unicode (ISO-10646-UCS-4 encoded).
4180
4181     If \a size is -1 (default), \a unicode must be terminated
4182     with a 0.
4183
4184     \sa toUcs4(), fromUtf16(), utf16(), setUtf16(), fromWCharArray()
4185 */
4186 QString QString::fromUcs4(const uint *unicode, int size)
4187 {
4188     if (!unicode)
4189         return QString();
4190     if (size < 0) {
4191         size = 0;
4192         while (unicode[size] != 0)
4193             ++size;
4194     }
4195     return QUtf32::convertToUnicode((const char *)unicode, size*4, 0);
4196 }
4197
4198 /*!
4199     Resizes the string to \a size characters and copies \a unicode
4200     into the string.
4201
4202     If \a unicode is 0, nothing is copied, but the string is still
4203     resized to \a size.
4204
4205     \sa unicode(), setUtf16()
4206 */
4207 QString& QString::setUnicode(const QChar *unicode, int size)
4208 {
4209      resize(size);
4210      if (unicode && size)
4211          memcpy(d->data(), unicode, size * sizeof(QChar));
4212      return *this;
4213 }
4214
4215 /*!
4216     \fn QString &QString::setUtf16(const ushort *unicode, int size)
4217
4218     Resizes the string to \a size characters and copies \a unicode
4219     into the string.
4220
4221     If \a unicode is 0, nothing is copied, but the string is still
4222     resized to \a size.
4223
4224     Note that unlike fromUtf16(), this function does not consider BOMs and
4225     possibly differing byte ordering.
4226
4227     \sa utf16(), setUnicode()
4228 */
4229
4230 /*!
4231     Returns a string that has whitespace removed from the start
4232     and the end, and that has each sequence of internal whitespace
4233     replaced with a single space.
4234
4235     Whitespace means any character for which QChar::isSpace() returns
4236     true. This includes the ASCII characters '\\t', '\\n', '\\v',
4237     '\\f', '\\r', and ' '.
4238
4239     Example:
4240
4241     \snippet qstring/main.cpp 57
4242
4243     \sa trimmed()
4244 */
4245 QString QString::simplified() const
4246 {
4247     if (d->size == 0)
4248         return *this;
4249
4250     const QChar * const start = reinterpret_cast<QChar *>(d->data());
4251     const QChar *from = start;
4252     const QChar *fromEnd = start + d->size;
4253     forever {
4254         QChar ch = *from;
4255         if (!ch.isSpace())
4256             break;
4257         if (++from == fromEnd) {
4258             // All-whitespace string
4259             QStringDataPtr empty = { Data::allocate(0) };
4260             return QString(empty);
4261         }
4262     }
4263     // This loop needs no underflow check, as we already determined that
4264     // the string contains non-whitespace. If the string has exactly one
4265     // non-whitespace, it will be checked twice - we can live with that.
4266     while (fromEnd[-1].isSpace())
4267         fromEnd--;
4268     // The rest of the function depends on the fact that we already know
4269     // that the last character in the source is no whitespace.
4270     const QChar *copyFrom = from;
4271     int copyCount;
4272     forever {
4273         if (++from == fromEnd) {
4274             // Only leading and/or trailing whitespace, if any at all
4275             return mid(copyFrom - start, from - copyFrom);
4276         }
4277         QChar ch = *from;
4278         if (!ch.isSpace())
4279             continue;
4280         if (ch != QLatin1Char(' ')) {
4281             copyCount = from - copyFrom;
4282             break;
4283         }
4284         ch = *++from;
4285         if (ch.isSpace()) {
4286             copyCount = from - copyFrom - 1;
4287             break;
4288         }
4289     }
4290     // 'from' now points at the non-trailing whitespace which made the
4291     // string not simplified in the first place. 'copyCount' is the number
4292     // of already simplified characters - at least one, obviously -
4293     // without a trailing space.
4294     QString result((fromEnd - from) + copyCount, Qt::Uninitialized);
4295     QChar *to = reinterpret_cast<QChar *>(result.d->data());
4296     ::memcpy(to, copyFrom, copyCount * 2);
4297     to += copyCount;
4298     fromEnd--;
4299     QChar ch;
4300     forever {
4301         *to++ = QLatin1Char(' ');
4302         do {
4303             ch = *++from;
4304         } while (ch.isSpace());
4305         if (from == fromEnd)
4306             break;
4307         do {
4308             *to++ = ch;
4309             ch = *++from;
4310             if (from == fromEnd)
4311                 goto done;
4312         } while (!ch.isSpace());
4313
4314     }
4315   done:
4316     *to++ = ch;
4317     result.truncate(to - reinterpret_cast<QChar *>(result.d->data()));
4318     return result;
4319 }
4320
4321 /*!
4322     Returns a string that has whitespace removed from the start and
4323     the end.
4324
4325     Whitespace means any character for which QChar::isSpace() returns
4326     true. This includes the ASCII characters '\\t', '\\n', '\\v',
4327     '\\f', '\\r', and ' '.
4328
4329     Example:
4330
4331     \snippet qstring/main.cpp 82
4332
4333     Unlike simplified(), trimmed() leaves internal whitespace alone.
4334
4335     \sa simplified()
4336 */
4337 QString QString::trimmed() const
4338 {
4339     if (d->size == 0)
4340         return *this;
4341     const QChar *s = (const QChar*)d->data();
4342     if (!s->isSpace() && !s[d->size-1].isSpace())
4343         return *this;
4344     int start = 0;
4345     int end = d->size - 1;
4346     while (start<=end && s[start].isSpace())  // skip white space from start
4347         start++;
4348     if (start <= end) {                          // only white space
4349         while (end && s[end].isSpace())           // skip white space from end
4350             end--;
4351     }
4352     int l = end - start + 1;
4353     if (l <= 0) {
4354         QStringDataPtr empty = { Data::allocate(0) };
4355         return QString(empty);
4356     }
4357     return QString(s + start, l);
4358 }
4359
4360 /*! \fn const QChar QString::at(int position) const
4361
4362     Returns the character at the given index \a position in the
4363     string.
4364
4365     The \a position must be a valid index position in the string
4366     (i.e., 0 <= \a position < size()).
4367
4368     \sa operator[]()
4369 */
4370
4371 /*!
4372     \fn QCharRef QString::operator[](int position)
4373
4374     Returns the character at the specified \a position in the string as a
4375     modifiable reference.
4376
4377     Example:
4378
4379     \snippet qstring/main.cpp 85
4380
4381     The return value is of type QCharRef, a helper class for QString.
4382     When you get an object of type QCharRef, you can use it as if it
4383     were a QChar &. If you assign to it, the assignment will apply to
4384     the character in the QString from which you got the reference.
4385
4386     \sa at()
4387 */
4388
4389 /*!
4390     \fn const QChar QString::operator[](int position) const
4391
4392     \overload operator[]()
4393 */
4394
4395 /*! \fn QCharRef QString::operator[](uint position)
4396
4397 \overload operator[]()
4398
4399 Returns the character at the specified \a position in the string as a
4400 modifiable reference. Equivalent to \c at(position).
4401 */
4402
4403 /*! \fn const QChar QString::operator[](uint position) const
4404
4405 \overload operator[]()
4406 */
4407
4408 /*!
4409     \fn void QString::truncate(int position)
4410
4411     Truncates the string at the given \a position index.
4412
4413     If the specified \a position index is beyond the end of the
4414     string, nothing happens.
4415
4416     Example:
4417
4418     \snippet qstring/main.cpp 83
4419
4420     If \a position is negative, it is equivalent to passing zero.
4421
4422     \sa chop(), resize(), left()
4423 */
4424
4425 void QString::truncate(int pos)
4426 {
4427     if (pos < d->size)
4428         resize(pos);
4429 }
4430
4431
4432 /*!
4433     Removes \a n characters from the end of the string.
4434
4435     If \a n is greater than size(), the result is an empty string.
4436
4437     Example:
4438     \snippet qstring/main.cpp 15
4439
4440     If you want to remove characters from the \e beginning of the
4441     string, use remove() instead.
4442
4443     \sa truncate(), resize(), remove()
4444 */
4445 void QString::chop(int n)
4446 {
4447     if (n > 0)
4448         resize(d->size - n);
4449 }
4450
4451 /*!
4452     Sets every character in the string to character \a ch. If \a size
4453     is different from -1 (default), the string is resized to \a
4454     size beforehand.
4455
4456     Example:
4457
4458     \snippet qstring/main.cpp 21
4459
4460     \sa resize()
4461 */
4462
4463 QString& QString::fill(QChar ch, int size)
4464 {
4465     resize(size < 0 ? d->size : size);
4466     if (d->size) {
4467         QChar *i = (QChar*)d->data() + d->size;
4468         QChar *b = (QChar*)d->data();
4469         while (i != b)
4470            *--i = ch;
4471     }
4472     return *this;
4473 }
4474
4475 /*!
4476     \fn int QString::length() const
4477
4478     Returns the number of characters in this string.  Equivalent to
4479     size().
4480
4481     \sa resize()
4482 */
4483
4484 /*!
4485     \fn int QString::size() const
4486
4487     Returns the number of characters in this string.
4488
4489     The last character in the string is at position size() - 1. In
4490     addition, QString ensures that the character at position size()
4491     is always '\\0', so that you can use the return value of data()
4492     and constData() as arguments to functions that expect
4493     '\\0'-terminated strings.
4494
4495     Example:
4496
4497     \snippet qstring/main.cpp 58
4498
4499     \sa isEmpty(), resize()
4500 */
4501
4502 /*! \fn bool QString::isNull() const
4503
4504     Returns true if this string is null; otherwise returns false.
4505
4506     Example:
4507
4508     \snippet qstring/main.cpp 28
4509
4510     Qt makes a distinction between null strings and empty strings for
4511     historical reasons. For most applications, what matters is
4512     whether or not a string contains any data, and this can be
4513     determined using the isEmpty() function.
4514
4515     \sa isEmpty()
4516 */
4517
4518 /*! \fn bool QString::isEmpty() const
4519
4520     Returns true if the string has no characters; otherwise returns
4521     false.
4522
4523     Example:
4524
4525     \snippet qstring/main.cpp 27
4526
4527     \sa size()
4528 */
4529
4530 /*! \fn QString &QString::operator+=(const QString &other)
4531
4532     Appends the string \a other onto the end of this string and
4533     returns a reference to this string.
4534
4535     Example:
4536
4537     \snippet qstring/main.cpp 84
4538
4539     This operation is typically very fast (\l{constant time}),
4540     because QString preallocates extra space at the end of the string
4541     data so it can grow without reallocating the entire string each
4542     time.
4543
4544     \sa append(), prepend()
4545 */
4546
4547 /*! \fn QString &QString::operator+=(QLatin1String str)
4548
4549     \overload operator+=()
4550
4551     Appends the Latin-1 string \a str to this string.
4552 */
4553
4554 /*! \fn QString &QString::operator+=(const QByteArray &ba)
4555
4556     \overload operator+=()
4557
4558     Appends the byte array \a ba to this string. The byte array is converted
4559     to Unicode using the fromUtf8() function. If any NUL characters ('\\0')
4560     are embedded in the \a ba byte array, they will be included in the
4561     transformation.
4562
4563     You can disable this function by defining \c
4564     QT_NO_CAST_FROM_ASCII when you compile your applications. This
4565     can be useful if you want to ensure that all user-visible strings
4566     go through QObject::tr(), for example.
4567 */
4568
4569 /*! \fn QString &QString::operator+=(const char *str)
4570
4571     \overload operator+=()
4572
4573     Appends the string \a str to this string. The const char pointer
4574     is converted to Unicode using the fromUtf8() function.
4575
4576     You can disable this function by defining \c QT_NO_CAST_FROM_ASCII
4577     when you compile your applications. This can be useful if you want
4578     to ensure that all user-visible strings go through QObject::tr(),
4579     for example.
4580 */
4581
4582 /*! \fn QString &QString::operator+=(const QStringRef &str)
4583
4584     \overload operator+=()
4585
4586     Appends the string section referenced by \a str to this string.
4587 */
4588
4589 /*! \fn QString &QString::operator+=(char ch)
4590
4591     \overload operator+=()
4592
4593     Appends the character \a ch to this string. Note that the character is
4594     converted to Unicode using the fromLatin1() function, unlike other 8-bit
4595     functions that operate on UTF-8 data.
4596
4597     You can disable this function by defining \c QT_NO_CAST_FROM_ASCII
4598     when you compile your applications. This can be useful if you want
4599     to ensure that all user-visible strings go through QObject::tr(),
4600     for example.
4601 */
4602
4603 /*! \fn QString &QString::operator+=(QChar ch)
4604
4605     \overload operator+=()
4606
4607     Appends the character \a ch to the string.
4608 */
4609
4610 /*! \fn QString &QString::operator+=(QChar::SpecialCharacter c)
4611
4612     \overload operator+=()
4613
4614     \internal
4615 */
4616
4617 /*!
4618     \fn bool operator==(const char *s1, const QString &s2)
4619
4620     \overload  operator==()
4621     \relates QString
4622
4623     Returns true if \a s1 is equal to \a s2; otherwise returns false.
4624     Note that no string is equal to \a s1 being 0.
4625
4626     Equivalent to \c {s1 != 0 && compare(s1, s2) == 0}.
4627
4628     \sa QString::compare()
4629 */
4630
4631 /*!
4632     \fn bool operator!=(const char *s1, const QString &s2)
4633     \relates QString
4634
4635     Returns true if \a s1 is not equal to \a s2; otherwise returns
4636     false.
4637
4638     For \a s1 != 0, this is equivalent to \c {compare(} \a s1, \a s2
4639     \c {) != 0}. Note that no string is equal to \a s1 being 0.
4640
4641     \sa QString::compare()
4642 */
4643
4644 /*!
4645     \fn bool operator<(const char *s1, const QString &s2)
4646     \relates QString
4647
4648     Returns true if \a s1 is lexically less than \a s2; otherwise
4649     returns false.  For \a s1 != 0, this is equivalent to \c
4650     {compare(s1, s2) < 0}.
4651
4652     The comparison is based exclusively on the numeric Unicode values
4653     of the characters and is very fast, but is not what a human would
4654     expect. Consider sorting user-interface strings using the
4655     QString::localeAwareCompare() function.
4656
4657     \sa QString::compare()
4658 */
4659
4660 /*!
4661     \fn bool operator<=(const char *s1, const QString &s2)
4662     \relates QString
4663
4664     Returns true if \a s1 is lexically less than or equal to \a s2;
4665     otherwise returns false.  For \a s1 != 0, this is equivalent to \c
4666     {compare(s1, s2) <= 0}.
4667
4668     The comparison is based exclusively on the numeric Unicode values
4669     of the characters and is very fast, but is not what a human would
4670     expect. Consider sorting user-interface strings with
4671     QString::localeAwareCompare().
4672
4673     \sa QString::compare()
4674 */
4675
4676 /*!
4677     \fn bool operator>(const char *s1, const QString &s2)
4678     \relates QString
4679
4680     Returns true if \a s1 is lexically greater than \a s2; otherwise
4681     returns false.  Equivalent to \c {compare(s1, s2) > 0}.
4682
4683     The comparison is based exclusively on the numeric Unicode values
4684     of the characters and is very fast, but is not what a human would
4685     expect. Consider sorting user-interface strings using the
4686     QString::localeAwareCompare() function.
4687
4688     \sa QString::compare()
4689 */
4690
4691 /*!
4692     \fn bool operator>=(const char *s1, const QString &s2)
4693     \relates QString
4694
4695     Returns true if \a s1 is lexically greater than or equal to \a s2;
4696     otherwise returns false.  For \a s1 != 0, this is equivalent to \c
4697     {compare(s1, s2) >= 0}.
4698
4699     The comparison is based exclusively on the numeric Unicode values
4700     of the characters and is very fast, but is not what a human would
4701     expect. Consider sorting user-interface strings using the
4702     QString::localeAwareCompare() function.
4703 */
4704
4705 /*!
4706     \fn const QString operator+(const QString &s1, const QString &s2)
4707     \relates QString
4708
4709     Returns a string which is the result of concatenating \a s1 and \a
4710     s2.
4711 */
4712
4713 /*!
4714     \fn const QString operator+(const QString &s1, const char *s2)
4715     \relates QString
4716
4717     Returns a string which is the result of concatenating \a s1 and \a
4718     s2 (\a s2 is converted to Unicode using the QString::fromUtf8()
4719     function).
4720
4721     \sa QString::fromUtf8()
4722 */
4723
4724 /*!
4725     \fn const QString operator+(const char *s1, const QString &s2)
4726     \relates QString
4727
4728     Returns a string which is the result of concatenating \a s1 and \a
4729     s2 (\a s1 is converted to Unicode using the QString::fromUtf8()
4730     function).
4731
4732     \sa QString::fromUtf8()
4733 */
4734
4735 /*!
4736     \fn const QString operator+(const QString &s, char ch)
4737     \relates QString
4738
4739     Returns a string which is the result of concatenating the string
4740     \a s and the character \a ch.
4741 */
4742
4743 /*!
4744     \fn const QString operator+(char ch, const QString &s)
4745     \relates QString
4746
4747     Returns a string which is the result of concatenating the
4748     character \a ch and the string \a s.
4749 */
4750
4751 /*!
4752     \fn int QString::compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs)
4753     \since 4.2
4754
4755     Compares \a s1 with \a s2 and returns an integer less than, equal
4756     to, or greater than zero if \a s1 is less than, equal to, or
4757     greater than \a s2.
4758
4759     If \a cs is Qt::CaseSensitive, the comparison is case sensitive;
4760     otherwise the comparison is case insensitive.
4761
4762     Case sensitive comparison is based exclusively on the numeric
4763     Unicode values of the characters and is very fast, but is not what
4764     a human would expect.  Consider sorting user-visible strings with
4765     localeAwareCompare().
4766
4767     \snippet qstring/main.cpp 16
4768
4769     \sa operator==(), operator<(), operator>()
4770 */
4771
4772 /*!
4773     \fn int QString::compare(const QString &s1, QLatin1String s2, Qt::CaseSensitivity cs)
4774     \since 4.2
4775     \overload compare()
4776
4777     Performs a comparison of \a s1 and \a s2, using the case
4778     sensitivity setting \a cs.
4779 */
4780
4781 /*!
4782     \fn int QString::compare(QLatin1String s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)
4783
4784     \since 4.2
4785     \overload compare()
4786
4787     Performs a comparison of \a s1 and \a s2, using the case
4788     sensitivity setting \a cs.
4789 */
4790
4791
4792 /*!
4793     \overload compare()
4794     \since 4.2
4795
4796     Lexically compares this string with the \a other string and
4797     returns an integer less than, equal to, or greater than zero if
4798     this string is less than, equal to, or greater than the other
4799     string.
4800
4801     Same as compare(*this, \a other, \a cs).
4802 */
4803 int QString::compare(const QString &other, Qt::CaseSensitivity cs) const
4804 {
4805     if (cs == Qt::CaseSensitive)
4806         return ucstrcmp(constData(), length(), other.constData(), other.length());
4807     return ucstricmp(d->data(), d->data() + d->size, other.d->data(), other.d->data() + other.d->size);
4808 }
4809
4810 /*!
4811     \internal
4812     \since 4.5
4813 */
4814 int QString::compare_helper(const QChar *data1, int length1, const QChar *data2, int length2,
4815                             Qt::CaseSensitivity cs)
4816 {
4817     if (cs == Qt::CaseSensitive)
4818         return ucstrcmp(data1, length1, data2, length2);
4819     register const ushort *s1 = reinterpret_cast<const ushort *>(data1);
4820     register const ushort *s2 = reinterpret_cast<const ushort *>(data2);
4821     return ucstricmp(s1, s1 + length1, s2, s2 + length2);
4822 }
4823
4824 /*!
4825     \overload compare()
4826     \since 4.2
4827
4828     Same as compare(*this, \a other, \a cs).
4829 */
4830 int QString::compare(QLatin1String other, Qt::CaseSensitivity cs) const
4831 {
4832     return compare_helper(unicode(), length(), other, cs);
4833 }
4834
4835 /*!
4836   \fn int QString::compare(const QStringRef &ref, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
4837   \overload compare()
4838
4839   Compares the string reference, \a ref, with the string and returns
4840   an integer less than, equal to, or greater than zero if the string
4841   is less than, equal to, or greater than \a ref.
4842 */
4843
4844 /*!
4845     \internal
4846     \since 5.0
4847 */
4848 int QString::compare_helper(const QChar *data1, int length1, const char *data2, int length2,
4849                             Qt::CaseSensitivity cs)
4850 {
4851     // ### optimize me
4852     const QString s2 = QString::fromUtf8(data2, length2 == -1 ? (data2 ? int(strlen(data2)) : -1) : length2);
4853     return compare_helper(data1, length1, s2.constData(), s2.size(), cs);
4854 }
4855
4856 /*!
4857   \fn int QString::compare(const QString &s1, const QStringRef &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)
4858   \overload compare()
4859 */
4860
4861 /*!
4862     \internal
4863     \since 4.5
4864 */
4865 int QString::compare_helper(const QChar *data1, int length1, QLatin1String s2,
4866                             Qt::CaseSensitivity cs)
4867 {
4868     const ushort *uc = reinterpret_cast<const ushort *>(data1);
4869     const ushort *uce = uc + length1;
4870     const uchar *c = (uchar *)s2.latin1();
4871
4872     if (!c)
4873         return length1;
4874
4875     if (cs == Qt::CaseSensitive) {
4876         const ushort *e = uc + length1;
4877         if (s2.size() < length1)
4878             e = uc + s2.size();
4879         while (uc < e) {
4880             int diff = *uc - *c;
4881             if (diff)
4882                 return diff;
4883             uc++, c++;
4884         }
4885
4886         if (uc == uce) {
4887             if (c == (const uchar *)s2.latin1() + s2.size())
4888                 return 0;
4889             return -1;
4890         }
4891         return 1;
4892     } else {
4893         return ucstricmp(uc, uce, c, c + s2.size());
4894     }
4895 }
4896
4897 /*!
4898     \fn int QString::localeAwareCompare(const QString & s1, const QString & s2)
4899
4900     Compares \a s1 with \a s2 and returns an integer less than, equal
4901     to, or greater than zero if \a s1 is less than, equal to, or
4902     greater than \a s2.
4903
4904     The comparison is performed in a locale- and also
4905     platform-dependent manner. Use this function to present sorted
4906     lists of strings to the user.
4907
4908     On Mac OS X since Qt 4.3, this function compares according the
4909     "Order for sorted lists" setting in the International prefereces panel.
4910
4911     \sa compare(), QTextCodec::locale()
4912 */
4913
4914 /*!
4915     \fn int QString::localeAwareCompare(const QStringRef &other) const
4916     \since 4.5
4917     \overload localeAwareCompare()
4918
4919     Compares this string with the \a other string and returns an
4920     integer less than, equal to, or greater than zero if this string
4921     is less than, equal to, or greater than the \a other string.
4922
4923     The comparison is performed in a locale- and also
4924     platform-dependent manner. Use this function to present sorted
4925     lists of strings to the user.
4926
4927     Same as \c {localeAwareCompare(*this, other)}.
4928 */
4929
4930 /*!
4931     \fn int QString::localeAwareCompare(const QString &s1, const QStringRef &s2)
4932     \since 4.5
4933     \overload localeAwareCompare()
4934
4935     Compares \a s1 with \a s2 and returns an integer less than, equal
4936     to, or greater than zero if \a s1 is less than, equal to, or
4937     greater than \a s2.
4938
4939     The comparison is performed in a locale- and also
4940     platform-dependent manner. Use this function to present sorted
4941     lists of strings to the user.
4942 */
4943
4944
4945 #if !defined(CSTR_LESS_THAN)
4946 #define CSTR_LESS_THAN    1
4947 #define CSTR_EQUAL        2
4948 #define CSTR_GREATER_THAN 3
4949 #endif
4950
4951 /*!
4952     \overload localeAwareCompare()
4953
4954     Compares this string with the \a other string and returns an
4955     integer less than, equal to, or greater than zero if this string
4956     is less than, equal to, or greater than the \a other string.
4957
4958     The comparison is performed in a locale- and also
4959     platform-dependent manner. Use this function to present sorted
4960     lists of strings to the user.
4961
4962     Same as \c {localeAwareCompare(*this, other)}.
4963 */
4964 int QString::localeAwareCompare(const QString &other) const
4965 {
4966     return localeAwareCompare_helper(constData(), length(), other.constData(), other.length());
4967 }
4968
4969 /*!
4970     \internal
4971     \since 4.5
4972 */
4973 int QString::localeAwareCompare_helper(const QChar *data1, int length1,
4974                                        const QChar *data2, int length2)
4975 {
4976     // do the right thing for null and empty
4977     if (length1 == 0 || length2 == 0)
4978         return ucstrcmp(data1, length1, data2, length2);
4979
4980 #if defined(Q_OS_WIN32) || defined(Q_OS_WINCE)
4981     int res = CompareString(GetUserDefaultLCID(), 0, (wchar_t*)data1, length1, (wchar_t*)data2, length2);
4982
4983     switch (res) {
4984     case CSTR_LESS_THAN:
4985         return -1;
4986     case CSTR_GREATER_THAN:
4987         return 1;
4988     default:
4989         return 0;
4990     }
4991 #elif defined (Q_OS_MAC)
4992     // Use CFStringCompare for comparing strings on Mac. This makes Qt order
4993     // strings the same way as native applications do, and also respects
4994     // the "Order for sorted lists" setting in the International preferences
4995     // panel.
4996     const CFStringRef thisString =
4997         CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault,
4998             reinterpret_cast<const UniChar *>(data1), length1, kCFAllocatorNull);
4999     const CFStringRef otherString =
5000         CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault,
5001             reinterpret_cast<const UniChar *>(data2), length2, kCFAllocatorNull);
5002
5003     const int result = CFStringCompare(thisString, otherString, kCFCompareLocalized);
5004     CFRelease(thisString);
5005     CFRelease(otherString);
5006     return result;
5007 #elif defined(QT_USE_ICU)
5008     QCollator collator;
5009     return collator.compare(data1, length1, data2, length2);
5010 #elif defined(Q_OS_UNIX)
5011     // declared in <string.h>
5012     int delta = strcoll(toLocal8Bit_helper(data1, length1).constData(), toLocal8Bit_helper(data2, length2).constData());
5013     if (delta == 0)
5014         delta = ucstrcmp(data1, length1, data2, length2);
5015     return delta;
5016 #else
5017     return ucstrcmp(data1, length1, data2, length2);
5018 #endif
5019 }
5020
5021
5022 /*!
5023     \fn const QChar *QString::unicode() const
5024
5025     Returns a '\\0'-terminated Unicode representation of the string.
5026     The result remains valid until the string is modified.
5027
5028     \sa utf16()
5029 */
5030
5031 /*!
5032     \fn const ushort *QString::utf16() const
5033
5034     Returns the QString as a '\\0\'-terminated array of unsigned
5035     shorts. The result remains valid until the string is modified.
5036
5037     The returned string is in host byte order.
5038
5039     \sa unicode()
5040 */
5041
5042 const ushort *QString::utf16() const
5043 {
5044     if (IS_RAW_DATA(d)) {
5045         // ensure '\0'-termination for ::fromRawData strings
5046         const_cast<QString*>(this)->reallocData(uint(d->size) + 1u);
5047     }
5048     return d->data();
5049 }
5050
5051 /*!
5052     Returns a string of size \a width that contains this string
5053     padded by the \a fill character.
5054
5055     If \a truncate is false and the size() of the string is more than
5056     \a width, then the returned string is a copy of the string.
5057
5058     \snippet qstring/main.cpp 32
5059
5060     If \a truncate is true and the size() of the string is more than
5061     \a width, then any characters in a copy of the string after
5062     position \a width are removed, and the copy is returned.
5063
5064     \snippet qstring/main.cpp 33
5065
5066     \sa rightJustified()
5067 */
5068
5069 QString QString::leftJustified(int width, QChar fill, bool truncate) const
5070 {
5071     QString result;
5072     int len = length();
5073     int padlen = width - len;
5074     if (padlen > 0) {
5075         result.resize(len+padlen);
5076         if (len)
5077             memcpy(result.d->data(), d->data(), sizeof(QChar)*len);
5078         QChar *uc = (QChar*)result.d->data() + len;
5079         while (padlen--)
5080            * uc++ = fill;
5081     } else {
5082         if (truncate)
5083             result = left(width);
5084         else
5085             result = *this;
5086     }
5087     return result;
5088 }
5089
5090 /*!
5091     Returns a string of size() \a width that contains the \a fill
5092     character followed by the string. For example:
5093
5094     \snippet qstring/main.cpp 49
5095
5096     If \a truncate is false and the size() of the string is more than
5097     \a width, then the returned string is a copy of the string.
5098
5099     If \a truncate is true and the size() of the string is more than
5100     \a width, then the resulting string is truncated at position \a
5101     width.
5102
5103     \snippet qstring/main.cpp 50
5104
5105     \sa leftJustified()
5106 */
5107
5108 QString QString::rightJustified(int width, QChar fill, bool truncate) const
5109 {
5110     QString result;
5111     int len = length();
5112     int padlen = width - len;
5113     if (padlen > 0) {
5114         result.resize(len+padlen);
5115         QChar *uc = (QChar*)result.d->data();
5116         while (padlen--)
5117            * uc++ = fill;
5118         if (len)
5119             memcpy(uc, d->data(), sizeof(QChar)*len);
5120     } else {
5121         if (truncate)
5122             result = left(width);
5123         else
5124             result = *this;
5125     }
5126     return result;
5127 }
5128
5129 /*!
5130     Returns a lowercase copy of the string.
5131
5132     \snippet qstring/main.cpp 75
5133
5134     The case conversion will always happen in the 'C' locale. For locale dependent
5135     case folding use QLocale::toLower()
5136
5137     \sa toUpper(), QLocale::toLower()
5138 */
5139
5140 QString QString::toLower() const
5141 {
5142     const ushort *p = d->data();
5143     if (!p)
5144         return *this;
5145
5146     const ushort *e = p + d->size;
5147     // this avoids out of bounds check in the loop
5148     while (e != p && QChar::isHighSurrogate(*(e - 1)))
5149         --e;
5150
5151     const QUnicodeTables::Properties *prop;
5152     while (p != e) {
5153         if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
5154             ushort high = *p++;
5155             prop = qGetProp(QChar::surrogateToUcs4(high, *p));
5156         } else {
5157             prop = qGetProp(*p);
5158         }
5159         if (prop->lowerCaseDiff) {
5160             if (QChar::isLowSurrogate(*p))
5161                 --p; // safe; diff is 0 for surrogates
5162             QString s(d->size, Qt::Uninitialized);
5163             memcpy(s.d->data(), d->data(), (p - d->data())*sizeof(ushort));
5164             ushort *pp = s.d->data() + (p - d->data());
5165             while (p != e) {
5166                 if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
5167                     *pp = *p++;
5168                     prop = qGetProp(QChar::surrogateToUcs4(*pp++, *p));
5169                 } else {
5170                     prop = qGetProp(*p);
5171                 }
5172                 if (prop->lowerCaseSpecial) {
5173                     const ushort *specialCase = specialCaseMap + prop->lowerCaseDiff;
5174                     ushort length = *specialCase++;
5175                     int pos = pp - s.d->data();
5176                     s.resize(s.d->size + length - 1);
5177                     pp = s.d->data() + pos;
5178                     while (length--)
5179                         *pp++ = *specialCase++;
5180                 } else {
5181                     *pp++ = *p + prop->lowerCaseDiff;
5182                 }
5183                 ++p;
5184             }
5185
5186             // this restores high surrogate parts eaten above, if any
5187             while (e != d->data() + d->size)
5188                 *pp++ = *e++;
5189
5190             return s;
5191         }
5192         ++p;
5193     }
5194     return *this;
5195 }
5196
5197 /*!
5198     Returns the case folded equivalent of the string. For most Unicode
5199     characters this is the same as toLower().
5200 */
5201 QString QString::toCaseFolded() const
5202 {
5203     const ushort *p = d->data();
5204     if (!p)
5205         return *this;
5206
5207     const ushort *e = p + d->size;
5208     // this avoids out of bounds check in the loop
5209     while (e != p && QChar::isHighSurrogate(*(e - 1)))
5210         --e;
5211
5212     const QUnicodeTables::Properties *prop;
5213     while (p != e) {
5214         if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
5215             ushort high = *p++;
5216             prop = qGetProp(QChar::surrogateToUcs4(high, *p));
5217         } else {
5218             prop = qGetProp(*p);
5219         }
5220         if (prop->caseFoldDiff) {
5221             if (QChar::isLowSurrogate(*p))
5222                 --p; // safe; diff is 0 for surrogates
5223             QString s(d->size, Qt::Uninitialized);
5224             memcpy(s.d->data(), d->data(), (p - d->data())*sizeof(ushort));
5225             ushort *pp = s.d->data() + (p - d->data());
5226             while (p != e) {
5227                 if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
5228                     *pp = *p++;
5229                     prop = qGetProp(QChar::surrogateToUcs4(*pp++, *p));
5230                 } else {
5231                     prop = qGetProp(*p);
5232                 }
5233                 if (prop->caseFoldSpecial) {
5234                     const ushort *specialCase = specialCaseMap + prop->caseFoldDiff;
5235                     ushort length = *specialCase++;
5236 #if 0
5237                     int pos = pp - s.d->data;
5238                     s.resize(s.d->size + length - 1);
5239                     pp = s.d->data + pos;
5240                     while (length--)
5241                         *pp++ = *specialCase++;
5242 #else
5243                     //### we currently don't support full case foldings
5244                     Q_ASSERT(length == 1);
5245                     Q_UNUSED(length)
5246                     *pp++ = *specialCase;
5247 #endif
5248                 } else {
5249                     *pp++ = *p + prop->caseFoldDiff;
5250                 }
5251                 ++p;
5252             }
5253
5254             // this restores high surrogate parts eaten above, if any
5255             while (e != d->data() + d->size)
5256                 *pp++ = *e++;
5257
5258             return s;
5259         }
5260         ++p;
5261     }
5262     return *this;
5263 }
5264
5265 /*!
5266     Returns an uppercase copy of the string.
5267
5268     \snippet qstring/main.cpp 81
5269
5270     The case conversion will always happen in the 'C' locale. For locale dependent
5271     case folding use QLocale::toUpper()
5272
5273     \sa toLower(), QLocale::toLower()
5274 */
5275 QString QString::toUpper() const
5276 {
5277     const ushort *p = d->data();
5278     if (!p)
5279         return *this;
5280
5281     const ushort *e = p + d->size;
5282     // this avoids out of bounds check in the loop
5283     while (e != p && QChar::isHighSurrogate(*(e - 1)))
5284         --e;
5285
5286     const QUnicodeTables::Properties *prop;
5287     while (p != e) {
5288         if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
5289             ushort high = *p++;
5290             prop = qGetProp(QChar::surrogateToUcs4(high, *p));
5291         } else {
5292             prop = qGetProp(*p);
5293         }
5294         if (prop->upperCaseDiff) {
5295             if (QChar::isLowSurrogate(*p))
5296                 --p; // safe; diff is 0 for surrogates
5297             QString s(d->size, Qt::Uninitialized);
5298             memcpy(s.d->data(), d->data(), (p - d->data())*sizeof(ushort));
5299             ushort *pp = s.d->data() + (p - d->data());
5300             while (p != e) {
5301                 if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
5302                     *pp = *p++;
5303                     prop = qGetProp(QChar::surrogateToUcs4(*pp++, *p));
5304                 } else {
5305                     prop = qGetProp(*p);
5306                 }
5307                 if (prop->upperCaseSpecial) {
5308                     const ushort *specialCase = specialCaseMap + prop->upperCaseDiff;
5309                     ushort length = *specialCase++;
5310                     int pos = pp - s.d->data();
5311                     s.resize(s.d->size + length - 1);
5312                     pp = s.d->data() + pos;
5313                     while (length--)
5314                         *pp++ = *specialCase++;
5315                 } else {
5316                     *pp++ = *p + prop->upperCaseDiff;
5317                 }
5318                 ++p;
5319             }
5320
5321             // this restores high surrogate parts eaten above, if any
5322             while (e != d->data() + d->size)
5323                 *pp++ = *e++;
5324
5325             return s;
5326         }
5327         ++p;
5328     }
5329     return *this;
5330 }
5331
5332 // ### Qt 6: Consider whether this function shouldn't be removed See task 202871.
5333 /*!
5334     Safely builds a formatted string from the format string \a cformat
5335     and an arbitrary list of arguments.
5336
5337     The %lc escape sequence expects a unicode character of type ushort
5338     (as returned by QChar::unicode()). The %ls escape sequence expects
5339     a pointer to a zero-terminated array of unicode characters of type
5340     ushort (as returned by QString::utf16()).
5341
5342     \note This function expects a UTF-8 string for %s and Latin-1 for
5343     the format string.
5344
5345     The format string supports most of the conversion specifiers
5346     provided by printf() in the standard C++ library. It doesn't
5347     honor the length modifiers (e.g. \c h for \c short, \c ll for
5348     \c{long long}). If you need those, use the standard snprintf()
5349     function instead:
5350
5351     \snippet qstring/main.cpp 63
5352
5353     \warning We do not recommend using QString::sprintf() in new Qt
5354     code. Instead, consider using QTextStream or arg(), both of
5355     which support Unicode strings seamlessly and are type-safe.
5356     Here's an example that uses QTextStream:
5357
5358     \snippet qstring/main.cpp 64
5359
5360     For \l {QObject::tr()}{translations}, especially if the strings
5361     contains more than one escape sequence, you should consider using
5362     the arg() function instead. This allows the order of the
5363     replacements to be controlled by the translator.
5364
5365     \sa arg()
5366 */
5367
5368 QString &QString::sprintf(const char *cformat, ...)
5369 {
5370     va_list ap;
5371     va_start(ap, cformat);
5372     QString &s = vsprintf(cformat, ap);
5373     va_end(ap);
5374     return s;
5375 }
5376
5377 /*!
5378     Equivalent method to sprintf(), but takes a va_list \a ap
5379     instead a list of variable arguments. See the sprintf()
5380     documentation for an explanation of \a cformat.
5381
5382     This method does not call the va_end macro, the caller
5383     is responsible to call va_end on \a ap.
5384
5385     \sa sprintf()
5386 */
5387
5388 QString &QString::vsprintf(const char* cformat, va_list ap)
5389 {
5390     QLocale locale(QLocale::C);
5391
5392     if (!cformat || !*cformat) {
5393         // Qt 1.x compat
5394         *this = fromLatin1("");
5395         return *this;
5396     }
5397
5398     // Parse cformat
5399
5400     QString result;
5401     const char *c = cformat;
5402     for (;;) {
5403         // Copy non-escape chars to result
5404         while (*c != '\0' && *c != '%')
5405             result.append(QLatin1Char(*c++));
5406
5407         if (*c == '\0')
5408             break;
5409
5410         // Found '%'
5411         const char *escape_start = c;
5412         ++c;
5413
5414         if (*c == '\0') {
5415             result.append(QLatin1Char('%')); // a % at the end of the string - treat as non-escape text
5416             break;
5417         }
5418         if (*c == '%') {
5419             result.append(QLatin1Char('%')); // %%
5420             ++c;
5421             continue;
5422         }
5423
5424         // Parse flag characters
5425         uint flags = 0;
5426         bool no_more_flags = false;
5427         do {
5428             switch (*c) {
5429                 case '#': flags |= QLocalePrivate::Alternate; break;
5430                 case '0': flags |= QLocalePrivate::ZeroPadded; break;
5431                 case '-': flags |= QLocalePrivate::LeftAdjusted; break;
5432                 case ' ': flags |= QLocalePrivate::BlankBeforePositive; break;
5433                 case '+': flags |= QLocalePrivate::AlwaysShowSign; break;
5434                 case '\'': flags |= QLocalePrivate::ThousandsGroup; break;
5435                 default: no_more_flags = true; break;
5436             }
5437
5438             if (!no_more_flags)
5439                 ++c;
5440         } while (!no_more_flags);
5441
5442         if (*c == '\0') {
5443             result.append(QLatin1String(escape_start)); // incomplete escape, treat as non-escape text
5444             break;
5445         }
5446
5447         // Parse field width
5448         int width = -1; // -1 means unspecified
5449         if (qIsDigit(*c)) {
5450             QString width_str;
5451             while (*c != '\0' && qIsDigit(*c))
5452                 width_str.append(QLatin1Char(*c++));
5453
5454             // can't be negative - started with a digit
5455             // contains at least one digit
5456             width = width_str.toInt();
5457         }
5458         else if (*c == '*') {
5459             width = va_arg(ap, int);
5460             if (width < 0)
5461                 width = -1; // treat all negative numbers as unspecified
5462             ++c;
5463         }
5464
5465         if (*c == '\0') {
5466             result.append(QLatin1String(escape_start)); // incomplete escape, treat as non-escape text
5467             break;
5468         }
5469
5470         // Parse precision
5471         int precision = -1; // -1 means unspecified
5472         if (*c == '.') {
5473             ++c;
5474             if (qIsDigit(*c)) {
5475                 QString precision_str;
5476                 while (*c != '\0' && qIsDigit(*c))
5477                     precision_str.append(QLatin1Char(*c++));
5478
5479                 // can't be negative - started with a digit
5480                 // contains at least one digit
5481                 precision = precision_str.toInt();
5482             }
5483             else if (*c == '*') {
5484                 precision = va_arg(ap, int);
5485                 if (precision < 0)
5486                     precision = -1; // treat all negative numbers as unspecified
5487                 ++c;
5488             }
5489         }
5490
5491         if (*c == '\0') {
5492             result.append(QLatin1String(escape_start)); // incomplete escape, treat as non-escape text
5493             break;
5494         }
5495
5496         // Parse the length modifier
5497         enum LengthMod { lm_none, lm_hh, lm_h, lm_l, lm_ll, lm_L, lm_j, lm_z, lm_t };
5498         LengthMod length_mod = lm_none;
5499         switch (*c) {
5500             case 'h':
5501                 ++c;
5502                 if (*c == 'h') {
5503                     length_mod = lm_hh;
5504                     ++c;
5505                 }
5506                 else
5507                     length_mod = lm_h;
5508                 break;
5509
5510             case 'l':
5511                 ++c;
5512                 if (*c == 'l') {
5513                     length_mod = lm_ll;
5514                     ++c;
5515                 }
5516                 else
5517                     length_mod = lm_l;
5518                 break;
5519
5520             case 'L':
5521                 ++c;
5522                 length_mod = lm_L;
5523                 break;
5524
5525             case 'j':
5526                 ++c;
5527                 length_mod = lm_j;
5528                 break;
5529
5530             case 'z':
5531             case 'Z':
5532                 ++c;
5533                 length_mod = lm_z;
5534                 break;
5535
5536             case 't':
5537                 ++c;
5538                 length_mod = lm_t;
5539                 break;
5540
5541             default: break;
5542         }
5543
5544         if (*c == '\0') {
5545             result.append(QLatin1String(escape_start)); // incomplete escape, treat as non-escape text
5546             break;
5547         }
5548
5549         // Parse the conversion specifier and do the conversion
5550         QString subst;
5551         switch (*c) {
5552             case 'd':
5553             case 'i': {
5554                 qint64 i;
5555                 switch (length_mod) {
5556                     case lm_none: i = va_arg(ap, int); break;
5557                     case lm_hh: i = va_arg(ap, int); break;
5558                     case lm_h: i = va_arg(ap, int); break;
5559                     case lm_l: i = va_arg(ap, long int); break;
5560                     case lm_ll: i = va_arg(ap, qint64); break;
5561                     case lm_j: i = va_arg(ap, long int); break;
5562                     case lm_z: i = va_arg(ap, size_t); break;
5563                     case lm_t: i = va_arg(ap, int); break;
5564                     default: i = 0; break;
5565                 }
5566                 subst = locale.d->longLongToString(i, precision, 10, width, flags);
5567                 ++c;
5568                 break;
5569             }
5570             case 'o':
5571             case 'u':
5572             case 'x':
5573             case 'X': {
5574                 quint64 u;
5575                 switch (length_mod) {
5576                     case lm_none: u = va_arg(ap, uint); break;
5577                     case lm_hh: u = va_arg(ap, uint); break;
5578                     case lm_h: u = va_arg(ap, uint); break;
5579                     case lm_l: u = va_arg(ap, ulong); break;
5580                     case lm_ll: u = va_arg(ap, quint64); break;
5581                     case lm_z: u = va_arg(ap, size_t); break;
5582                     default: u = 0; break;
5583                 }
5584
5585                 if (qIsUpper(*c))
5586                     flags |= QLocalePrivate::CapitalEorX;
5587
5588                 int base = 10;
5589                 switch (qToLower(*c)) {
5590                     case 'o':
5591                         base = 8; break;
5592                     case 'u':
5593                         base = 10; break;
5594                     case 'x':
5595                         base = 16; break;
5596                     default: break;
5597                 }
5598                 subst = locale.d->unsLongLongToString(u, precision, base, width, flags);
5599                 ++c;
5600                 break;
5601             }
5602             case 'E':
5603             case 'e':
5604             case 'F':
5605             case 'f':
5606             case 'G':
5607             case 'g':
5608             case 'A':
5609             case 'a': {
5610                 double d;
5611                 if (length_mod == lm_L)
5612                     d = va_arg(ap, long double); // not supported - converted to a double
5613                 else
5614                     d = va_arg(ap, double);
5615
5616                 if (qIsUpper(*c))
5617                     flags |= QLocalePrivate::CapitalEorX;
5618
5619                 QLocalePrivate::DoubleForm form = QLocalePrivate::DFDecimal;
5620                 switch (qToLower(*c)) {
5621                     case 'e': form = QLocalePrivate::DFExponent; break;
5622                     case 'a':                             // not supported - decimal form used instead
5623                     case 'f': form = QLocalePrivate::DFDecimal; break;
5624                     case 'g': form = QLocalePrivate::DFSignificantDigits; break;
5625                     default: break;
5626                 }
5627                 subst = locale.d->doubleToString(d, precision, form, width, flags);
5628                 ++c;
5629                 break;
5630             }
5631             case 'c': {
5632                 if (length_mod == lm_l)
5633                     subst = QChar((ushort) va_arg(ap, int));
5634                 else
5635                     subst = QLatin1Char((uchar) va_arg(ap, int));
5636                 ++c;
5637                 break;
5638             }
5639             case 's': {
5640                 if (length_mod == lm_l) {
5641                     const ushort *buff = va_arg(ap, const ushort*);
5642                     const ushort *ch = buff;
5643                     while (*ch != 0)
5644                         ++ch;
5645                     subst.setUtf16(buff, ch - buff);
5646                 } else
5647                     subst = QString::fromUtf8(va_arg(ap, const char*));
5648                 if (precision != -1)
5649                     subst.truncate(precision);
5650                 ++c;
5651                 break;
5652             }
5653             case 'p': {
5654                 void *arg = va_arg(ap, void*);
5655 #ifdef Q_OS_WIN64
5656                 quint64 i = reinterpret_cast<quint64>(arg);
5657 #else
5658                 quint64 i = reinterpret_cast<unsigned long>(arg);
5659 #endif
5660                 flags |= QLocalePrivate::Alternate;
5661                 subst = locale.d->unsLongLongToString(i, precision, 16, width, flags);
5662                 ++c;
5663                 break;
5664             }
5665             case 'n':
5666                 switch (length_mod) {
5667                     case lm_hh: {
5668                         signed char *n = va_arg(ap, signed char*);
5669                         *n = result.length();
5670                         break;
5671                     }
5672                     case lm_h: {
5673                         short int *n = va_arg(ap, short int*);
5674                         *n = result.length();
5675                             break;
5676                     }
5677                     case lm_l: {
5678                         long int *n = va_arg(ap, long int*);
5679                         *n = result.length();
5680                         break;
5681                     }
5682                     case lm_ll: {
5683                         qint64 *n = va_arg(ap, qint64*);
5684                         volatile uint tmp = result.length(); // egcs-2.91.66 gets internal
5685                         *n = tmp;                             // compiler error without volatile
5686                         break;
5687                     }
5688                     default: {
5689                         int *n = va_arg(ap, int*);
5690                         *n = result.length();
5691                         break;
5692                     }
5693                 }
5694                 ++c;
5695                 break;
5696
5697             default: // bad escape, treat as non-escape text
5698                 for (const char *cc = escape_start; cc != c; ++cc)
5699                     result.append(QLatin1Char(*cc));
5700                 continue;
5701         }
5702
5703         if (flags & QLocalePrivate::LeftAdjusted)
5704             result.append(subst.leftJustified(width));
5705         else
5706             result.append(subst.rightJustified(width));
5707     }
5708
5709     *this = result;
5710
5711     return *this;
5712 }
5713
5714 /*!
5715     Returns the string converted to a \c{long long} using base \a
5716     base, which is 10 by default and must be between 2 and 36, or 0.
5717     Returns 0 if the conversion fails.
5718
5719     If a conversion error occurs, *\a{ok} is set to false; otherwise
5720     *\a{ok} is set to true.
5721
5722     If \a base is 0, the C language convention is used: If the string
5723     begins with "0x", base 16 is used; if the string begins with "0",
5724     base 8 is used; otherwise, base 10 is used.
5725
5726     The string conversion will always happen in the 'C' locale. For locale
5727     dependent conversion use QLocale::toLongLong()
5728
5729     Example:
5730
5731     \snippet qstring/main.cpp 74
5732
5733     \sa number(), toULongLong(), toInt(), QLocale::toLongLong()
5734 */
5735
5736 qint64 QString::toLongLong(bool *ok, int base) const
5737 {
5738 #if defined(QT_CHECK_RANGE)
5739     if (base != 0 && (base < 2 || base > 36)) {
5740         qWarning("QString::toLongLong: Invalid base (%d)", base);
5741         base = 10;
5742     }
5743 #endif
5744
5745     QLocale c_locale(QLocale::C);
5746     return c_locale.d->stringToLongLong(*this, base, ok, QLocalePrivate::FailOnGroupSeparators);
5747 }
5748
5749 /*!
5750     Returns the string converted to an \c{unsigned long long} using base \a
5751     base, which is 10 by default and must be between 2 and 36, or 0.
5752     Returns 0 if the conversion fails.
5753
5754     If a conversion error occurs, *\a{ok} is set to false; otherwise
5755     *\a{ok} is set to true.
5756
5757     If \a base is 0, the C language convention is used: If the string
5758     begins with "0x", base 16 is used; if the string begins with "0",
5759     base 8 is used; otherwise, base 10 is used.
5760
5761     The string conversion will always happen in the 'C' locale. For locale
5762     dependent conversion use QLocale::toULongLong()
5763
5764     Example:
5765
5766     \snippet qstring/main.cpp 79
5767
5768     \sa number(), toLongLong(), QLocale::toULongLong()
5769 */
5770
5771 quint64 QString::toULongLong(bool *ok, int base) const
5772 {
5773 #if defined(QT_CHECK_RANGE)
5774     if (base != 0 && (base < 2 || base > 36)) {
5775         qWarning("QString::toULongLong: Invalid base (%d)", base);
5776         base = 10;
5777     }
5778 #endif
5779
5780     QLocale c_locale(QLocale::C);
5781     return c_locale.d->stringToUnsLongLong(*this, base, ok, QLocalePrivate::FailOnGroupSeparators);
5782 }
5783
5784 /*!
5785     \fn long QString::toLong(bool *ok, int base) const
5786
5787     Returns the string converted to a \c long using base \a
5788     base, which is 10 by default and must be between 2 and 36, or 0.
5789     Returns 0 if the conversion fails.
5790
5791     If a conversion error occurs, *\a{ok} is set to false; otherwise
5792     *\a{ok} is set to true.
5793
5794     If \a base is 0, the C language convention is used: If the string
5795     begins with "0x", base 16 is used; if the string begins with "0",
5796     base 8 is used; otherwise, base 10 is used.
5797
5798     The string conversion will always happen in the 'C' locale. For locale
5799     dependent conversion use QLocale::toLong()
5800
5801     Example:
5802
5803     \snippet qstring/main.cpp 73
5804
5805     \sa number(), toULong(), toInt(), QLocale::toLong()
5806 */
5807
5808 long QString::toLong(bool *ok, int base) const
5809 {
5810     qint64 v = toLongLong(ok, base);
5811     if (v < LONG_MIN || v > LONG_MAX) {
5812         if (ok)
5813             *ok = false;
5814         v = 0;
5815     }
5816     return (long)v;
5817 }
5818
5819 /*!
5820     \fn ulong QString::toULong(bool *ok, int base) const
5821
5822     Returns the string converted to an \c{unsigned long} using base \a
5823     base, which is 10 by default and must be between 2 and 36, or 0.
5824     Returns 0 if the conversion fails.
5825
5826     If a conversion error occurs, *\a{ok} is set to false; otherwise
5827     *\a{ok} is set to true.
5828
5829     If \a base is 0, the C language convention is used: If the string
5830     begins with "0x", base 16 is used; if the string begins with "0",
5831     base 8 is used; otherwise, base 10 is used.
5832
5833     The string conversion will always happen in the 'C' locale. For locale
5834     dependent conversion use QLocale::toULong()
5835
5836     Example:
5837
5838     \snippet qstring/main.cpp 78
5839
5840     \sa number(), QLocale::toULong()
5841 */
5842
5843 ulong QString::toULong(bool *ok, int base) const
5844 {
5845     quint64 v = toULongLong(ok, base);
5846     if (v > ULONG_MAX) {
5847         if (ok)
5848             *ok = false;
5849         v = 0;
5850     }
5851     return (ulong)v;
5852 }
5853
5854
5855 /*!
5856     Returns the string converted to an \c int using base \a
5857     base, which is 10 by default and must be between 2 and 36, or 0.
5858     Returns 0 if the conversion fails.
5859
5860     If a conversion error occurs, *\a{ok} is set to false; otherwise
5861     *\a{ok} is set to true.
5862
5863     If \a base is 0, the C language convention is used: If the string
5864     begins with "0x", base 16 is used; if the string begins with "0",
5865     base 8 is used; otherwise, base 10 is used.
5866
5867     The string conversion will always happen in the 'C' locale. For locale
5868     dependent conversion use QLocale::toInt()
5869
5870     Example:
5871
5872     \snippet qstring/main.cpp 72
5873
5874     \sa number(), toUInt(), toDouble(), QLocale::toInt()
5875 */
5876
5877 int QString::toInt(bool *ok, int base) const
5878 {
5879     qint64 v = toLongLong(ok, base);
5880     if (v < INT_MIN || v > INT_MAX) {
5881         if (ok)
5882             *ok = false;
5883         v = 0;
5884     }
5885     return v;
5886 }
5887
5888 /*!
5889     Returns the string converted to an \c{unsigned int} using base \a
5890     base, which is 10 by default and must be between 2 and 36, or 0.
5891     Returns 0 if the conversion fails.
5892
5893     If a conversion error occurs, *\a{ok} is set to false; otherwise
5894     *\a{ok} is set to true.
5895
5896     If \a base is 0, the C language convention is used: If the string
5897     begins with "0x", base 16 is used; if the string begins with "0",
5898     base 8 is used; otherwise, base 10 is used.
5899
5900     The string conversion will always happen in the 'C' locale. For locale
5901     dependent conversion use QLocale::toUInt()
5902
5903     Example:
5904
5905     \snippet qstring/main.cpp 77
5906
5907     \sa number(), toInt(), QLocale::toUInt()
5908 */
5909
5910 uint QString::toUInt(bool *ok, int base) const
5911 {
5912     quint64 v = toULongLong(ok, base);
5913     if (v > UINT_MAX) {
5914         if (ok)
5915             *ok = false;
5916         v = 0;
5917     }
5918     return (uint)v;
5919 }
5920
5921 /*!
5922     Returns the string converted to a \c short using base \a
5923     base, which is 10 by default and must be between 2 and 36, or 0.
5924     Returns 0 if the conversion fails.
5925
5926     If a conversion error occurs, *\a{ok} is set to false; otherwise
5927     *\a{ok} is set to true.
5928
5929     If \a base is 0, the C language convention is used: If the string
5930     begins with "0x", base 16 is used; if the string begins with "0",
5931     base 8 is used; otherwise, base 10 is used.
5932
5933     The string conversion will always happen in the 'C' locale. For locale
5934     dependent conversion use QLocale::toShort()
5935
5936     Example:
5937
5938     \snippet qstring/main.cpp 76
5939
5940     \sa number(), toUShort(), toInt(), QLocale::toShort()
5941 */
5942
5943 short QString::toShort(bool *ok, int base) const
5944 {
5945     long v = toLongLong(ok, base);
5946     if (v < SHRT_MIN || v > SHRT_MAX) {
5947         if (ok)
5948             *ok = false;
5949         v = 0;
5950     }
5951     return (short)v;
5952 }
5953
5954 /*!
5955     Returns the string converted to an \c{unsigned short} using base \a
5956     base, which is 10 by default and must be between 2 and 36, or 0.
5957     Returns 0 if the conversion fails.
5958
5959     If a conversion error occurs, *\a{ok} is set to false; otherwise
5960     *\a{ok} is set to true.
5961
5962     If \a base is 0, the C language convention is used: If the string
5963     begins with "0x", base 16 is used; if the string begins with "0",
5964     base 8 is used; otherwise, base 10 is used.
5965
5966     The string conversion will always happen in the 'C' locale. For locale
5967     dependent conversion use QLocale::toUShort()
5968
5969     Example:
5970
5971     \snippet qstring/main.cpp 80
5972
5973     \sa number(), toShort(), QLocale::toUShort()
5974 */
5975
5976 ushort QString::toUShort(bool *ok, int base) const
5977 {
5978     ulong v = toULongLong(ok, base);
5979     if (v > USHRT_MAX) {
5980         if (ok)
5981             *ok = false;
5982         v = 0;
5983     }
5984     return (ushort)v;
5985 }
5986
5987
5988 /*!
5989     Returns the string converted to a \c double value.
5990
5991     Returns 0.0 if the conversion fails.
5992
5993     If a conversion error occurs, \c{*}\a{ok} is set to false;
5994     otherwise \c{*}\a{ok} is set to true.
5995
5996     \snippet qstring/main.cpp 66
5997
5998     Various string formats for floating point numbers can be converted
5999     to double values:
6000
6001     \snippet qstring/main.cpp 67
6002
6003     The string conversion will always happen in the 'C' locale. For locale
6004     dependent conversion use QLocale::toDouble()
6005
6006     \snippet qstring/main.cpp 68
6007
6008     For historic reasons, this function does not handle
6009     thousands group separators. If you need to convert such numbers,
6010     use QLocale::toDouble().
6011
6012     \snippet qstring/main.cpp 69
6013
6014     \sa number(), QLocale::setDefault(), QLocale::toDouble(), trimmed()
6015 */
6016
6017 double QString::toDouble(bool *ok) const
6018 {
6019     QLocale c_locale(QLocale::C);
6020     return c_locale.d->stringToDouble(*this, ok, QLocalePrivate::FailOnGroupSeparators);
6021 }
6022
6023 /*!
6024     Returns the string converted to a \c float value.
6025
6026     If a conversion error occurs, *\a{ok} is set to false; otherwise
6027     *\a{ok} is set to true. Returns 0.0 if the conversion fails.
6028
6029     The string conversion will always happen in the 'C' locale. For locale
6030     dependent conversion use QLocale::toFloat()
6031
6032     Example:
6033
6034     \snippet qstring/main.cpp 71
6035
6036     \sa number(), toDouble(), toInt(), QLocale::toFloat()
6037 */
6038
6039 #define QT_MAX_FLOAT 3.4028234663852886e+38
6040
6041 float QString::toFloat(bool *ok) const
6042 {
6043     bool myOk;
6044     double d = toDouble(&myOk);
6045     if (!myOk) {
6046         if (ok != 0)
6047             *ok = false;
6048         return 0.0;
6049     }
6050     if (qIsInf(d))
6051         return float(d);
6052     if (d > QT_MAX_FLOAT || d < -QT_MAX_FLOAT) {
6053         if (ok != 0)
6054             *ok = false;
6055         return 0.0;
6056     }
6057     if (ok != 0)
6058         *ok = true;
6059     return float(d);
6060 }
6061
6062 /*! \fn QString &QString::setNum(int n, int base)
6063
6064     Sets the string to the printed value of \a n in the specified \a
6065     base, and returns a reference to the string.
6066
6067     The base is 10 by default and must be between 2 and 36. For bases
6068     other than 10, \a n is treated as an unsigned integer.
6069
6070     \snippet qstring/main.cpp 56
6071
6072    The formatting always uses QLocale::C, i.e., English/UnitedStates.
6073    To get a localized string representation of a number, use
6074    QLocale::toString() with the appropriate locale.
6075 */
6076
6077 /*! \fn QString &QString::setNum(uint n, int base)
6078
6079     \overload
6080 */
6081
6082 /*! \fn QString &QString::setNum(long n, int base)
6083
6084     \overload
6085 */
6086
6087 /*! \fn QString &QString::setNum(ulong n, int base)
6088
6089     \overload
6090 */
6091
6092 /*!
6093     \overload
6094 */
6095 QString &QString::setNum(qlonglong n, int base)
6096 {
6097 #if defined(QT_CHECK_RANGE)
6098     if (base < 2 || base > 36) {
6099         qWarning("QString::setNum: Invalid base (%d)", base);
6100         base = 10;
6101     }
6102 #endif
6103     QLocale locale(QLocale::C);
6104     *this = locale.d->longLongToString(n, -1, base);
6105     return *this;
6106 }
6107
6108 /*!
6109     \overload
6110 */
6111 QString &QString::setNum(qulonglong n, int base)
6112 {
6113 #if defined(QT_CHECK_RANGE)
6114     if (base < 2 || base > 36) {
6115         qWarning("QString::setNum: Invalid base (%d)", base);
6116         base = 10;
6117     }
6118 #endif
6119     QLocale locale(QLocale::C);
6120     *this = locale.d->unsLongLongToString(n, -1, base);
6121     return *this;
6122 }
6123
6124 /*! \fn QString &QString::setNum(short n, int base)
6125
6126     \overload
6127 */
6128
6129 /*! \fn QString &QString::setNum(ushort n, int base)
6130
6131     \overload
6132 */
6133
6134 /*!
6135     \fn QString &QString::setNum(double n, char format, int precision)
6136     \overload
6137
6138     Sets the string to the printed value of \a n, formatted according
6139     to the given \a format and \a precision, and returns a reference
6140     to the string.
6141
6142     The \a format can be 'f', 'F', 'e', 'E', 'g' or 'G' (see the
6143     arg() function documentation for an explanation of the formats).
6144
6145     The formatting always uses QLocale::C, i.e., English/UnitedStates.
6146     To get a localized string representation of a number, use
6147     QLocale::toString() with the appropriate locale.
6148 */
6149
6150 QString &QString::setNum(double n, char f, int prec)
6151 {
6152     QLocalePrivate::DoubleForm form = QLocalePrivate::DFDecimal;
6153     uint flags = 0;
6154
6155     if (qIsUpper(f))
6156         flags = QLocalePrivate::CapitalEorX;
6157     f = qToLower(f);
6158
6159     switch (f) {
6160         case 'f':
6161             form = QLocalePrivate::DFDecimal;
6162             break;
6163         case 'e':
6164             form = QLocalePrivate::DFExponent;
6165             break;
6166         case 'g':
6167             form = QLocalePrivate::DFSignificantDigits;
6168             break;
6169         default:
6170 #if defined(QT_CHECK_RANGE)
6171             qWarning("QString::setNum: Invalid format char '%c'", f);
6172 #endif
6173             break;
6174     }
6175
6176     QLocale locale(QLocale::C);
6177     *this = locale.d->doubleToString(n, prec, form, -1, flags);
6178     return *this;
6179 }
6180
6181 /*!
6182     \fn QString &QString::setNum(float n, char format, int precision)
6183     \overload
6184
6185     Sets the string to the printed value of \a n, formatted according
6186     to the given \a format and \a precision, and returns a reference
6187     to the string.
6188
6189     The formatting always uses QLocale::C, i.e., English/UnitedStates.
6190     To get a localized string representation of a number, use
6191     QLocale::toString() with the appropriate locale.
6192 */
6193
6194
6195 /*!
6196     \fn QString QString::number(long n, int base)
6197
6198     Returns a string equivalent of the number \a n according to the
6199     specified \a base.
6200
6201     The base is 10 by default and must be between 2
6202     and 36. For bases other than 10, \a n is treated as an
6203     unsigned integer.
6204
6205     The formatting always uses QLocale::C, i.e., English/UnitedStates.
6206     To get a localized string representation of a number, use
6207     QLocale::toString() with the appropriate locale.
6208
6209     \snippet qstring/main.cpp 35
6210
6211     \sa setNum()
6212 */
6213
6214 QString QString::number(long n, int base)
6215 {
6216     QString s;
6217     s.setNum(n, base);
6218     return s;
6219 }
6220
6221 /*!
6222   \fn QString QString::number(ulong n, int base)
6223
6224     \overload
6225 */
6226 QString QString::number(ulong n, int base)
6227 {
6228     QString s;
6229     s.setNum(n, base);
6230     return s;
6231 }
6232
6233 /*!
6234     \overload
6235 */
6236 QString QString::number(int n, int base)
6237 {
6238     QString s;
6239     s.setNum(n, base);
6240     return s;
6241 }
6242
6243 /*!
6244     \overload
6245 */
6246 QString QString::number(uint n, int base)
6247 {
6248     QString s;
6249     s.setNum(n, base);
6250     return s;
6251 }
6252
6253 /*!
6254     \overload
6255 */
6256 QString QString::number(qlonglong n, int base)
6257 {
6258     QString s;
6259     s.setNum(n, base);
6260     return s;
6261 }
6262
6263 /*!
6264     \overload
6265 */
6266 QString QString::number(qulonglong n, int base)
6267 {
6268     QString s;
6269     s.setNum(n, base);
6270     return s;
6271 }
6272
6273
6274 /*!
6275     \fn QString QString::number(double n, char format, int precision)
6276
6277     Returns a string equivalent of the number \a n, formatted
6278     according to the specified \a format and \a precision. See
6279     \l{Argument Formats} for details.
6280
6281     Unlike QLocale::toString(), this function does not honor the
6282     user's locale settings.
6283
6284     \sa setNum(), QLocale::toString()
6285 */
6286 QString QString::number(double n, char f, int prec)
6287 {
6288     QString s;
6289     s.setNum(n, f, prec);
6290     return s;
6291 }
6292
6293 /*!
6294     Splits the string into substrings wherever \a sep occurs, and
6295     returns the list of those strings. If \a sep does not match
6296     anywhere in the string, split() returns a single-element list
6297     containing this string.
6298
6299     \a cs specifies whether \a sep should be matched case
6300     sensitively or case insensitively.
6301
6302     If \a behavior is QString::SkipEmptyParts, empty entries don't
6303     appear in the result. By default, empty entries are kept.
6304
6305     Example:
6306
6307     \snippet qstring/main.cpp 62
6308
6309     \sa QStringList::join(), section()
6310 */
6311 QStringList QString::split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
6312 {
6313     QStringList list;
6314     int start = 0;
6315     int extra = 0;
6316     int end;
6317     while ((end = indexOf(sep, start + extra, cs)) != -1) {
6318         if (start != end || behavior == KeepEmptyParts)
6319             list.append(mid(start, end - start));
6320         start = end + sep.size();
6321         extra = (sep.size() == 0 ? 1 : 0);
6322     }
6323     if (start != size() || behavior == KeepEmptyParts)
6324         list.append(mid(start));
6325     return list;
6326 }
6327
6328 /*!
6329     \overload
6330 */
6331 QStringList QString::split(QChar sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
6332 {
6333     QStringList list;
6334     int start = 0;
6335     int end;
6336     while ((end = indexOf(sep, start, cs)) != -1) {
6337         if (start != end || behavior == KeepEmptyParts)
6338             list.append(mid(start, end - start));
6339         start = end + 1;
6340     }
6341     if (start != size() || behavior == KeepEmptyParts)
6342         list.append(mid(start));
6343     return list;
6344 }
6345
6346 #ifndef QT_NO_REGEXP
6347 /*!
6348     \overload
6349
6350     Splits the string into substrings wherever the regular expression
6351     \a rx matches, and returns the list of those strings. If \a rx
6352     does not match anywhere in the string, split() returns a
6353     single-element list containing this string.
6354
6355     Here's an example where we extract the words in a sentence
6356     using one or more whitespace characters as the separator:
6357
6358     \snippet qstring/main.cpp 59
6359
6360     Here's a similar example, but this time we use any sequence of
6361     non-word characters as the separator:
6362
6363     \snippet qstring/main.cpp 60
6364
6365     Here's a third example where we use a zero-length assertion,
6366     \b{\\b} (word boundary), to split the string into an
6367     alternating sequence of non-word and word tokens:
6368
6369     \snippet qstring/main.cpp 61
6370
6371     \sa QStringList::join(), section()
6372 */
6373 QStringList QString::split(const QRegExp &rx, SplitBehavior behavior) const
6374 {
6375     QRegExp rx2(rx);
6376     QStringList list;
6377     int start = 0;
6378     int extra = 0;
6379     int end;
6380     while ((end = rx2.indexIn(*this, start + extra)) != -1) {
6381         int matchedLen = rx2.matchedLength();
6382         if (start != end || behavior == KeepEmptyParts)
6383             list.append(mid(start, end - start));
6384         start = end + matchedLen;
6385         extra = (matchedLen == 0) ? 1 : 0;
6386     }
6387     if (start != size() || behavior == KeepEmptyParts)
6388         list.append(mid(start));
6389     return list;
6390 }
6391 #endif
6392
6393 #ifndef QT_NO_REGEXP
6394 #ifndef QT_BOOTSTRAPPED
6395 /*!
6396     \overload
6397     \since 5.0
6398
6399     Splits the string into substrings wherever the regular expression
6400     \a re matches, and returns the list of those strings. If \a re
6401     does not match anywhere in the string, split() returns a
6402     single-element list containing this string.
6403
6404     Here's an example where we extract the words in a sentence
6405     using one or more whitespace characters as the separator:
6406
6407     \snippet qstring/main.cpp 90
6408
6409     Here's a similar example, but this time we use any sequence of
6410     non-word characters as the separator:
6411
6412     \snippet qstring/main.cpp 91
6413
6414     Here's a third example where we use a zero-length assertion,
6415     \b{\\b} (word boundary), to split the string into an
6416     alternating sequence of non-word and word tokens:
6417
6418     \snippet qstring/main.cpp 92
6419
6420     \sa QStringList::join(), section()
6421 */
6422 QStringList QString::split(const QRegularExpression &re, SplitBehavior behavior) const
6423 {
6424     QStringList list;
6425     if (!re.isValid()) {
6426         qWarning("QString::split: invalid QRegularExpression object");
6427         return list;
6428     }
6429
6430     int start = 0;
6431     int end = 0;
6432     QRegularExpressionMatchIterator iterator = re.globalMatch(*this);
6433     while (iterator.hasNext()) {
6434         QRegularExpressionMatch match = iterator.next();
6435         end = match.capturedStart();
6436         if (start != end || behavior == KeepEmptyParts)
6437             list.append(mid(start, end - start));
6438         start = match.capturedEnd();
6439     }
6440
6441     if (start != size() || behavior == KeepEmptyParts)
6442         list.append(mid(start));
6443
6444     return list;
6445 }
6446 #endif // QT_BOOTSTRAPPED
6447 #endif // QT_NO_REGEXP
6448
6449 /*!
6450     \enum QString::NormalizationForm
6451
6452     This enum describes the various normalized forms of Unicode text.
6453
6454     \value NormalizationForm_D  Canonical Decomposition
6455     \value NormalizationForm_C  Canonical Decomposition followed by Canonical Composition
6456     \value NormalizationForm_KD  Compatibility Decomposition
6457     \value NormalizationForm_KC  Compatibility Decomposition followed by Canonical Composition
6458
6459     \sa normalized(),
6460         {http://www.unicode.org/reports/tr15/}{Unicode Standard Annex #15}
6461 */
6462
6463 /*!
6464     \since 4.5
6465
6466     Returns a copy of this string repeated the specified number of \a times.
6467
6468     If \a times is less than 1, an empty string is returned.
6469
6470     Example:
6471
6472     \code
6473         QString str("ab");
6474         str.repeated(4);            // returns "abababab"
6475     \endcode
6476 */
6477 QString QString::repeated(int times) const
6478 {
6479     if (d->size == 0)
6480         return *this;
6481
6482     if (times <= 1) {
6483         if (times == 1)
6484             return *this;
6485         return QString();
6486     }
6487
6488     const int resultSize = times * d->size;
6489
6490     QString result;
6491     result.reserve(resultSize);
6492     if (result.d->alloc != uint(resultSize) + 1u)
6493         return QString(); // not enough memory
6494
6495     memcpy(result.d->data(), d->data(), d->size * sizeof(ushort));
6496
6497     int sizeSoFar = d->size;
6498     ushort *end = result.d->data() + sizeSoFar;
6499
6500     const int halfResultSize = resultSize >> 1;
6501     while (sizeSoFar <= halfResultSize) {
6502         memcpy(end, result.d->data(), sizeSoFar * sizeof(ushort));
6503         end += sizeSoFar;
6504         sizeSoFar <<= 1;
6505     }
6506     memcpy(end, result.d->data(), (resultSize - sizeSoFar) * sizeof(ushort));
6507     result.d->data()[resultSize] = '\0';
6508     result.d->size = resultSize;
6509     return result;
6510 }
6511
6512 void qt_string_normalize(QString *data, QString::NormalizationForm mode, QChar::UnicodeVersion version, int from)
6513 {
6514     bool simple = true;
6515     const QChar *p = data->constData();
6516     int len = data->length();
6517     for (int i = from; i < len; ++i) {
6518         if (p[i].unicode() >= 0x80) {
6519             simple = false;
6520             break;
6521         }
6522     }
6523     if (simple)
6524         return;
6525
6526     if (version == QChar::Unicode_Unassigned) {
6527         version = QChar::currentUnicodeVersion();
6528     } else if (int(version) <= NormalizationCorrectionsVersionMax) {
6529         const QString &s = *data;
6530         QChar *d = 0;
6531         for (int i = 0; i < NumNormalizationCorrections; ++i) {
6532             const NormalizationCorrection &n = uc_normalization_corrections[i];
6533             if (n.version > version) {
6534                 int pos = from;
6535                 if (QChar::requiresSurrogates(n.ucs4)) {
6536                     ushort ucs4High = QChar::highSurrogate(n.ucs4);
6537                     ushort ucs4Low = QChar::lowSurrogate(n.ucs4);
6538                     ushort oldHigh = QChar::highSurrogate(n.old_mapping);
6539                     ushort oldLow = QChar::lowSurrogate(n.old_mapping);
6540                     while (pos < s.length() - 1) {
6541                         if (s.at(pos).unicode() == ucs4High && s.at(pos + 1).unicode() == ucs4Low) {
6542                             if (!d)
6543                                 d = data->data();
6544                             d[pos] = QChar(oldHigh);
6545                             d[++pos] = QChar(oldLow);
6546                         }
6547                         ++pos;
6548                     }
6549                 } else {
6550                     while (pos < s.length()) {
6551                         if (s.at(pos).unicode() == n.ucs4) {
6552                             if (!d)
6553                                 d = data->data();
6554                             d[pos] = QChar(n.old_mapping);
6555                         }
6556                         ++pos;
6557                     }
6558                 }
6559             }
6560         }
6561     }
6562     decomposeHelper(data, mode < QString::NormalizationForm_KD, version, from);
6563
6564     canonicalOrderHelper(data, version, from);
6565
6566     if (mode == QString::NormalizationForm_D || mode == QString::NormalizationForm_KD)
6567         return;
6568
6569     composeHelper(data, version, from);
6570 }
6571
6572 /*!
6573     Returns the string in the given Unicode normalization \a mode,
6574     according to the given \a version of the Unicode standard.
6575 */
6576 QString QString::normalized(QString::NormalizationForm mode, QChar::UnicodeVersion version) const
6577 {
6578     QString copy = *this;
6579     qt_string_normalize(&copy, mode, version, 0);
6580     return copy;
6581 }
6582
6583
6584 struct ArgEscapeData
6585 {
6586     int min_escape;            // lowest escape sequence number
6587     int occurrences;           // number of occurrences of the lowest escape sequence number
6588     int locale_occurrences;    // number of occurrences of the lowest escape sequence number that
6589                                // contain 'L'
6590     int escape_len;            // total length of escape sequences which will be replaced
6591 };
6592
6593 static ArgEscapeData findArgEscapes(const QString &s)
6594 {
6595     const QChar *uc_begin = s.unicode();
6596     const QChar *uc_end = uc_begin + s.length();
6597
6598     ArgEscapeData d;
6599
6600     d.min_escape = INT_MAX;
6601     d.occurrences = 0;
6602     d.escape_len = 0;
6603     d.locale_occurrences = 0;
6604
6605     const QChar *c = uc_begin;
6606     while (c != uc_end) {
6607         while (c != uc_end && c->unicode() != '%')
6608             ++c;
6609
6610         if (c == uc_end)
6611             break;
6612         const QChar *escape_start = c;
6613         if (++c == uc_end)
6614             break;
6615
6616         bool locale_arg = false;
6617         if (c->unicode() == 'L') {
6618             locale_arg = true;
6619             if (++c == uc_end)
6620                 break;
6621         }
6622
6623         if (c->digitValue() == -1)
6624             continue;
6625
6626         int escape = c->digitValue();
6627         ++c;
6628
6629         if (c != uc_end && c->digitValue() != -1) {
6630             escape = (10 * escape) + c->digitValue();
6631             ++c;
6632         }
6633
6634         if (escape > d.min_escape)
6635             continue;
6636
6637         if (escape < d.min_escape) {
6638             d.min_escape = escape;
6639             d.occurrences = 0;
6640             d.escape_len = 0;
6641             d.locale_occurrences = 0;
6642         }
6643
6644         ++d.occurrences;
6645         if (locale_arg)
6646             ++d.locale_occurrences;
6647         d.escape_len += c - escape_start;
6648     }
6649     return d;
6650 }
6651
6652 static QString replaceArgEscapes(const QString &s, const ArgEscapeData &d, int field_width,
6653                                  const QString &arg, const QString &larg, QChar fillChar = QLatin1Char(' '))
6654 {
6655     const QChar *uc_begin = s.unicode();
6656     const QChar *uc_end = uc_begin + s.length();
6657
6658     int abs_field_width = qAbs(field_width);
6659     int result_len = s.length()
6660                      - d.escape_len
6661                      + (d.occurrences - d.locale_occurrences)
6662                      *qMax(abs_field_width, arg.length())
6663                      + d.locale_occurrences
6664                      *qMax(abs_field_width, larg.length());
6665
6666     QString result(result_len, Qt::Uninitialized);
6667     QChar *result_buff = (QChar*) result.unicode();
6668
6669     QChar *rc = result_buff;
6670     const QChar *c = uc_begin;
6671     int repl_cnt = 0;
6672     while (c != uc_end) {
6673         /* We don't have to check if we run off the end of the string with c,
6674            because as long as d.occurrences > 0 we KNOW there are valid escape
6675            sequences. */
6676
6677         const QChar *text_start = c;
6678
6679         while (c->unicode() != '%')
6680             ++c;
6681
6682         const QChar *escape_start = c++;
6683
6684         bool locale_arg = false;
6685         if (c->unicode() == 'L') {
6686             locale_arg = true;
6687             ++c;
6688         }
6689
6690         int escape = c->digitValue();
6691         if (escape != -1) {
6692             if (c + 1 != uc_end && (c + 1)->digitValue() != -1) {
6693                 escape = (10 * escape) + (c + 1)->digitValue();
6694                 ++c;
6695             }
6696         }
6697
6698         if (escape != d.min_escape) {
6699             memcpy(rc, text_start, (c - text_start)*sizeof(QChar));
6700             rc += c - text_start;
6701         }
6702         else {
6703             ++c;
6704
6705             memcpy(rc, text_start, (escape_start - text_start)*sizeof(QChar));
6706             rc += escape_start - text_start;
6707
6708             uint pad_chars;
6709             if (locale_arg)
6710                 pad_chars = qMax(abs_field_width, larg.length()) - larg.length();
6711             else
6712                 pad_chars = qMax(abs_field_width, arg.length()) - arg.length();
6713
6714             if (field_width > 0) { // left padded
6715                 for (uint i = 0; i < pad_chars; ++i)
6716                     (rc++)->unicode() = fillChar.unicode();
6717             }
6718
6719             if (locale_arg) {
6720                 memcpy(rc, larg.unicode(), larg.length()*sizeof(QChar));
6721                 rc += larg.length();
6722             }
6723             else {
6724                 memcpy(rc, arg.unicode(), arg.length()*sizeof(QChar));
6725                 rc += arg.length();
6726             }
6727
6728             if (field_width < 0) { // right padded
6729                 for (uint i = 0; i < pad_chars; ++i)
6730                     (rc++)->unicode() = fillChar.unicode();
6731             }
6732
6733             if (++repl_cnt == d.occurrences) {
6734                 memcpy(rc, c, (uc_end - c)*sizeof(QChar));
6735                 rc += uc_end - c;
6736                 Q_ASSERT(rc - result_buff == result_len);
6737                 c = uc_end;
6738             }
6739         }
6740     }
6741     Q_ASSERT(rc == result_buff + result_len);
6742
6743     return result;
6744 }
6745
6746 /*!
6747   Returns a copy of this string with the lowest numbered place marker
6748   replaced by string \a a, i.e., \c %1, \c %2, ..., \c %99.
6749
6750   \a fieldWidth specifies the minimum amount of space that argument \a
6751   a shall occupy. If \a a requires less space than \a fieldWidth, it
6752   is padded to \a fieldWidth with character \a fillChar.  A positive
6753   \a fieldWidth produces right-aligned text. A negative \a fieldWidth
6754   produces left-aligned text.
6755
6756   This example shows how we might create a \c status string for
6757   reporting progress while processing a list of files:
6758
6759   \snippet qstring/main.cpp 11
6760
6761   First, \c arg(i) replaces \c %1. Then \c arg(total) replaces \c
6762   %2. Finally, \c arg(fileName) replaces \c %3.
6763
6764   One advantage of using arg() over sprintf() is that the order of the
6765   numbered place markers can change, if the application's strings are
6766   translated into other languages, but each arg() will still replace
6767   the lowest numbered unreplaced place marker, no matter where it
6768   appears. Also, if place marker \c %i appears more than once in the
6769   string, the arg() replaces all of them.
6770
6771   If there is no unreplaced place marker remaining, a warning message
6772   is output and the result is undefined. Place marker numbers must be
6773   in the range 1 to 99.
6774 */
6775 QString QString::arg(const QString &a, int fieldWidth, QChar fillChar) const
6776 {
6777     ArgEscapeData d = findArgEscapes(*this);
6778
6779     if (d.occurrences == 0) {
6780         qWarning("QString::arg: Argument missing: %s, %s", toLocal8Bit().data(),
6781                   a.toLocal8Bit().data());
6782         return *this;
6783     }
6784     return replaceArgEscapes(*this, d, fieldWidth, a, a, fillChar);
6785 }
6786
6787 /*!
6788   \fn QString QString::arg(const QString& a1, const QString& a2) const
6789   \overload arg()
6790
6791   This is the same as \c {str.arg(a1).arg(a2)}, except that the
6792   strings \a a1 and \a a2 are replaced in one pass. This can make a
6793   difference if \a a1 contains e.g. \c{%1}:
6794
6795   \snippet qstring/main.cpp 13
6796 */
6797
6798 /*!
6799   \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3) const
6800   \overload arg()
6801
6802   This is the same as calling \c str.arg(a1).arg(a2).arg(a3), except
6803   that the strings \a a1, \a a2 and \a a3 are replaced in one pass.
6804 */
6805
6806 /*!
6807   \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4) const
6808   \overload arg()
6809
6810   This is the same as calling \c
6811   {str.arg(a1).arg(a2).arg(a3).arg(a4)}, except that the strings \a
6812   a1, \a a2, \a a3 and \a a4 are replaced in one pass.
6813 */
6814
6815 /*!
6816   \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5) const
6817   \overload arg()
6818
6819   This is the same as calling \c
6820   {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5)}, except that the strings
6821   \a a1, \a a2, \a a3, \a a4, and \a a5 are replaced in one pass.
6822 */
6823
6824 /*!
6825   \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5, const QString& a6) const
6826   \overload arg()
6827
6828   This is the same as calling \c
6829   {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5).arg(a6))}, except that
6830   the strings \a a1, \a a2, \a a3, \a a4, \a a5, and \a a6 are
6831   replaced in one pass.
6832 */
6833
6834 /*!
6835   \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5, const QString& a6, const QString& a7) const
6836   \overload arg()
6837
6838   This is the same as calling \c
6839   {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5).arg(a6).arg(a7)},
6840   except that the strings \a a1, \a a2, \a a3, \a a4, \a a5, \a a6,
6841   and \a a7 are replaced in one pass.
6842 */
6843
6844 /*!
6845   \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5, const QString& a6, const QString& a7, const QString& a8) const
6846   \overload arg()
6847
6848   This is the same as calling \c
6849   {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5).arg(a6).arg(a7).arg(a8)},
6850   except that the strings \a a1, \a a2, \a a3, \a a4, \a a5, \a a6, \a
6851   a7, and \a a8 are replaced in one pass.
6852 */
6853
6854 /*!
6855   \fn QString QString::arg(const QString& a1, const QString& a2, const QString& a3, const QString& a4, const QString& a5, const QString& a6, const QString& a7, const QString& a8, const QString& a9) const
6856   \overload arg()
6857
6858   This is the same as calling \c
6859   {str.arg(a1).arg(a2).arg(a3).arg(a4).arg(a5).arg(a6).arg(a7).arg(a8).arg(a9)},
6860   except that the strings \a a1, \a a2, \a a3, \a a4, \a a5, \a a6, \a
6861   a7, \a a8, and \a a9 are replaced in one pass.
6862 */
6863
6864 /*! \fn QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const
6865   \overload arg()
6866
6867   The \a a argument is expressed in base \a base, which is 10 by
6868   default and must be between 2 and 36. For bases other than 10, \a a
6869   is treated as an unsigned integer.
6870
6871   \a fieldWidth specifies the minimum amount of space that \a a is
6872   padded to and filled with the character \a fillChar. A positive
6873   value produces right-aligned text; a negative value produces
6874   left-aligned text.
6875
6876   The '%' can be followed by an 'L', in which case the sequence is
6877   replaced with a localized representation of \a a. The conversion
6878   uses the default locale, set by QLocale::setDefault(). If no default
6879   locale was specified, the "C" locale is used. The 'L' flag is
6880   ignored if \a base is not 10.
6881
6882   \snippet qstring/main.cpp 12
6883   \snippet qstring/main.cpp 14
6884
6885   If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
6886   used. For negative numbers, zero padding might appear before the
6887   minus sign.
6888 */
6889
6890 /*! \fn QString QString::arg(uint a, int fieldWidth, int base, QChar fillChar) const
6891   \overload arg()
6892
6893   The \a base argument specifies the base to use when converting the
6894   integer \a a into a string. The base must be between 2 and 36.
6895
6896   If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
6897   used. For negative numbers, zero padding might appear before the
6898   minus sign.
6899 */
6900
6901 /*! \fn QString QString::arg(long a, int fieldWidth, int base, QChar fillChar) const
6902   \overload arg()
6903
6904   \a fieldWidth specifies the minimum amount of space that \a a is
6905   padded to and filled with the character \a fillChar. A positive
6906   value produces right-aligned text; a negative value produces
6907   left-aligned text.
6908
6909   The \a a argument is expressed in the given \a base, which is 10 by
6910   default and must be between 2 and 36.
6911
6912   The '%' can be followed by an 'L', in which case the sequence is
6913   replaced with a localized representation of \a a. The conversion
6914   uses the default locale. The default locale is determined from the
6915   system's locale settings at application startup. It can be changed
6916   using QLocale::setDefault(). The 'L' flag is ignored if \a base is
6917   not 10.
6918
6919   \snippet qstring/main.cpp 12
6920   \snippet qstring/main.cpp 14
6921
6922   If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
6923   used. For negative numbers, zero padding might appear before the
6924   minus sign.
6925 */
6926
6927 /*! \fn QString QString::arg(ulong a, int fieldWidth, int base, QChar fillChar) const
6928   \overload arg()
6929
6930   \a fieldWidth specifies the minimum amount of space that \a a is
6931   padded to and filled with the character \a fillChar. A positive
6932   value produces right-aligned text; a negative value produces
6933   left-aligned text.
6934
6935   The \a base argument specifies the base to use when converting the
6936   integer \a a to a string. The base must be between 2 and 36, with 8
6937   giving octal, 10 decimal, and 16 hexadecimal numbers.
6938
6939   If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
6940   used. For negative numbers, zero padding might appear before the
6941   minus sign.
6942 */
6943
6944 /*!
6945   \overload arg()
6946
6947   \a fieldWidth specifies the minimum amount of space that \a a is
6948   padded to and filled with the character \a fillChar. A positive
6949   value produces right-aligned text; a negative value produces
6950   left-aligned text.
6951
6952   The \a base argument specifies the base to use when converting the
6953   integer \a a into a string. The base must be between 2 and 36, with
6954   8 giving octal, 10 decimal, and 16 hexadecimal numbers.
6955
6956   If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
6957   used. For negative numbers, zero padding might appear before the
6958   minus sign.
6959 */
6960 QString QString::arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const
6961 {
6962     ArgEscapeData d = findArgEscapes(*this);
6963
6964     if (d.occurrences == 0) {
6965         qWarning() << "QString::arg: Argument missing:" << *this << ',' << a;
6966         return *this;
6967     }
6968
6969     unsigned flags = QLocalePrivate::NoFlags;
6970     if (fillChar == QLatin1Char('0'))
6971         flags = QLocalePrivate::ZeroPadded;
6972
6973     QString arg;
6974     if (d.occurrences > d.locale_occurrences)
6975         arg = QLocale::c().d->longLongToString(a, -1, base, fieldWidth, flags);
6976
6977     QString locale_arg;
6978     if (d.locale_occurrences > 0) {
6979         QLocale locale;
6980         if (!locale.numberOptions() & QLocale::OmitGroupSeparator)
6981             flags |= QLocalePrivate::ThousandsGroup;
6982         locale_arg = locale.d->longLongToString(a, -1, base, fieldWidth, flags);
6983     }
6984
6985     return replaceArgEscapes(*this, d, fieldWidth, arg, locale_arg, fillChar);
6986 }
6987
6988 /*!
6989   \overload arg()
6990
6991   \a fieldWidth specifies the minimum amount of space that \a a is
6992   padded to and filled with the character \a fillChar. A positive
6993   value produces right-aligned text; a negative value produces
6994   left-aligned text.
6995
6996   The \a base argument specifies the base to use when converting the
6997   integer \a a into a string. \a base must be between 2 and 36, with 8
6998   giving octal, 10 decimal, and 16 hexadecimal numbers.
6999
7000   If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
7001   used. For negative numbers, zero padding might appear before the
7002   minus sign.
7003 */
7004 QString QString::arg(qulonglong a, int fieldWidth, int base, QChar fillChar) const
7005 {
7006     ArgEscapeData d = findArgEscapes(*this);
7007
7008     if (d.occurrences == 0) {
7009         qWarning() << "QString::arg: Argument missing:" << *this << ',' << a;
7010         return *this;
7011     }
7012
7013     unsigned flags = QLocalePrivate::NoFlags;
7014     if (fillChar == QLatin1Char('0'))
7015         flags = QLocalePrivate::ZeroPadded;
7016
7017     QString arg;
7018     if (d.occurrences > d.locale_occurrences)
7019         arg = QLocale::c().d->unsLongLongToString(a, -1, base, fieldWidth, flags);
7020
7021     QString locale_arg;
7022     if (d.locale_occurrences > 0) {
7023         QLocale locale;
7024         if (!locale.numberOptions() & QLocale::OmitGroupSeparator)
7025             flags |= QLocalePrivate::ThousandsGroup;
7026         locale_arg = locale.d->unsLongLongToString(a, -1, base, fieldWidth, flags);
7027     }
7028
7029     return replaceArgEscapes(*this, d, fieldWidth, arg, locale_arg, fillChar);
7030 }
7031
7032 /*!
7033   \overload arg()
7034
7035   \fn QString QString::arg(short a, int fieldWidth, int base, QChar fillChar) const
7036
7037   \a fieldWidth specifies the minimum amount of space that \a a is
7038   padded to and filled with the character \a fillChar. A positive
7039   value produces right-aligned text; a negative value produces
7040   left-aligned text.
7041
7042   The \a base argument specifies the base to use when converting the
7043   integer \a a into a string. The base must be between 2 and 36, with
7044   8 giving octal, 10 decimal, and 16 hexadecimal numbers.
7045
7046   If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
7047   used. For negative numbers, zero padding might appear before the
7048   minus sign.
7049 */
7050
7051 /*!
7052   \fn QString QString::arg(ushort a, int fieldWidth, int base, QChar fillChar) const
7053   \overload arg()
7054
7055   \a fieldWidth specifies the minimum amount of space that \a a is
7056   padded to and filled with the character \a fillChar. A positive
7057   value produces right-aligned text; a negative value produces
7058   left-aligned text.
7059
7060   The \a base argument specifies the base to use when converting the
7061   integer \a a into a string. The base must be between 2 and 36, with
7062   8 giving octal, 10 decimal, and 16 hexadecimal numbers.
7063
7064   If \a fillChar is '0' (the number 0, ASCII 48), the locale's zero is
7065   used. For negative numbers, zero padding might appear before the
7066   minus sign.
7067 */
7068
7069 /*!
7070     \overload arg()
7071 */
7072 QString QString::arg(QChar a, int fieldWidth, QChar fillChar) const
7073 {
7074     QString c;
7075     c += a;
7076     return arg(c, fieldWidth, fillChar);
7077 }
7078
7079 /*!
7080   \overload arg()
7081
7082   The \a a argument is interpreted as a Latin-1 character.
7083 */
7084 QString QString::arg(char a, int fieldWidth, QChar fillChar) const
7085 {
7086     QString c;
7087     c += QLatin1Char(a);
7088     return arg(c, fieldWidth, fillChar);
7089 }
7090
7091 /*!
7092   \fn QString QString::arg(double a, int fieldWidth, char format, int precision, QChar fillChar) const
7093   \overload arg()
7094
7095   Argument \a a is formatted according to the specified \a format and
7096   \a precision. See \l{Argument Formats} for details.
7097
7098   \a fieldWidth specifies the minimum amount of space that \a a is
7099   padded to and filled with the character \a fillChar.  A positive
7100   value produces right-aligned text; a negative value produces
7101   left-aligned text.
7102
7103   \snippet code/src_corelib_tools_qstring.cpp 2
7104
7105   The '%' can be followed by an 'L', in which case the sequence is
7106   replaced with a localized representation of \a a. The conversion
7107   uses the default locale, set by QLocale::setDefaultLocale(). If no
7108   default locale was specified, the "C" locale is used.
7109
7110   If \a fillChar is '0' (the number 0, ASCII 48), this function will
7111   use the locale's zero to pad. For negative numbers, the zero padding
7112   will probably appear before the minus sign.
7113
7114   \sa QLocale::toString()
7115 */
7116 QString QString::arg(double a, int fieldWidth, char fmt, int prec, QChar fillChar) const
7117 {
7118     ArgEscapeData d = findArgEscapes(*this);
7119
7120     if (d.occurrences == 0) {
7121         qWarning("QString::arg: Argument missing: %s, %g", toLocal8Bit().data(), a);
7122         return *this;
7123     }
7124
7125     unsigned flags = QLocalePrivate::NoFlags;
7126     if (fillChar == QLatin1Char('0'))
7127         flags = QLocalePrivate::ZeroPadded;
7128
7129     if (qIsUpper(fmt))
7130         flags |= QLocalePrivate::CapitalEorX;
7131     fmt = qToLower(fmt);
7132
7133     QLocalePrivate::DoubleForm form = QLocalePrivate::DFDecimal;
7134     switch (fmt) {
7135     case 'f':
7136         form = QLocalePrivate::DFDecimal;
7137         break;
7138     case 'e':
7139         form = QLocalePrivate::DFExponent;
7140         break;
7141     case 'g':
7142         form = QLocalePrivate::DFSignificantDigits;
7143         break;
7144     default:
7145 #if defined(QT_CHECK_RANGE)
7146         qWarning("QString::arg: Invalid format char '%c'", fmt);
7147 #endif
7148         break;
7149     }
7150
7151     QString arg;
7152     if (d.occurrences > d.locale_occurrences)
7153         arg = QLocale::c().d->doubleToString(a, prec, form, fieldWidth, flags);
7154
7155     QString locale_arg;
7156     if (d.locale_occurrences > 0) {
7157         QLocale locale;
7158
7159         if (!locale.numberOptions() & QLocale::OmitGroupSeparator)
7160             flags |= QLocalePrivate::ThousandsGroup;
7161         locale_arg = locale.d->doubleToString(a, prec, form, fieldWidth, flags);
7162     }
7163
7164     return replaceArgEscapes(*this, d, fieldWidth, arg, locale_arg, fillChar);
7165 }
7166
7167 static int getEscape(const QChar *uc, int *pos, int len, int maxNumber = 999)
7168 {
7169     int i = *pos;
7170     ++i;
7171     if (i < len && uc[i] == QLatin1Char('L'))
7172         ++i;
7173     if (i < len) {
7174         int escape = uc[i].unicode() - '0';
7175         if (uint(escape) >= 10U)
7176             return -1;
7177         ++i;
7178         while (i < len) {
7179             int digit = uc[i].unicode() - '0';
7180             if (uint(digit) >= 10U)
7181                 break;
7182             escape = (escape * 10) + digit;
7183             ++i;
7184         }
7185         if (escape <= maxNumber) {
7186             *pos = i;
7187             return escape;
7188         }
7189     }
7190     return -1;
7191 }
7192
7193 QString QString::multiArg(int numArgs, const QString **args) const
7194 {
7195     QString result;
7196     QMap<int, int> numbersUsed;
7197     const QChar *uc = (const QChar *) d->data();
7198     const int len = d->size;
7199     const int end = len - 1;
7200     int lastNumber = -1;
7201     int i = 0;
7202
7203     // populate the numbersUsed map with the %n's that actually occur in the string
7204     while (i < end) {
7205         if (uc[i] == QLatin1Char('%')) {
7206             int number = getEscape(uc, &i, len);
7207             if (number != -1) {
7208                 numbersUsed.insert(number, -1);
7209                 continue;
7210             }
7211         }
7212         ++i;
7213     }
7214
7215     // assign an argument number to each of the %n's
7216     QMap<int, int>::iterator j = numbersUsed.begin();
7217     QMap<int, int>::iterator jend = numbersUsed.end();
7218     int arg = 0;
7219     while (j != jend && arg < numArgs) {
7220         *j = arg++;
7221         lastNumber = j.key();
7222         ++j;
7223     }
7224
7225     // sanity
7226     if (numArgs > arg) {
7227         qWarning("QString::arg: %d argument(s) missing in %s", numArgs - arg, toLocal8Bit().data());
7228         numArgs = arg;
7229     }
7230
7231     i = 0;
7232     while (i < len) {
7233         if (uc[i] == QLatin1Char('%') && i != end) {
7234             int number = getEscape(uc, &i, len, lastNumber);
7235             int arg = numbersUsed[number];
7236             if (number != -1 && arg != -1) {
7237                 result += *args[arg];
7238                 continue;
7239             }
7240         }
7241         result += uc[i++];
7242     }
7243     return result;
7244 }
7245
7246
7247 /*! \fn bool QString::isSimpleText() const
7248
7249     \internal
7250 */
7251 bool QString::isSimpleText() const
7252 {
7253     const ushort *p = d->data();
7254     const ushort * const end = p + d->size;
7255     while (p < end) {
7256         ushort uc = *p;
7257         // sort out regions of complex text formatting
7258         if (uc > 0x058f && (uc < 0x1100 || uc > 0xfb0f)) {
7259             return false;
7260         }
7261         p++;
7262     }
7263
7264     return true;
7265 }
7266
7267 /*! \fn bool QString::isRightToLeft() const
7268
7269     Returns true if the string is read right to left.
7270 */
7271 bool QString::isRightToLeft() const
7272 {
7273     const ushort *p = d->data();
7274     const ushort * const end = p + d->size;
7275     while (p < end) {
7276         uint ucs4 = *p;
7277         if (QChar::isHighSurrogate(ucs4) && p < end - 1) {
7278             ushort low = p[1];
7279             if (QChar::isLowSurrogate(low)) {
7280                 ucs4 = QChar::surrogateToUcs4(ucs4, low);
7281                 ++p;
7282             }
7283         }
7284         switch (QChar::direction(ucs4))
7285         {
7286         case QChar::DirL:
7287             return false;
7288         case QChar::DirR:
7289         case QChar::DirAL:
7290             return true;
7291         default:
7292             break;
7293         }
7294         ++p;
7295     }
7296     return false;
7297 }
7298
7299 /*! \fn QChar *QString::data()
7300
7301     Returns a pointer to the data stored in the QString. The pointer
7302     can be used to access and modify the characters that compose the
7303     string. For convenience, the data is '\\0'-terminated.
7304
7305     Example:
7306
7307     \snippet qstring/main.cpp 19
7308
7309     Note that the pointer remains valid only as long as the string is
7310     not modified by other means. For read-only access, constData() is
7311     faster because it never causes a \l{deep copy} to occur.
7312
7313     \sa constData(), operator[]()
7314 */
7315
7316 /*! \fn const QChar *QString::data() const
7317
7318     \overload
7319 */
7320
7321 /*! \fn const QChar *QString::constData() const
7322
7323     Returns a pointer to the data stored in the QString. The pointer
7324     can be used to access the characters that compose the string. For
7325     convenience, the data is '\\0'-terminated.
7326
7327     Note that the pointer remains valid only as long as the string is
7328     not modified.
7329
7330     \sa data(), operator[]()
7331 */
7332
7333 /*! \fn void QString::push_front(const QString &other)
7334
7335     This function is provided for STL compatibility, prepending the
7336     given \a other string to the beginning of this string. It is
7337     equivalent to \c prepend(other).
7338
7339     \sa prepend()
7340 */
7341
7342 /*! \fn void QString::push_front(QChar ch)
7343
7344     \overload
7345
7346     Prepends the given \a ch character to the beginning of this string.
7347 */
7348
7349 /*! \fn void QString::push_back(const QString &other)
7350
7351     This function is provided for STL compatibility, appending the
7352     given \a other string onto the end of this string. It is
7353     equivalent to \c append(other).
7354
7355     \sa append()
7356 */
7357
7358 /*! \fn void QString::push_back(QChar ch)
7359
7360     \overload
7361
7362     Appends the given \a ch character onto the end of this string.
7363 */
7364
7365 /*!
7366     \fn std::string QString::toStdString() const
7367
7368     Returns a std::string object with the data contained in this
7369     QString. The Unicode data is converted into 8-bit characters using
7370     the toUtf8() function.
7371
7372     This operator is mostly useful to pass a QString to a function
7373     that accepts a std::string object.
7374
7375     If the QString contains non-Latin1 Unicode characters, using this
7376     can lead to loss of information.
7377
7378     \sa toLatin1(), toUtf8(), toLocal8Bit()
7379 */
7380
7381 /*!
7382     Constructs a QString that uses the first \a size Unicode characters
7383     in the array \a unicode. The data in \a unicode is \e not
7384     copied. The caller must be able to guarantee that \a unicode will
7385     not be deleted or modified as long as the QString (or an
7386     unmodified copy of it) exists.
7387
7388     Any attempts to modify the QString or copies of it will cause it
7389     to create a deep copy of the data, ensuring that the raw data
7390     isn't modified.
7391
7392     Here's an example of how we can use a QRegExp on raw data in
7393     memory without requiring to copy the data into a QString:
7394
7395     \snippet qstring/main.cpp 22
7396     \snippet qstring/main.cpp 23
7397
7398     \warning A string created with fromRawData() is \e not
7399     '\\0'-terminated, unless the raw data contains a '\\0' character
7400     at position \a size. This means unicode() will \e not return a
7401     '\\0'-terminated string (although utf16() does, at the cost of
7402     copying the raw data).
7403
7404     \sa fromUtf16(), setRawData()
7405 */
7406 QString QString::fromRawData(const QChar *unicode, int size)
7407 {
7408     Data *x;
7409     if (!unicode) {
7410         x = Data::sharedNull();
7411     } else if (!size) {
7412         x = Data::allocate(0);
7413     } else {
7414         x = Data::fromRawData(reinterpret_cast<const ushort *>(unicode), size);
7415         Q_CHECK_PTR(x);
7416     }
7417     QStringDataPtr dataPtr = { x };
7418     return QString(dataPtr);
7419 }
7420
7421 /*!
7422     \since 4.7
7423
7424     Resets the QString to use the first \a size Unicode characters
7425     in the array \a unicode. The data in \a unicode is \e not
7426     copied. The caller must be able to guarantee that \a unicode will
7427     not be deleted or modified as long as the QString (or an
7428     unmodified copy of it) exists.
7429
7430     This function can be used instead of fromRawData() to re-use
7431     existings QString objects to save memory re-allocations.
7432
7433     \sa fromRawData()
7434 */
7435 QString &QString::setRawData(const QChar *unicode, int size)
7436 {
7437     if (d->ref.isShared() || d->alloc) {
7438         *this = fromRawData(unicode, size);
7439     } else {
7440         if (unicode) {
7441             d->size = size;
7442             d->offset = reinterpret_cast<const char *>(unicode) - reinterpret_cast<char *>(d);
7443         } else {
7444             d->offset = sizeof(QStringData);
7445             d->size = 0;
7446         }
7447     }
7448     return *this;
7449 }
7450
7451 /*! \class QLatin1String
7452     \brief The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
7453
7454     \ingroup string-processing
7455     \reentrant
7456
7457     Many of QString's member functions are overloaded to accept
7458     \c{const char *} instead of QString. This includes the copy
7459     constructor, the assignment operator, the comparison operators,
7460     and various other functions such as \l{QString::insert()}{insert()}, \l{QString::replace()}{replace()},
7461     and \l{QString::indexOf()}{indexOf()}. These functions
7462     are usually optimized to avoid constructing a QString object for
7463     the \c{const char *} data. For example, assuming \c str is a
7464     QString,
7465
7466     \snippet code/src_corelib_tools_qstring.cpp 3
7467
7468     is much faster than
7469
7470     \snippet code/src_corelib_tools_qstring.cpp 4
7471
7472     because it doesn't construct four temporary QString objects and
7473     make a deep copy of the character data.
7474
7475     Applications that define \c QT_NO_CAST_FROM_ASCII (as explained
7476     in the QString documentation) don't have access to QString's
7477     \c{const char *} API. To provide an efficient way of specifying
7478     constant Latin-1 strings, Qt provides the QLatin1String, which is
7479     just a very thin wrapper around a \c{const char *}. Using
7480     QLatin1String, the example code above becomes
7481
7482     \snippet code/src_corelib_tools_qstring.cpp 5
7483
7484     This is a bit longer to type, but it provides exactly the same
7485     benefits as the first version of the code, and is faster than
7486     converting the Latin-1 strings using QString::fromLatin1().
7487
7488     Thanks to the QString(QLatin1String) constructor,
7489     QLatin1String can be used everywhere a QString is expected. For
7490     example:
7491
7492     \snippet code/src_corelib_tools_qstring.cpp 6
7493
7494     \sa QString, QLatin1Char, QStringLiteral
7495 */
7496
7497 /*! \fn QLatin1String::QLatin1String(const char *str)
7498
7499     Constructs a QLatin1String object that stores \a str. Note that if
7500     \a str is 0, an empty string is created; this case is handled by
7501     QString.
7502
7503     The string data is \e not copied. The caller must be able to
7504     guarantee that \a str will not be deleted or modified as long as
7505     the QLatin1String object exists.
7506
7507     \sa latin1()
7508 */
7509
7510 /*! \fn QLatin1String::QLatin1String(const char *str, int size)
7511
7512     Constructs a QLatin1String object that stores \a str with \a size.
7513     Note that if \a str is 0, an empty string is created; this case
7514     is handled by QString.
7515
7516     The string data is \e not copied. The caller must be able to
7517     guarantee that \a str will not be deleted or modified as long as
7518     the QLatin1String object exists.
7519
7520     \sa latin1()
7521 */
7522
7523 /*! \fn QLatin1String::QLatin1String(const QByteArray &str)
7524
7525     Constructs a QLatin1String object that stores \a str.
7526
7527     The string data is \e not copied. The caller must be able to
7528     guarantee that \a str will not be deleted or modified as long as
7529     the QLatin1String object exists.
7530
7531     \sa latin1()
7532 */
7533
7534 /*! \fn const char *QLatin1String::latin1() const
7535
7536     Returns the Latin-1 string stored in this object.
7537 */
7538
7539 /*! \fn int QLatin1String::size() const
7540
7541     Returns the size of the Latin-1 string stored in this object.
7542 */
7543
7544 /*! \fn bool QLatin1String::operator==(const QString &other) const
7545
7546     Returns true if this string is equal to string \a other;
7547     otherwise returns false.
7548
7549     The comparison is based exclusively on the numeric Unicode values
7550     of the characters and is very fast, but is not what a human would
7551     expect. Consider sorting user-interface strings with
7552     QString::localeAwareCompare().
7553 */
7554
7555 /*!
7556     \fn bool QLatin1String::operator==(const char *other) const
7557     \since 4.3
7558     \overload
7559
7560     The \a other const char pointer is converted to a QString using
7561     the QString::fromUtf8() function.
7562
7563     You can disable this operator by defining \c
7564     QT_NO_CAST_FROM_ASCII when you compile your applications. This
7565     can be useful if you want to ensure that all user-visible strings
7566     go through QObject::tr(), for example.
7567 */
7568
7569 /*! \fn bool QLatin1String::operator!=(const QString &other) const
7570
7571     Returns true if this string is not equal to string \a other;
7572     otherwise returns false.
7573
7574     The comparison is based exclusively on the numeric Unicode values
7575     of the characters and is very fast, but is not what a human would
7576     expect. Consider sorting user-interface strings with
7577     QString::localeAwareCompare().
7578 */
7579
7580 /*!
7581     \fn bool QLatin1String::operator!=(const char *other) const
7582     \since 4.3
7583     \overload operator!=()
7584
7585     The \a other const char pointer is converted to a QString using
7586     the QString::fromUtf8() function.
7587
7588     You can disable this operator by defining \c
7589     QT_NO_CAST_FROM_ASCII when you compile your applications. This
7590     can be useful if you want to ensure that all user-visible strings
7591     go through QObject::tr(), for example.
7592 */
7593
7594 /*!
7595     \fn bool QLatin1String::operator>(const QString &other) const
7596
7597     Returns true if this string is lexically greater than string \a
7598     other; otherwise returns false.
7599
7600     The comparison is based exclusively on the numeric Unicode values
7601     of the characters and is very fast, but is not what a human would
7602     expect. Consider sorting user-interface strings with
7603     QString::localeAwareCompare().
7604 */
7605
7606 /*!
7607     \fn bool QLatin1String::operator>(const char *other) const
7608     \since 4.3
7609     \overload
7610
7611     The \a other const char pointer is converted to a QString using
7612     the QString::fromUtf8() function.
7613
7614     You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
7615     when you compile your applications. This can be useful if you want
7616     to ensure that all user-visible strings go through QObject::tr(),
7617     for example.
7618 */
7619
7620 /*!
7621     \fn bool QLatin1String::operator<(const QString &other) const
7622
7623     Returns true if this string is lexically less than the \a other
7624     string; otherwise returns false.
7625
7626     The comparison is based exclusively on the numeric Unicode values
7627     of the characters and is very fast, but is not what a human would
7628     expect. Consider sorting user-interface strings using the
7629     QString::localeAwareCompare() function.
7630 */
7631
7632 /*!
7633     \fn bool QLatin1String::operator<(const char *other) const
7634     \since 4.3
7635     \overload
7636
7637     The \a other const char pointer is converted to a QString using
7638     the QString::fromUtf8() function.
7639
7640     You can disable this operator by defining \c
7641     QT_NO_CAST_FROM_ASCII when you compile your applications. This
7642     can be useful if you want to ensure that all user-visible strings
7643     go through QObject::tr(), for example.
7644 */
7645
7646 /*!
7647     \fn bool QLatin1String::operator>=(const QString &other) const
7648
7649     Returns true if this string is lexically greater than or equal
7650     to string \a other; otherwise returns false.
7651
7652     The comparison is based exclusively on the numeric Unicode values
7653     of the characters and is very fast, but is not what a human would
7654     expect. Consider sorting user-interface strings with
7655     QString::localeAwareCompare().
7656 */
7657
7658 /*!
7659     \fn bool QLatin1String::operator>=(const char *other) const
7660     \since 4.3
7661     \overload
7662
7663     The \a other const char pointer is converted to a QString using
7664     the QString::fromUtf8() function.
7665
7666     You can disable this operator by defining \c
7667     QT_NO_CAST_FROM_ASCII when you compile your applications. This
7668     can be useful if you want to ensure that all user-visible strings
7669     go through QObject::tr(), for example.
7670 */
7671
7672 /*! \fn bool QLatin1String::operator<=(const QString &other) const
7673
7674     Returns true if this string is lexically less than or equal
7675     to string \a other; otherwise returns false.
7676
7677     The comparison is based exclusively on the numeric Unicode values
7678     of the characters and is very fast, but is not what a human would
7679     expect. Consider sorting user-interface strings with
7680     QString::localeAwareCompare().
7681 */
7682
7683 /*!
7684     \fn bool QLatin1String::operator<=(const char *other) const
7685     \since 4.3
7686     \overload
7687
7688     The \a other const char pointer is converted to a QString using
7689     the QString::fromUtf8() function.
7690
7691     You can disable this operator by defining \c
7692     QT_NO_CAST_FROM_ASCII when you compile your applications. This
7693     can be useful if you want to ensure that all user-visible strings
7694     go through QObject::tr(), for example.
7695 */
7696
7697
7698
7699 /*! \fn bool operator==(QLatin1String s1, QLatin1String s2)
7700    \relates QLatin1String
7701
7702    Returns true if string \a s1 is lexically equal to string \a s2; otherwise
7703    returns false.
7704 */
7705 /*! \fn bool operator!=(QLatin1String s1, QLatin1String s2)
7706    \relates QLatin1String
7707
7708    Returns true if string \a s1 is lexically unequal to string \a s2; otherwise
7709    returns false.
7710 */
7711 /*! \fn bool operator<(QLatin1String s1, QLatin1String s2)
7712    \relates QLatin1String
7713
7714    Returns true if string \a s1 is lexically smaller than string \a s2; otherwise
7715    returns false.
7716 */
7717 /*! \fn bool operator<=(QLatin1String s1, QLatin1String s2)
7718    \relates QLatin1String
7719
7720    Returns true if string \a s1 is lexically smaller than or equal to string \a s2; otherwise
7721    returns false.
7722 */
7723 /*! \fn bool operator>(QLatin1String s1, QLatin1String s2)
7724    \relates QLatin1String
7725
7726    Returns true if string \a s1 is lexically greater than string \a s2; otherwise
7727    returns false.
7728 */
7729 /*! \fn bool operator>=(QLatin1String s1, QLatin1String s2)
7730    \relates QLatin1String
7731
7732    Returns true if string \a s1 is lexically greater than or equal to
7733    string \a s2; otherwise returns false.
7734 */
7735
7736
7737 #if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
7738 /*!
7739     \fn QDataStream &operator<<(QDataStream &stream, const QString &string)
7740     \relates QString
7741
7742     Writes the given \a string to the specified \a stream.
7743
7744     \sa {Serializing Qt Data Types}
7745 */
7746
7747 QDataStream &operator<<(QDataStream &out, const QString &str)
7748 {
7749     if (out.version() == 1) {
7750         out << str.toLatin1();
7751     } else {
7752         if (!str.isNull() || out.version() < 3) {
7753             if ((out.byteOrder() == QDataStream::BigEndian) == (QSysInfo::ByteOrder == QSysInfo::BigEndian)) {
7754                 out.writeBytes(reinterpret_cast<const char *>(str.unicode()), sizeof(QChar) * str.length());
7755             } else {
7756                 QVarLengthArray<ushort> buffer(str.length());
7757                 const ushort *data = reinterpret_cast<const ushort *>(str.constData());
7758                 for (int i = 0; i < str.length(); i++) {
7759                     buffer[i] = qbswap(*data);
7760                     ++data;
7761                 }
7762                 out.writeBytes(reinterpret_cast<const char *>(buffer.data()), sizeof(ushort) * buffer.size());
7763             }
7764         } else {
7765             // write null marker
7766             out << (quint32)0xffffffff;
7767         }
7768     }
7769     return out;
7770 }
7771
7772 /*!
7773     \fn QDataStream &operator>>(QDataStream &stream, QString &string)
7774     \relates QString
7775
7776     Reads a string from the specified \a stream into the given \a string.
7777
7778     \sa {Serializing Qt Data Types}
7779 */
7780
7781 QDataStream &operator>>(QDataStream &in, QString &str)
7782 {
7783 #ifdef QT_QSTRING_UCS_4
7784 #if defined(Q_CC_GNU)
7785 #warning "operator>> not working properly"
7786 #endif
7787 #endif
7788
7789     if (in.version() == 1) {
7790         QByteArray l;
7791         in >> l;
7792         str = QString::fromLatin1(l);
7793     } else {
7794         quint32 bytes = 0;
7795         in >> bytes;                                  // read size of string
7796         if (bytes == 0xffffffff) {                    // null string
7797             str.clear();
7798         } else if (bytes > 0) {                       // not empty
7799             if (bytes & 0x1) {
7800                 str.clear();
7801                 in.setStatus(QDataStream::ReadCorruptData);
7802                 return in;
7803             }
7804
7805             const quint32 Step = 1024 * 1024;
7806             quint32 len = bytes / 2;
7807             quint32 allocated = 0;
7808
7809             while (allocated < len) {
7810                 int blockSize = qMin(Step, len - allocated);
7811                 str.resize(allocated + blockSize);
7812                 if (in.readRawData(reinterpret_cast<char *>(str.data()) + allocated * 2,
7813                                    blockSize * 2) != blockSize * 2) {
7814                     str.clear();
7815                     in.setStatus(QDataStream::ReadPastEnd);
7816                     return in;
7817                 }
7818                 allocated += blockSize;
7819             }
7820
7821             if ((in.byteOrder() == QDataStream::BigEndian)
7822                     != (QSysInfo::ByteOrder == QSysInfo::BigEndian)) {
7823                 ushort *data = reinterpret_cast<ushort *>(str.data());
7824                 while (len--) {
7825                     *data = qbswap(*data);
7826                     ++data;
7827                 }
7828             }
7829         } else {
7830             str = QString(QLatin1String(""));
7831         }
7832     }
7833     return in;
7834 }
7835 #endif // QT_NO_DATASTREAM
7836
7837
7838
7839
7840 /*!
7841     \class QStringRef
7842     \since 4.3
7843     \brief The QStringRef class provides a thin wrapper around QString substrings.
7844     \reentrant
7845     \ingroup tools
7846     \ingroup string-processing
7847
7848     QStringRef provides a read-only subset of the QString API.
7849
7850     A string reference explicitly references a portion of a string()
7851     with a given size(), starting at a specific position(). Calling
7852     toString() returns a copy of the data as a real QString instance.
7853
7854     This class is designed to improve the performance of substring
7855     handling when manipulating substrings obtained from existing QString
7856     instances. QStringRef avoids the memory allocation and reference
7857     counting overhead of a standard QString by simply referencing a
7858     part of the original string. This can prove to be advantageous in
7859     low level code, such as that used in a parser, at the expense of
7860     potentially more complex code.
7861
7862     For most users, there are no semantic benefits to using QStringRef
7863     instead of QString since QStringRef requires attention to be paid
7864     to memory management issues, potentially making code more complex
7865     to write and maintain.
7866
7867     \warning A QStringRef is only valid as long as the referenced
7868     string exists. If the original string is deleted, the string
7869     reference points to an invalid memory location.
7870
7871     We suggest that you only use this class in stable code where profiling
7872     has clearly identified that performance improvements can be made by
7873     replacing standard string operations with the optimized substring
7874     handling provided by this class.
7875
7876     \sa {Implicitly Shared Classes}
7877 */
7878
7879
7880 /*!
7881  \fn QStringRef::QStringRef()
7882
7883  Constructs an empty string reference.
7884 */
7885
7886 /*! \fn QStringRef::QStringRef(const QString *string, int position, int length)
7887
7888 Constructs a string reference to the range of characters in the given
7889 \a string specified by the starting \a position and \a length in characters.
7890
7891 \warning This function exists to improve performance as much as possible,
7892 and performs no bounds checking. For program correctness, \a position and
7893 \a length must describe a valid substring of \a string.
7894
7895 This means that the starting \a position must be positive or 0 and smaller
7896 than \a string's length, and \a length must be positive or 0 but smaller than
7897 the string's length minus the starting \a position;
7898 i.e, 0 <= position < string->length() and
7899 0 <= length <= string->length() - position must both be satisfied.
7900 */
7901
7902 /*! \fn QStringRef::QStringRef(const QString *string)
7903
7904 Constructs a string reference to the given \a string.
7905 */
7906
7907 /*! \fn QStringRef::QStringRef(const QStringRef &other)
7908
7909 Constructs a copy of the \a other string reference.
7910  */
7911 /*!
7912 \fn QStringRef::~QStringRef()
7913
7914 Destroys the string reference.
7915
7916 Since this class is only used to refer to string data, and does not take
7917 ownership of it, no memory is freed when instances are destroyed.
7918 */
7919
7920
7921 /*!
7922     \fn int QStringRef::position() const
7923
7924     Returns the starting position in the referenced string that is referred to
7925     by the string reference.
7926
7927     \sa size(), string()
7928 */
7929
7930 /*!
7931     \fn int QStringRef::size() const
7932
7933     Returns the number of characters referred to by the string reference.
7934     Equivalent to length() and count().
7935
7936     \sa position(), string()
7937 */
7938 /*!
7939     \fn int QStringRef::count() const
7940     Returns the number of characters referred to by the string reference.
7941     Equivalent to size() and length().
7942
7943     \sa position(), string()
7944 */
7945 /*!
7946     \fn int QStringRef::length() const
7947     Returns the number of characters referred to by the string reference.
7948     Equivalent to size() and count().
7949
7950     \sa position(), string()
7951 */
7952
7953
7954 /*!
7955     \fn bool QStringRef::isEmpty() const
7956
7957     Returns true if the string reference has no characters; otherwise returns
7958     false.
7959
7960     A string reference is empty if its size is zero.
7961
7962     \sa size()
7963 */
7964
7965 /*!
7966     \fn bool QStringRef::isNull() const
7967
7968     Returns true if string() returns a null pointer or a pointer to a
7969     null string; otherwise returns true.
7970
7971     \sa size()
7972 */
7973
7974 /*!
7975     \fn const QString *QStringRef::string() const
7976
7977     Returns a pointer to the string referred to by the string reference, or
7978     0 if it does not reference a string.
7979
7980     \sa unicode()
7981 */
7982
7983
7984 /*!
7985     \fn const QChar *QStringRef::unicode() const
7986
7987     Returns a Unicode representation of the string reference. Since
7988     the data stems directly from the referenced string, it is not
7989     null-terminated unless the string reference includes the string's
7990     null terminator.
7991
7992     \sa string()
7993 */
7994
7995 /*!
7996     \fn const QChar *QStringRef::data() const
7997
7998     Same as unicode().
7999 */
8000
8001 /*!
8002     \fn const QChar *QStringRef::constData() const
8003
8004     Same as unicode().
8005 */
8006
8007 /*!
8008     Returns a copy of the string reference as a QString object.
8009
8010     If the string reference is not a complete reference of the string
8011     (meaning that position() is 0 and size() equals string()->size()),
8012     this function will allocate a new string to return.
8013
8014     \sa string()
8015 */
8016
8017 QString QStringRef::toString() const {
8018     if (!m_string)
8019         return QString();
8020     if (m_size && m_position == 0 && m_size == m_string->size())
8021         return *m_string;
8022     return QString(m_string->unicode() + m_position, m_size);
8023 }
8024
8025
8026 /*! \relates QStringRef
8027
8028    Returns true if string reference \a s1 is lexically equal to string reference \a s2; otherwise
8029    returns false.
8030 */
8031 bool operator==(const QStringRef &s1,const QStringRef &s2)
8032 { return (s1.size() == s2.size() &&
8033           qMemEquals((const ushort *)s1.unicode(), (const ushort *)s2.unicode(), s1.size()));
8034 }
8035
8036 /*! \relates QStringRef
8037
8038    Returns true if string \a s1 is lexically equal to string reference \a s2; otherwise
8039    returns false.
8040 */
8041 bool operator==(const QString &s1,const QStringRef &s2)
8042 { return (s1.size() == s2.size() &&
8043           qMemEquals((const ushort *)s1.unicode(), (const ushort *)s2.unicode(), s1.size()));
8044 }
8045
8046 /*! \relates QStringRef
8047
8048    Returns true if string  \a s1 is lexically equal to string reference \a s2; otherwise
8049    returns false.
8050 */
8051 bool operator==(QLatin1String s1, const QStringRef &s2)
8052 {
8053     if (s1.size() != s2.size())
8054         return false;
8055
8056     const ushort *uc = reinterpret_cast<const ushort *>(s2.unicode());
8057     const ushort *e = uc + s2.size();
8058     const uchar *c = reinterpret_cast<const uchar *>(s1.latin1());
8059     if (!c)
8060         return s2.isEmpty();
8061
8062     while (*c) {
8063         if (uc == e || *uc != *c)
8064             return false;
8065         ++uc;
8066         ++c;
8067     }
8068     return (uc == e);
8069 }
8070
8071 /*!
8072    \relates QStringRef
8073
8074     Returns true if string reference \a s1 is lexically less than
8075     string reference \a s2; otherwise returns false.
8076
8077     The comparison is based exclusively on the numeric Unicode values
8078     of the characters and is very fast, but is not what a human would
8079     expect. Consider sorting user-interface strings using the
8080     QString::localeAwareCompare() function.
8081 */
8082 bool operator<(const QStringRef &s1,const QStringRef &s2)
8083 {
8084     return ucstrcmp(s1.constData(), s1.length(), s2.constData(), s2.length()) < 0;
8085 }
8086
8087 /*!\fn bool operator<=(const QStringRef &s1,const QStringRef &s2)
8088
8089    \relates QStringRef
8090
8091     Returns true if string reference \a s1 is lexically less than
8092     or equal to string reference \a s2; otherwise returns false.
8093
8094     The comparison is based exclusively on the numeric Unicode values
8095     of the characters and is very fast, but is not what a human would
8096     expect. Consider sorting user-interface strings using the
8097     QString::localeAwareCompare() function.
8098 */
8099
8100 /*!\fn bool operator>=(const QStringRef &s1,const QStringRef &s2)
8101
8102    \relates QStringRef
8103
8104     Returns true if string reference \a s1 is lexically greater than
8105     or equal to string reference \a s2; otherwise returns false.
8106
8107     The comparison is based exclusively on the numeric Unicode values
8108     of the characters and is very fast, but is not what a human would
8109     expect. Consider sorting user-interface strings using the
8110     QString::localeAwareCompare() function.
8111 */
8112
8113 /*!\fn bool operator>(const QStringRef &s1,const QStringRef &s2)
8114
8115    \relates QStringRef
8116
8117     Returns true if string reference \a s1 is lexically greater than
8118     string reference \a s2; otherwise returns false.
8119
8120     The comparison is based exclusively on the numeric Unicode values
8121     of the characters and is very fast, but is not what a human would
8122     expect. Consider sorting user-interface strings using the
8123     QString::localeAwareCompare() function.
8124 */
8125
8126
8127 /*!
8128     \fn const QChar QStringRef::at(int position) const
8129
8130     Returns the character at the given index \a position in the
8131     string reference.
8132
8133     The \a position must be a valid index position in the string
8134     (i.e., 0 <= \a position < size()).
8135 */
8136
8137 /*!
8138     \fn void QStringRef::clear()
8139
8140     Clears the contents of the string reference by making it null and empty.
8141
8142     \sa isEmpty(), isNull()
8143 */
8144
8145 /*!
8146     \fn QStringRef &QStringRef::operator=(const QStringRef &other)
8147
8148     Assigns the \a other string reference to this string reference, and
8149     returns the result.
8150 */
8151
8152 /*!
8153     \fn QStringRef &QStringRef::operator=(const QString *string)
8154
8155     Constructs a string reference to the given \a string and assigns it to
8156     this string reference, returning the result.
8157 */
8158
8159 /*!
8160     \typedef QString::DataPtr
8161     \internal
8162 */
8163
8164 /*!
8165     \fn DataPtr & QString::data_ptr()
8166     \internal
8167 */
8168
8169
8170
8171 /*!  Appends the string reference to \a string, and returns a new
8172 reference to the combined string data.
8173  */
8174 QStringRef QStringRef::appendTo(QString *string) const
8175 {
8176     if (!string)
8177         return QStringRef();
8178     int pos = string->size();
8179     string->insert(pos, unicode(), size());
8180     return QStringRef(string, pos, size());
8181 }
8182
8183 /*!
8184     \fn int QStringRef::compare(const QStringRef &s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)
8185     \since 4.5
8186
8187     Compares the string \a s1 with the string \a s2 and returns an
8188     integer less than, equal to, or greater than zero if \a s1
8189     is less than, equal to, or greater than \a s2.
8190
8191     If \a cs is Qt::CaseSensitive, the comparison is case sensitive;
8192     otherwise the comparison is case insensitive.
8193 */
8194
8195 /*!
8196     \fn int QStringRef::compare(const QStringRef &s1, const QStringRef &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)
8197     \since 4.5
8198     \overload
8199
8200     Compares the string \a s1 with the string \a s2 and returns an
8201     integer less than, equal to, or greater than zero if \a s1
8202     is less than, equal to, or greater than \a s2.
8203
8204     If \a cs is Qt::CaseSensitive, the comparison is case sensitive;
8205     otherwise the comparison is case insensitive.
8206 */
8207
8208 /*!
8209     \fn int QStringRef::compare(const QStringRef &s1, QLatin1String s2, Qt::CaseSensitivity cs = Qt::CaseSensitive)
8210     \since 4.5
8211     \overload
8212
8213     Compares the string \a s1 with the string \a s2 and returns an
8214     integer less than, equal to, or greater than zero if \a s1
8215     is less than, equal to, or greater than \a s2.
8216
8217     If \a cs is Qt::CaseSensitive, the comparison is case sensitive;
8218     otherwise the comparison is case insensitive.
8219 */
8220
8221 /*!
8222     \overload
8223     \fn int QStringRef::compare(const QString &other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
8224     \since 4.5
8225
8226     Compares this string with the \a other string and returns an
8227     integer less than, equal to, or greater than zero if this string
8228     is less than, equal to, or greater than the \a other string.
8229
8230     If \a cs is Qt::CaseSensitive, the comparison is case sensitive;
8231     otherwise the comparison is case insensitive.
8232
8233     Equivalent to \c {compare(*this, other, cs)}.
8234
8235     \sa QString::compare()
8236 */
8237
8238 /*!
8239     \overload
8240     \fn int QStringRef::compare(const QStringRef &other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
8241     \since 4.5
8242
8243     Compares this string with the \a other string and returns an
8244     integer less than, equal to, or greater than zero if this string
8245     is less than, equal to, or greater than the \a other string.
8246
8247     If \a cs is Qt::CaseSensitive, the comparison is case sensitive;
8248     otherwise the comparison is case insensitive.
8249
8250     Equivalent to \c {compare(*this, other, cs)}.
8251
8252     \sa QString::compare()
8253 */
8254
8255 /*!
8256     \overload
8257     \fn int QStringRef::compare(QLatin1String other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
8258     \since 4.5
8259
8260     Compares this string with the \a other string and returns an
8261     integer less than, equal to, or greater than zero if this string
8262     is less than, equal to, or greater than the \a other string.
8263
8264     If \a cs is Qt::CaseSensitive, the comparison is case sensitive;
8265     otherwise the comparison is case insensitive.
8266
8267     Equivalent to \c {compare(*this, other, cs)}.
8268
8269     \sa QString::compare()
8270 */
8271
8272 /*!
8273     \fn int QStringRef::localeAwareCompare(const QStringRef &s1, const QString & s2)
8274     \since 4.5
8275
8276     Compares \a s1 with \a s2 and returns an integer less than, equal
8277     to, or greater than zero if \a s1 is less than, equal to, or
8278     greater than \a s2.
8279
8280     The comparison is performed in a locale- and also
8281     platform-dependent manner. Use this function to present sorted
8282     lists of strings to the user.
8283
8284     On Mac OS X, this function compares according the
8285     "Order for sorted lists" setting in the International prefereces panel.
8286
8287     \sa compare(), QTextCodec::locale()
8288 */
8289
8290 /*!
8291     \fn int QStringRef::localeAwareCompare(const QStringRef &s1, const QStringRef & s2)
8292     \since 4.5
8293     \overload
8294
8295     Compares \a s1 with \a s2 and returns an integer less than, equal
8296     to, or greater than zero if \a s1 is less than, equal to, or
8297     greater than \a s2.
8298
8299     The comparison is performed in a locale- and also
8300     platform-dependent manner. Use this function to present sorted
8301     lists of strings to the user.
8302
8303 */
8304
8305 /*!
8306     \fn int QStringRef::localeAwareCompare(const QString &other) const
8307     \since 4.5
8308     \overload
8309
8310     Compares this string with the \a other string and returns an
8311     integer less than, equal to, or greater than zero if this string
8312     is less than, equal to, or greater than the \a other string.
8313
8314     The comparison is performed in a locale- and also
8315     platform-dependent manner. Use this function to present sorted
8316     lists of strings to the user.
8317 */
8318
8319 /*!
8320     \fn int QStringRef::localeAwareCompare(const QStringRef &other) const
8321     \since 4.5
8322     \overload
8323
8324     Compares this string with the \a other string and returns an
8325     integer less than, equal to, or greater than zero if this string
8326     is less than, equal to, or greater than the \a other string.
8327
8328     The comparison is performed in a locale- and also
8329     platform-dependent manner. Use this function to present sorted
8330     lists of strings to the user.
8331 */
8332
8333 /*!
8334     \fn QString &QString::append(const QStringRef &reference)
8335     \since 4.4
8336
8337     Appends the given string \a reference to this string and returns the result.
8338  */
8339 QString &QString::append(const QStringRef &str)
8340 {
8341     if (str.string() == this) {
8342         str.appendTo(this);
8343     } else if (str.string()) {
8344         int oldSize = size();
8345         resize(oldSize + str.size());
8346         memcpy(data() + oldSize, str.unicode(), str.size() * sizeof(QChar));
8347     }
8348     return *this;
8349 }
8350
8351 /*!
8352     \since 4.4
8353
8354     Returns a substring reference to the \a n leftmost characters
8355     of the string.
8356
8357     If \a n is greater than size() or less than zero, a reference to the entire
8358     string is returned.
8359
8360     \snippet qstring/main.cpp leftRef
8361
8362     \sa left(), rightRef(), midRef(), startsWith()
8363 */
8364 QStringRef QString::leftRef(int n)  const
8365 {
8366     if (n >= d->size || n < 0)
8367         n = d->size;
8368     return QStringRef(this, 0, n);
8369 }
8370
8371 /*!
8372     \since 4.4
8373
8374     Returns a substring reference to the \a n rightmost characters
8375     of the string.
8376
8377     If \a n is greater than size() or less than zero, a reference to the entire
8378     string is returned.
8379
8380     \snippet qstring/main.cpp rightRef
8381
8382     \sa right(), leftRef(), midRef(), endsWith()
8383 */
8384 QStringRef QString::rightRef(int n) const
8385 {
8386     if (n >= d->size || n < 0)
8387         n = d->size;
8388     return QStringRef(this, d->size - n, n);
8389 }
8390
8391 /*!
8392     \since 4.4
8393
8394     Returns a substring reference to \a n characters of this string,
8395     starting at the specified \a position.
8396
8397     If the \a position exceeds the length of the string, a null
8398     reference is returned.
8399
8400     If there are less than \a n characters available in the string,
8401     starting at the given \a position, or if \a n is -1 (default), the
8402     function returns all characters from the specified \a position
8403     onwards.
8404
8405     Example:
8406
8407     \snippet qstring/main.cpp midRef
8408
8409     \sa mid(), leftRef(), rightRef()
8410 */
8411
8412 QStringRef QString::midRef(int position, int n) const
8413 {
8414     if (position > d->size)
8415         return QStringRef();
8416     if (position < 0) {
8417         if (n < 0 || n + position >= d->size)
8418             return QStringRef(this, 0, d->size);
8419         if (n + position <= 0)
8420             return QStringRef();
8421
8422         n += position;
8423         position = 0;
8424     } else if (n < 0 || n > d->size - position)
8425         n = d->size - position;
8426     return QStringRef(this, position, n);
8427 }
8428
8429 /*!
8430   \since 4.8
8431
8432   Returns the index position of the first occurrence of the string \a
8433   str in this string reference, searching forward from index position
8434   \a from. Returns -1 if \a str is not found.
8435
8436   If \a cs is Qt::CaseSensitive (default), the search is case
8437   sensitive; otherwise the search is case insensitive.
8438
8439   If \a from is -1, the search starts at the last character; if it is
8440   -2, at the next to last character and so on.
8441
8442   \sa QString::indexOf(), lastIndexOf(), contains(), count()
8443 */
8444 int QStringRef::indexOf(const QString &str, int from, Qt::CaseSensitivity cs) const
8445 {
8446     return qFindString(unicode(), length(), from, str.unicode(), str.length(), cs);
8447 }
8448
8449 /*!
8450     \since 4.8
8451     \overload indexOf()
8452
8453     Returns the index position of the first occurrence of the
8454     character \a ch in the string reference, searching forward from
8455     index position \a from. Returns -1 if \a ch could not be found.
8456
8457     \sa QString::indexOf(), lastIndexOf(), contains(), count()
8458 */
8459 int QStringRef::indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
8460 {
8461     return findChar(unicode(), length(), ch, from, cs);
8462 }
8463
8464 /*!
8465   \since 4.8
8466
8467   Returns the index position of the first occurrence of the string \a
8468   str in this string reference, searching forward from index position
8469   \a from. Returns -1 if \a str is not found.
8470
8471   If \a cs is Qt::CaseSensitive (default), the search is case
8472   sensitive; otherwise the search is case insensitive.
8473
8474   If \a from is -1, the search starts at the last character; if it is
8475   -2, at the next to last character and so on.
8476
8477   \sa QString::indexOf(), lastIndexOf(), contains(), count()
8478 */
8479 int QStringRef::indexOf(QLatin1String str, int from, Qt::CaseSensitivity cs) const
8480 {
8481     return qt_find_latin1_string(unicode(), size(), str, from, cs);
8482 }
8483
8484 /*!
8485     \since 4.8
8486
8487     \overload indexOf()
8488
8489     Returns the index position of the first occurrence of the string
8490     reference \a str in this string reference, searching forward from
8491     index position \a from. Returns -1 if \a str is not found.
8492
8493     If \a cs is Qt::CaseSensitive (default), the search is case
8494     sensitive; otherwise the search is case insensitive.
8495
8496     \sa QString::indexOf(), lastIndexOf(), contains(), count()
8497 */
8498 int QStringRef::indexOf(const QStringRef &str, int from, Qt::CaseSensitivity cs) const
8499 {
8500     return qFindString(unicode(), size(), from, str.unicode(), str.size(), cs);
8501 }
8502
8503 /*!
8504   \since 4.8
8505
8506   Returns the index position of the last occurrence of the string \a
8507   str in this string reference, searching backward from index position
8508   \a from. If \a from is -1 (default), the search starts at the last
8509   character; if \a from is -2, at the next to last character and so
8510   on. Returns -1 if \a str is not found.
8511
8512   If \a cs is Qt::CaseSensitive (default), the search is case
8513   sensitive; otherwise the search is case insensitive.
8514
8515   \sa QString::lastIndexOf(), indexOf(), contains(), count()
8516 */
8517 int QStringRef::lastIndexOf(const QString &str, int from, Qt::CaseSensitivity cs) const
8518 {
8519     const int sl = str.size();
8520     if (sl == 1)
8521         return lastIndexOf(str.at(0), from, cs);
8522
8523     const int l = size();;
8524     if (from < 0)
8525         from += l;
8526     int delta = l - sl;
8527     if (from == l && sl == 0)
8528         return from;
8529     if (from < 0 || from >= l || delta < 0)
8530         return -1;
8531     if (from > delta)
8532         from = delta;
8533
8534     return lastIndexOfHelper(reinterpret_cast<const ushort*>(unicode()), from,
8535                              reinterpret_cast<const ushort*>(str.unicode()), str.size(), cs);
8536 }
8537
8538 /*!
8539   \since 4.8
8540   \overload lastIndexOf()
8541
8542   Returns the index position of the last occurrence of the character
8543   \a ch, searching backward from position \a from.
8544
8545   \sa QString::lastIndexOf(), indexOf(), contains(), count()
8546 */
8547 int QStringRef::lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
8548 {
8549     return qt_last_index_of(unicode(), size(), ch, from, cs);
8550 }
8551
8552 /*!
8553   \since 4.8
8554   \overload lastIndexOf()
8555
8556   Returns the index position of the last occurrence of the string \a
8557   str in this string reference, searching backward from index position
8558   \a from. If \a from is -1 (default), the search starts at the last
8559   character; if \a from is -2, at the next to last character and so
8560   on. Returns -1 if \a str is not found.
8561
8562   If \a cs is Qt::CaseSensitive (default), the search is case
8563   sensitive; otherwise the search is case insensitive.
8564
8565   \sa QString::lastIndexOf(), indexOf(), contains(), count()
8566 */
8567 int QStringRef::lastIndexOf(QLatin1String str, int from, Qt::CaseSensitivity cs) const
8568 {
8569     const int sl = str.size();
8570     if (sl == 1)
8571         return lastIndexOf(QLatin1Char(str.latin1()[0]), from, cs);
8572
8573     const int l = size();
8574     if (from < 0)
8575         from += l;
8576     int delta = l - sl;
8577     if (from == l && sl == 0)
8578         return from;
8579     if (from < 0 || from >= l || delta < 0)
8580         return -1;
8581     if (from > delta)
8582         from = delta;
8583
8584     QVarLengthArray<ushort> s(sl);
8585     for (int i = 0; i < sl; ++i)
8586         s[i] = str.latin1()[i];
8587
8588     return lastIndexOfHelper(reinterpret_cast<const ushort*>(unicode()), from, s.data(), sl, cs);
8589 }
8590
8591 /*!
8592   \since 4.8
8593   \overload lastIndexOf()
8594
8595   Returns the index position of the last occurrence of the string
8596   reference \a str in this string reference, searching backward from
8597   index position \a from. If \a from is -1 (default), the search
8598   starts at the last character; if \a from is -2, at the next to last
8599   character and so on. Returns -1 if \a str is not found.
8600
8601   If \a cs is Qt::CaseSensitive (default), the search is case
8602   sensitive; otherwise the search is case insensitive.
8603
8604   \sa QString::lastIndexOf(), indexOf(), contains(), count()
8605 */
8606 int QStringRef::lastIndexOf(const QStringRef &str, int from, Qt::CaseSensitivity cs) const
8607 {
8608     const int sl = str.size();
8609     if (sl == 1)
8610         return lastIndexOf(str.at(0), from, cs);
8611
8612     const int l = size();
8613     if (from < 0)
8614         from += l;
8615     int delta = l - sl;
8616     if (from == l && sl == 0)
8617         return from;
8618     if (from < 0 || from >= l || delta < 0)
8619         return -1;
8620     if (from > delta)
8621         from = delta;
8622
8623     return lastIndexOfHelper(reinterpret_cast<const ushort*>(unicode()), from,
8624                              reinterpret_cast<const ushort*>(str.unicode()),
8625                              str.size(), cs);
8626 }
8627
8628 /*!
8629     \since 4.8
8630     Returns the number of (potentially overlapping) occurrences of
8631     the string \a str in this string reference.
8632
8633     If \a cs is Qt::CaseSensitive (default), the search is
8634     case sensitive; otherwise the search is case insensitive.
8635
8636     \sa QString::count(), contains(), indexOf()
8637 */
8638 int QStringRef::count(const QString &str, Qt::CaseSensitivity cs) const
8639 {
8640     return qt_string_count(unicode(), size(), str.unicode(), str.size(), cs);
8641 }
8642
8643 /*!
8644     \since 4.8
8645     \overload count()
8646
8647     Returns the number of occurrences of the character \a ch in the
8648     string reference.
8649
8650     If \a cs is Qt::CaseSensitive (default), the search is
8651     case sensitive; otherwise the search is case insensitive.
8652
8653     \sa QString::count(), contains(), indexOf()
8654 */
8655 int QStringRef::count(QChar ch, Qt::CaseSensitivity cs) const
8656 {
8657     return qt_string_count(unicode(), size(), ch, cs);
8658 }
8659
8660 /*!
8661     \since 4.8
8662     \overload count()
8663
8664     Returns the number of (potentially overlapping) occurrences of the
8665     string reference \a str in this string reference.
8666
8667     If \a cs is Qt::CaseSensitive (default), the search is
8668     case sensitive; otherwise the search is case insensitive.
8669
8670     \sa QString::count(), contains(), indexOf()
8671 */
8672 int QStringRef::count(const QStringRef &str, Qt::CaseSensitivity cs) const
8673 {
8674     return qt_string_count(unicode(), size(), str.unicode(), str.size(), cs);
8675 }
8676
8677 /*!
8678     \since 4.8
8679
8680     Returns true if the string reference starts with \a str; otherwise
8681     returns false.
8682
8683     If \a cs is Qt::CaseSensitive (default), the search is
8684     case sensitive; otherwise the search is case insensitive.
8685
8686     \sa QString::startsWith(), endsWith()
8687 */
8688 bool QStringRef::startsWith(const QString &str, Qt::CaseSensitivity cs) const
8689 {
8690     return qt_starts_with(isNull() ? 0 : unicode(), size(),
8691                           str.isNull() ? 0 : str.unicode(), str.size(), cs);
8692 }
8693
8694 /*!
8695     \since 4.8
8696     \overload startsWith()
8697     \sa QString::startsWith(), endsWith()
8698 */
8699 bool QStringRef::startsWith(QLatin1String str, Qt::CaseSensitivity cs) const
8700 {
8701     return qt_starts_with(isNull() ? 0 : unicode(), size(), str, cs);
8702 }
8703
8704 /*!
8705     \since 4.8
8706     \overload startsWith()
8707     \sa QString::startsWith(), endsWith()
8708 */
8709 bool QStringRef::startsWith(const QStringRef &str, Qt::CaseSensitivity cs) const
8710 {
8711     return qt_starts_with(isNull() ? 0 : unicode(), size(),
8712                           str.isNull() ? 0 : str.unicode(), str.size(), cs);
8713 }
8714
8715 /*!
8716     \since 4.8
8717     \overload startsWith()
8718
8719     Returns true if the string reference starts with \a ch; otherwise
8720     returns false.
8721
8722     If \a cs is Qt::CaseSensitive (default), the search is case
8723     sensitive; otherwise the search is case insensitive.
8724
8725     \sa QString::startsWith(), endsWith()
8726 */
8727 bool QStringRef::startsWith(QChar ch, Qt::CaseSensitivity cs) const
8728 {
8729     if (!isEmpty()) {
8730         const ushort *data = reinterpret_cast<const ushort*>(unicode());
8731         return (cs == Qt::CaseSensitive
8732                 ? data[0] == ch
8733                 : foldCase(data[0]) == foldCase(ch.unicode()));
8734     } else {
8735         return false;
8736     }
8737 }
8738
8739 /*!
8740     \since 4.8
8741     Returns true if the string reference ends with \a str; otherwise
8742     returns false.
8743
8744     If \a cs is Qt::CaseSensitive (default), the search is case
8745     sensitive; otherwise the search is case insensitive.
8746
8747     \sa QString::endsWith(), startsWith()
8748 */
8749 bool QStringRef::endsWith(const QString &str, Qt::CaseSensitivity cs) const
8750 {
8751     return qt_ends_with(isNull() ? 0 : unicode(), size(),
8752                         str.isNull() ? 0 : str.unicode(), str.size(), cs);
8753 }
8754
8755 /*!
8756     \since 4.8
8757     \overload endsWith()
8758
8759     Returns true if the string reference ends with \a ch; otherwise
8760     returns false.
8761
8762     If \a cs is Qt::CaseSensitive (default), the search is case
8763     sensitive; otherwise the search is case insensitive.
8764
8765     \sa QString::endsWith(), endsWith()
8766 */
8767 bool QStringRef::endsWith(QChar ch, Qt::CaseSensitivity cs) const
8768 {
8769     if (!isEmpty()) {
8770         const ushort *data = reinterpret_cast<const ushort*>(unicode());
8771         const int size = length();
8772         return (cs == Qt::CaseSensitive
8773                 ? data[size - 1] == ch
8774                 : foldCase(data[size - 1]) == foldCase(ch.unicode()));
8775     } else {
8776         return false;
8777     }
8778 }
8779
8780 /*!
8781     \since 4.8
8782     \overload endsWith()
8783     \sa QString::endsWith(), endsWith()
8784 */
8785 bool QStringRef::endsWith(QLatin1String str, Qt::CaseSensitivity cs) const
8786 {
8787     return qt_ends_with(isNull() ? 0 : unicode(), size(), str, cs);
8788 }
8789
8790 /*!
8791     \since 4.8
8792     \overload endsWith()
8793     \sa QString::endsWith(), endsWith()
8794 */
8795 bool QStringRef::endsWith(const QStringRef &str, Qt::CaseSensitivity cs) const
8796 {
8797     return qt_ends_with(isNull() ? 0 : unicode(), size(),
8798                         str.isNull() ? 0 : str.unicode(), str.size(), cs);
8799 }
8800
8801
8802 /*! \fn bool QStringRef::contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
8803
8804     \since 4.8
8805     Returns true if this string reference contains an occurrence of
8806     the string \a str; otherwise returns false.
8807
8808     If \a cs is Qt::CaseSensitive (default), the search is
8809     case sensitive; otherwise the search is case insensitive.
8810
8811     \sa indexOf(), count()
8812 */
8813
8814 /*! \fn bool QStringRef::contains(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
8815
8816     \overload contains()
8817     \since 4.8
8818
8819     Returns true if this string contains an occurrence of the
8820     character \a ch; otherwise returns false.
8821
8822     If \a cs is Qt::CaseSensitive (default), the search is
8823     case sensitive; otherwise the search is case insensitive.
8824
8825 */
8826
8827 /*! \fn bool QStringRef::contains(const QStringRef &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
8828     \overload contains()
8829     \since 4.8
8830
8831     Returns true if this string reference contains an occurrence of
8832     the string reference \a str; otherwise returns false.
8833
8834     If \a cs is Qt::CaseSensitive (default), the search is
8835     case sensitive; otherwise the search is case insensitive.
8836
8837     \sa indexOf(), count()
8838 */
8839
8840 /*! \fn bool QStringRef::contains(QLatin1String str, Qt::CaseSensitivity cs) const
8841     \since 4,8
8842     \overload contains()
8843
8844     Returns true if this string reference contains an occurrence of
8845     the string \a str; otherwise returns false.
8846
8847     If \a cs is Qt::CaseSensitive (default), the search is
8848     case sensitive; otherwise the search is case insensitive.
8849
8850     \sa indexOf(), count()
8851 */
8852
8853 static inline int qt_last_index_of(const QChar *haystack, int haystackLen, QChar needle,
8854                                    int from, Qt::CaseSensitivity cs)
8855 {
8856     ushort c = needle.unicode();
8857     if (from < 0)
8858         from += haystackLen;
8859     if (from < 0 || from >= haystackLen)
8860         return -1;
8861     if (from >= 0) {
8862         const ushort *b = reinterpret_cast<const ushort*>(haystack);
8863         const ushort *n = b + from;
8864         if (cs == Qt::CaseSensitive) {
8865             for (; n >= b; --n)
8866                 if (*n == c)
8867                     return n - b;
8868         } else {
8869             c = foldCase(c);
8870             for (; n >= b; --n)
8871                 if (foldCase(*n) == c)
8872                     return n - b;
8873         }
8874     }
8875     return -1;
8876
8877
8878 }
8879
8880 static inline int qt_string_count(const QChar *haystack, int haystackLen,
8881                                   const QChar *needle, int needleLen,
8882                                   Qt::CaseSensitivity cs)
8883 {
8884     int num = 0;
8885     int i = -1;
8886     if (haystackLen > 500 && needleLen > 5) {
8887         QStringMatcher matcher(needle, needleLen, cs);
8888         while ((i = matcher.indexIn(haystack, haystackLen, i + 1)) != -1)
8889             ++num;
8890     } else {
8891         while ((i = qFindString(haystack, haystackLen, i + 1, needle, needleLen, cs)) != -1)
8892             ++num;
8893     }
8894     return num;
8895 }
8896
8897 static inline int qt_string_count(const QChar *unicode, int size, QChar ch,
8898                                   Qt::CaseSensitivity cs)
8899 {
8900     ushort c = ch.unicode();
8901     int num = 0;
8902     const ushort *b = reinterpret_cast<const ushort*>(unicode);
8903     const ushort *i = b + size;
8904     if (cs == Qt::CaseSensitive) {
8905         while (i != b)
8906             if (*--i == c)
8907                 ++num;
8908     } else {
8909         c = foldCase(c);
8910         while (i != b)
8911             if (foldCase(*(--i)) == c)
8912                 ++num;
8913     }
8914     return num;
8915 }
8916
8917 static inline int qt_find_latin1_string(const QChar *haystack, int size,
8918                                         QLatin1String needle,
8919                                         int from, Qt::CaseSensitivity cs)
8920 {
8921     const char *latin1 = needle.latin1();
8922     int len = needle.size();
8923     QVarLengthArray<ushort> s(len);
8924     for (int i = 0; i < len; ++i)
8925         s[i] = latin1[i];
8926
8927     return qFindString(haystack, size, from,
8928                        reinterpret_cast<const QChar*>(s.constData()), len, cs);
8929 }
8930
8931 static inline bool qt_starts_with(const QChar *haystack, int haystackLen,
8932                                   const QChar *needle, int needleLen, Qt::CaseSensitivity cs)
8933 {
8934     if (!haystack)
8935         return !needle;
8936     if (haystackLen == 0)
8937         return needleLen == 0;
8938     if (needleLen > haystackLen)
8939         return false;
8940
8941     const ushort *h = reinterpret_cast<const ushort*>(haystack);
8942     const ushort *n = reinterpret_cast<const ushort*>(needle);
8943
8944     if (cs == Qt::CaseSensitive) {
8945         return qMemEquals(h, n, needleLen);
8946     } else {
8947         uint last = 0;
8948         uint olast = 0;
8949         for (int i = 0; i < needleLen; ++i)
8950             if (foldCase(h[i], last) != foldCase(n[i], olast))
8951                 return false;
8952     }
8953     return true;
8954 }
8955
8956 static inline bool qt_starts_with(const QChar *haystack, int haystackLen,
8957                                   QLatin1String needle, Qt::CaseSensitivity cs)
8958 {
8959     if (!haystack)
8960         return !needle.latin1();
8961     if (haystackLen == 0)
8962         return !needle.latin1() || *needle.latin1() == 0;
8963     const int slen = needle.size();
8964     if (slen > haystackLen)
8965         return false;
8966     const ushort *data = reinterpret_cast<const ushort*>(haystack);
8967     const uchar *latin = reinterpret_cast<const uchar*>(needle.latin1());
8968     if (cs == Qt::CaseSensitive) {
8969         for (int i = 0; i < slen; ++i)
8970             if (data[i] != latin[i])
8971                 return false;
8972     } else {
8973         for (int i = 0; i < slen; ++i)
8974             if (foldCase(data[i]) != foldCase((ushort)latin[i]))
8975                 return false;
8976     }
8977     return true;
8978 }
8979
8980 static inline bool qt_ends_with(const QChar *haystack, int haystackLen,
8981                                 const QChar *needle, int needleLen, Qt::CaseSensitivity cs)
8982 {
8983     if (!haystack)
8984         return !needle;
8985     if (haystackLen == 0)
8986         return needleLen == 0;
8987     const int pos = haystackLen - needleLen;
8988     if (pos < 0)
8989         return false;
8990
8991     const ushort *h = reinterpret_cast<const ushort*>(haystack);
8992     const ushort *n = reinterpret_cast<const ushort*>(needle);
8993
8994     if (cs == Qt::CaseSensitive) {
8995         return qMemEquals(h + pos, n, needleLen);
8996     } else {
8997         uint last = 0;
8998         uint olast = 0;
8999         for (int i = 0; i < needleLen; i++)
9000             if (foldCase(h[pos+i], last) != foldCase(n[i], olast))
9001                 return false;
9002     }
9003     return true;
9004 }
9005
9006
9007 static inline bool qt_ends_with(const QChar *haystack, int haystackLen,
9008                                 QLatin1String needle, Qt::CaseSensitivity cs)
9009 {
9010     if (!haystack)
9011         return !needle.latin1();
9012     if (haystackLen == 0)
9013         return !needle.latin1() || *needle.latin1() == 0;
9014     const int slen = needle.size();
9015     int pos = haystackLen - slen;
9016     if (pos < 0)
9017         return false;
9018     const uchar *latin = reinterpret_cast<const uchar*>(needle.latin1());
9019     const ushort *data = reinterpret_cast<const ushort*>(haystack);
9020     if (cs == Qt::CaseSensitive) {
9021         for (int i = 0; i < slen; i++)
9022             if (data[pos+i] != latin[i])
9023                 return false;
9024     } else {
9025         for (int i = 0; i < slen; i++)
9026             if (foldCase(data[pos+i]) != foldCase((ushort)latin[i]))
9027                 return false;
9028     }
9029     return true;
9030 }
9031
9032 /*!
9033     \since 4.8
9034
9035     Returns a Latin-1 representation of the string as a QByteArray.
9036
9037     The returned byte array is undefined if the string contains non-Latin1
9038     characters. Those characters may be suppressed or replaced with a
9039     question mark.
9040
9041     \sa toUtf8(), toLocal8Bit(), QTextCodec
9042 */
9043 QByteArray QStringRef::toLatin1() const
9044 {
9045     return toLatin1_helper(unicode(), length());
9046 }
9047
9048 /*!
9049     \fn QByteArray QStringRef::toAscii() const
9050     \since 4.8
9051     \deprecated
9052
9053     Returns an 8-bit representation of the string as a QByteArray.
9054
9055     This function does the same as toLatin1().
9056
9057     Note that, despite the name, this function does not necessarily return an US-ASCII
9058     (ANSI X3.4-1986) string and its result may not be US-ASCII compatible.
9059
9060     \sa toLatin1(), toUtf8(), toLocal8Bit(), QTextCodec
9061 */
9062
9063 /*!
9064     \since 4.8
9065
9066     Returns the local 8-bit representation of the string as a
9067     QByteArray. The returned byte array is undefined if the string
9068     contains characters not supported by the local 8-bit encoding.
9069
9070     QTextCodec::codecForLocale() is used to perform the conversion from
9071     Unicode. If the locale encoding could not be determined, this function
9072     does the same as toLatin1().
9073
9074     If this string contains any characters that cannot be encoded in the
9075     locale, the returned byte array is undefined. Those characters may be
9076     suppressed or replaced by another.
9077
9078     \sa toLatin1(), toUtf8(), QTextCodec
9079 */
9080 QByteArray QStringRef::toLocal8Bit() const
9081 {
9082 #ifndef QT_NO_TEXTCODEC
9083     if (QTextCodec::codecForLocale())
9084         return QTextCodec::codecForLocale()->fromUnicode(unicode(), length());
9085 #endif // QT_NO_TEXTCODEC
9086     return toLatin1();
9087 }
9088
9089 /*!
9090     \since 4.8
9091
9092     Returns a UTF-8 representation of the string as a QByteArray.
9093
9094     UTF-8 is a Unicode codec and can represent all characters in a Unicode
9095     string like QString.
9096
9097     However, in the Unicode range, there are certain codepoints that are not
9098     considered characters. The Unicode standard reserves the last two
9099     codepoints in each Unicode Plane (U+FFFE, U+FFFF, U+1FFFE, U+1FFFF,
9100     U+2FFFE, etc.), as well as 16 codepoints in the range U+FDD0..U+FDDF,
9101     inclusive, as non-characters. If any of those appear in the string, they
9102     may be discarded and will not appear in the UTF-8 representation, or they
9103     may be replaced by one or more replacement characters.
9104
9105     \sa toLatin1(), toLocal8Bit(), QTextCodec
9106 */
9107 QByteArray QStringRef::toUtf8() const
9108 {
9109     if (isNull())
9110         return QByteArray();
9111
9112     return QUtf8::convertFromUnicode(constData(), length(), 0);
9113 }
9114
9115 /*!
9116     \since 4.8
9117
9118     Returns a UCS-4/UTF-32 representation of the string as a QVector<uint>.
9119
9120     UCS-4 is a Unicode codec and is lossless. All characters from this string
9121     can be encoded in UCS-4.
9122
9123     \sa toUtf8(), toLatin1(), toLocal8Bit(), QTextCodec
9124 */
9125 QVector<uint> QStringRef::toUcs4() const
9126 {
9127     QVector<uint> v(length());
9128     uint *a = v.data();
9129     int len = QString::toUcs4_helper(reinterpret_cast<const ushort *>(unicode()), length(), a);
9130     v.resize(len);
9131     return v;
9132 }
9133
9134
9135 /*!
9136     \obsolete
9137     \fn QString Qt::escape(const QString &plain)
9138
9139     \sa QString::toHtmlEscaped()
9140 */
9141
9142 /*!
9143     Converts the plain text string \a plain to a HTML string with
9144     HTML metacharacters \c{<}, \c{>}, \c{&}, and \c{"} replaced by HTML
9145     entities.
9146
9147     Example:
9148
9149     \snippet code/src_corelib_tools_qstring.cpp 7
9150 */
9151 QString QString::toHtmlEscaped() const
9152 {
9153     QString rich;
9154     const int len = length();
9155     rich.reserve(int(len * 1.1));
9156     for (int i = 0; i < len; ++i) {
9157         if (at(i) == QLatin1Char('<'))
9158             rich += QLatin1String("&lt;");
9159         else if (at(i) == QLatin1Char('>'))
9160             rich += QLatin1String("&gt;");
9161         else if (at(i) == QLatin1Char('&'))
9162             rich += QLatin1String("&amp;");
9163         else if (at(i) == QLatin1Char('"'))
9164             rich += QLatin1String("&quot;");
9165         else
9166             rich += at(i);
9167     }
9168     rich.squeeze();
9169     return rich;
9170 }
9171
9172 /*!
9173   \macro QStringLiteral(str)
9174   \relates QString
9175
9176   The macro generates the data for a QString out of \a str at compile time if the compiler supports it.
9177   Creating a QString from it is free in this case, and the generated string data is stored in
9178   the read-only segment of the compiled object file.
9179
9180   For compilers not supporting the creation of compile time strings, QStringLiteral will fall back to
9181   QLatin1String.
9182
9183   The result of the QStringLiteral expression can be cast into a QString.
9184
9185   If you have code looking like:
9186   \code
9187   if (node.hasAttribute("http-contents-length")) //...
9188   \endcode
9189   One temporary QString will be created to be passed as the hasAttribute function parameter.
9190   This can be quite expensive, as it involves a memory allocation and the copy and the conversion
9191   of the data into QString's internal encoding.
9192
9193   This can be avoided by doing
9194   \code
9195   if (node.hasAttribute(QStringLiteral("http-contents-length"))) //...
9196   \endcode
9197   Then the QString's internal data will be generated at compile time and no conversion or allocation
9198   will occur at runtime
9199
9200   Using QStringLiteral instead of a double quoted ascii literal can significantly speed up creation
9201   of QString's from data known at compile time.
9202
9203   If the compiler is C++11 enabled the string \a str can actually contain unicode data.
9204
9205   \note There are still a few cases in which QLatin1String is more efficient than QStringLiteral:
9206   If it is passed to a function that has an overload that takes the QLatin1String directly, without
9207   conversion to QString. For instance, this is the case of QString::operator==
9208   \code
9209   if (attribute.name() == QLatin1String("http-contents-length")) //...
9210   \endcode
9211 */
9212
9213 QT_END_NAMESPACE