Commit Graph

762 Commits (a6744bc9f9d0a1bcdaa6769ddb39a18dfad5f5c3)

Author SHA1 Message Date
Edward Welbourne a590ea5792 Fix spacing in QCollator documentation
Many doc-comments had their end-comment marker indented.
Keep separate from real doc changes, to appease the inanity 'bot.

Task-number: QTBUG-72233
Change-Id: Id6b8244aeccd81ba7be461ec2b344910c106c17d
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-27 13:26:53 +01:00
Edward Welbourne 3a4115d123 Return a more useful date-time on parser failure in spring-forward gap
Up to 5.15.0, QDateTime::fromString(), when parsing a string that
matched the format but represented a date-time in a spring-forward's
gap, would return an invalid date-time object that represented a "best
shot" date-time, correcting the error in the string as best it could.

In 5.15, in order to handle time-spec information correctly, we
adapted the date-time parser to have a fromString() variant that
parsed a date-time as a whole, rather than as a date and a time; as a
result, QDTP::fromString() now returns false and QDT::fromString()
returned a default-constructed instance instead of the invalid
date-time that QDTP had produced.

Amend 7605451604 to restore the prior
behavior of returning the invalid date-time object from QDTP instead
of a default-constructed invalid date-time. Also document what this
implies for the caller's ability to recover from the situation, if a
best shot result is better than nothing.

[ChangeLog][QtCore][QDateTime] Restored pre-5.15.0 behavior when
parsing a date-time from a string (and document what it implies): if
the string has the right form but represents a date-time that was
skipped by a time-zone transition (e.g. a DST spring-forward), the
invalid date-time object returned can, none the less, be used to
recover a near-by date-time that may be more useful in some cases.
From 5.15.0 to 5.15.2 and in 6.0.0, a default-constructed QDateTime
was returned in place of this more informative invalid date-time.

Task-number: QTBUG-88633
Pick-to: 6.0 5.15
Change-Id: If0b439038d5fe48eefb951c62f3aae2933bb5651
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-27 13:26:53 +01:00
Edward Welbourne 085678a75e Mark two impossible code-paths with Q_UNREACHABLE
Change-Id: I8c04f512b078d4c13d759854b65f4d39b7b80e75
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-27 13:26:52 +01:00
Kai Koehne efa05e0417 Doc: Consistently use book style capitalization for QString
Pick-to: 5.15 6.0
Change-Id: I2ab64fe58ad737b23f0829ed91591efaa0c22c6f
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-27 08:28:25 +01:00
Kai Koehne 90c3513f37 Doc: Linkify all mentionings of QT_NO_CAST_TO_ASCII
This way the user can directly click the link, instead of looking at the
'see also' section.

Pick-to: 6.0
Change-Id: I50b62fe0b376a3f6462c11abc46a001c334ba82a
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-27 08:28:25 +01:00
Kai Koehne 50873153a7 Doc: Improve *_CAST_FROM_ASCII documentation
Pick-to: 5.15 6.0
Change-Id: Iba73c0a38e2c4add740aab20036aa39c56eb4d98
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-27 08:28:25 +01:00
Giuseppe D'Angelo 5771591fbc QString/QByteArray: add erase() for iterators
Otherwise they're not usable with iterator-based algorithms
that e.g. remove, partition and the like.

[ChangeLog][QtCore][QString] Added erase().

[ChangeLog][QtCore][QByteArray] Added erase().

Change-Id: I78829b1a5365dd53b6b6423ceedbc52edeafbc63
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-26 14:43:20 +01:00
Edward Welbourne f884689d04 Clean up docs of QCalendar-related QLocale::toString() variants
Some of the new functions were added without documentation, or without
updating the docs to mention the optional calendars. Shuffle the
methods so that the one with calendar is what the primary
documentation comment describes and the one without is documented as
an overload.

Pick-to: 5.15
Change-Id: Iee4cdb1d3b0ed21a50e205a5275a0695a2667550
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-23 11:31:53 +01:00
Giuseppe D'Angelo 915be6606e QChar: assert on illegal construction
If the input is out of range for the respective input type,
then fire an assert. Remove a redudant bitwise-and.

The constructors from char have been left alone: we are
documenting that QChar(char) constructs from Latin1 (!), not
ASCII/UTF-8, so all values are valid.

Change-Id: I55e261015d5efa0699c78c25e454f09bb17a913f
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-20 03:34:37 +01:00
Andreas Buhr ebaae45ea1 Fix logic error in QString::replace(ch, after, cs)
Coverage analysis showed that an if-branch marked "Q_LIKELY" was never
taken. It turns out the code was incorrect, but behaved correctly.
This patch fixes the logic and adds a unit test.

Pick-to: 5.15
Change-Id: I9b4ba76392b52f07b8e21188496e23f98dba95a9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-19 20:28:27 +01:00
Andreas Buhr 98666c8afc Change QString formatting of negative numbers in non-base-10
For bases other than 10, negative numbers have been converted
to QString by casting them to an unsigned number and
converting that. Thus QString::number(-17, 16) returned
"0xffffffffffffffef", for example.
This patch changes the behavior so that
negative numbers are converted like positive numbers.
Additinally, this patch adds unit tests for QString::number.

[ChangeLog][Important Behavior Changes]
Changed QString::number(integer, base) for negative numbers
and bases other than 10 to return the string corresponding
to the absolute value, prefixed by "-".

Fixes: QTBUG-53706
Change-Id: I0ad3ca3f035d553860b262f5bec17dc81714d8ac
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-19 11:28:44 +00:00
Karsten Heimrich d41eed01a4 Doc: Remove wrong \obsolete doc comments
Change-Id: I541f12fab128493235716fb73d65f4ab0a62bb82
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-19 06:27:48 +01:00
Giuseppe D'Angelo 4d19303654 QChar: use =delete instead of private
Use the idiomatic way to block access to some functions.

Change-Id: I6760dac6ce18910bf30b527b313882e394049349
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-19 04:16:49 +01:00
Giuseppe D'Angelo 4e7013033f QChar: get rid of some redundant comments
We have a proper tag now.

Change-Id: Ia5279a82e078d27aa5e09a427f36cf355d959e1f
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-18 09:38:20 +01:00
Giuseppe D'Angelo 29942dcbb1 Centralize the wchar_t == char16_t check on Windows
Don't push it onto every TU that includes QChar (... approx.
everything that uses Qt).

Change-Id: I4a07ce9e38a347b45315db93b0c5b90c20bacdbc
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-18 09:38:09 +01:00
Allan Sandfeld Jensen 34304e3100 Get rid of Q_COMPILER_CONSTEXPR checks
Is required now.

Change-Id: I62e95929d1649ea1390392230b619bd56d2a0349
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-17 21:28:11 +01:00
Edward Welbourne 17701a95f8 QLocale: simplify currency display name lookup
We were extracting several candidate display names from CLDR for each
currency, joining them with semicolons, storing in a table, then using
only the first entry from the list - where we should probably have
used the first non-empty entry in any case.

So instead extract the first non-empty candidate name from CLDR and
store that simply, saving the need for semicolon-joining or parsing
out the first entry from the thus-joined list. This significantly
reduces the size of the currency name data table.

Change-Id: I201d0528348d5fcb9eceb5df86211b9c77de3485
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-17 19:55:04 +01:00
Edward Welbourne 7c28fa7717 Inline QLocale's QString overloads via QStringView
Make declarations use same parameter name as implementation and
documentation, in the process. Fixed indent of some doc comments.

Change-Id: Ibaa3a5f6316a16c5b65f6ea6e0034f4eb2864b98
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-17 19:55:04 +01:00
Edward Welbourne e71aafcb65 String-view-ify qt_splitLocaleName() and simplify its callers
Two of its callers didn't even care about the fragments it was
returning, one only cared about two of them. The parsing could be more
straightforward and less verbose. Parsing into QStringView saves the
need to allocate copies of the substrings parsed.  Cleaned up around
the code that called it.

Change-Id: Ie65d2b1b3eb891c20bc82275d7a0da00c30d7b8d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-17 19:55:04 +01:00
Edward Welbourne 1721b80e10 Export QLocaleId::fromName() so qttools can use it
This shall replace QLocalePrivate::getLangAndCountry()'s use by qttools.

Change-Id: Ib686a3769bd38c477d7fbad50cf494ee8a0b1c00
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-17 19:55:04 +01:00
Lars Knoll 996255baae Fix signature of QArrayDataOps::erase()
Bring it in line with the other methods that also take a
pointer and a size.

Also use truncate() in removeAll() as that's more efficient
for the use case.

Change-Id: Ib1073b7c048ceb96fb6391b308ef8feb77896866
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-17 11:47:36 +01:00
Zhang Sheng e13173c112 Adjust code format, add space after 'if'
Change-Id: Ice081c891ff7f4b766f49dd4bd5cf18c30237acf
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: hjk <hjk@qt.io>
2020-11-16 12:53:37 +00:00
Anton Kudryavtsev e8662d2d80 Doc: fix QStringView::compare since section
Change-Id: Ia469236f9cf669e11bcaec5fa8e4837bbbe911c7
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-16 10:50:52 +03:00
Giuseppe D'Angelo 1869615fc9 QChar: make construction from integral explicit
QChar should not be convertible from any integral type except from
char16_t, short and possibly char (since it's a direct superset).

David provided the perfect example:

  if (str == 123) { ~~~ }

compiles, with 123 implicitly converted to QChar (str == "123"
was meant instead). But similarly one can construct other
scenarios where QString(123) gets accidentally used (instead of
QString::number(123)), like QString s; s += 123;.

Add a macro to revert to the implicit constructors, for backwards
compatibility.

The breaks are mostly in tests that "abuse" of integers (arithmetic,
etc.). Maybe it's time for user-defined literals for QChar/QString,
but that is left for another commit.

[ChangeLog][Potentially Source-Incompatible Changes][QChar] QChar
constructors from integral types are now by default explicit.
It is recommended to use explicit conversions, QLatin1Char,
QChar::fromUcs4 instead of implicit conversions. The old behavior
can be restored by defining the QT_IMPLICIT_QCHAR_CONSTRUCTION
macro.

Change-Id: I6175f6ab9bcf1956f6f97ab0c9d9d5aaf777296d
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2020-11-15 14:41:05 +01:00
Andrei Golubev 9c51177564 QStringBuilder: change int to qsizetype
We should use qsizetype when interacting with QString/QBA to avoid
subtle overflow bugs and int limitations

Change-Id: I4ae5ea98a72c6283c7dca0ecfa94cc1669c9b446
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-12 15:25:06 +01:00
Andrei Golubev 405305069f Clean realloc() related bits in QString/QBA and Q*ArrayOps
Fixed misleading naming of "slowReallocatePath". It's no longer "slow",
it's downright dangerous now to reallocate under certain conditions

Added several asserts which should've been there already as our code
would run into a UB/crash anyhow - let's at least get extra checks
that are closer to the trouble causing places

Bring back the (slightly modified) code-cleaning changes from
504972f838

Change-Id: Ie1358aebc619062d3991a78049e366dc0e8c267e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-11-12 09:53:49 +01:00
Giuseppe D'Angelo 328cad011e QStringTokenizer: fix a misuse of std::move
`Container` is a forwarding reference, so use std::forward.
The deduction for l-values wouldn't make this code even compile
with std::move.

Change-Id: Icc9b81a8ad1c76ef1e2ef0f08e7a86b0b4c4ce59
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-12 06:02:49 +01:00
Karsten Heimrich bd3a1dd9c2 Doc: Update/scrub QString documentation
Fixes: QTBUG-86554
Change-Id: I3d40295115207c430ec30bbac6fb241bf897e5fa
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
2020-11-11 12:48:21 +01:00
Mårten Nordheim bbadd1b5c1 Add QByteArray::insert(qsizetype, const QByteArray &)
For consistency with append and prepend we should have an overload for
insert() as well. This also enables insert() to be used with
QStringBuilder, i.e. qba.insert(2, qba2 + "abc").

Because simply adding a const QByteArray & overload causes ambiguity
with QByteArrayView we also add a const char * overload.

Add some extra test-cases. Two for QByteArrayView since it's not
directly tested anymore. One for inserting self directly.

Change-Id: Ieb43a6a7d1afbb498bc89c690908d7f0faa94687
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-11 01:00:39 +01:00
Friedemann Kleint ae7c3985f1 MinGW: Fix compile error in qlocale_win.cpp
Cast enumerations to ushort, fixing:
src/corelib/text/qlocale_win.cpp: In member function 'virtual QVariant QSystemLocale::query(QSystemLocale::QueryType, QVariant) const':
src/corelib/text/qlocale_win.cpp:765:34: error: enumeral and non-enumeral type in conditional expression [-Werror=extra]

As a drive-by, fix deprecation warning about QVariant::type().

Amends 098f43fdd2.

Change-Id: I2adc9833c6d6d9e9d2500f0b92b25cb5d38b583b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2020-11-10 17:08:19 +01:00
Edward Welbourne 837a29b0b9 Fix accidental shadowing in QLocale::uiLanguages()
While simplifying uses of QSystemLocale::query() I declared a
shadowing local variable instead of setting a function-scope variable
that the code had previously set. Restore prior correct behavior.

Fixup for commit b5bc3ee036.

Fixes: QTBUG-87858
Change-Id: I6bd64aef1eb7df9ec4a703c59aa7369245ab2472
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-09 17:28:35 +01:00
Topi Reinio 696114494c Doc: List missing country names in QLocale::Country
And drop the use of 'please' when documenting replacements for obsolete
values.

Change-Id: I1c5697023794f2935755d538fad602fe78ba8501
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-09 13:39:38 +01:00
Volker Hilsheimer 1628e79a77 Fix QAnyStringView comparison documentation
qdoc's clang knows about spaceship operator, but we still need to
document the regular ones.

Also add missing return types.

Change-Id: If382ac2f51a49c9adbe4a99025403a3e8332fabd
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-09 07:21:34 +01:00
Andreas Buhr e6cba05b66 QLocale: improve speed of 'applyIntegerFormatting()'
This patch reduced the runtime of "QString::number(12345678)"
from 119ns to 84ns in one measurement. It removes one copy of a
QString into a local lambda function, it adds a std::move on
return, removing another QString instantiation and it removes
the usage of StringBuilder on return, which created another QString.

Task-number: QTBUG-87330
Change-Id: Ia37e314353c354ae04402cd482d0f7aeabbfc0cb
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2020-11-08 15:53:36 +01:00
Edward Welbourne a74f534864 Use the right UI language lookup in macOS backend for QSystemLocale
Use CFLocaleCopyPreferredLanguages() instead of a home-grown call to a
low-level API. Brought to light by QTBUG-87858.

Change-Id: Ica22c446e01930da65d34c8851e3e67c9d020d8b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2020-11-08 13:01:55 +01:00
Edward Welbourne 8693d473e5 Rework QLocale's likely sub-tag addition
Instead of looking up each candidate pattern in a separte O(log(n))
search, exploit the fact that the array is in the right order to put
each candidate we try after the ones we'd have preferred over it.

At the same time, add und_script_region and und_region searches, which
aren't mentioned in the spec's algorithm but are clearly meant to be
searched (the spec's examples include some). Also, document what's
going on - because it's a bit complicated !

Change-Id: Id88ced335b0d2dfd18fb59c9a3dc75571f2a44ef
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-08 13:01:38 +01:00
Edward Welbourne a9e4bf7eef Implement binary search in QLocale's likely sub-tag lookup
Follow through on a comment from 2012: sort the likely subtag array
(in the CLDR update script) and use bsearch to find entries in it.

This simplifies QLocaleXmlReader.likelyMap() slightly, moving the
detection of last entry to LocaleDataWriter.likelySubtags(), but
requires collecting all likely sub-tag mapping pairs (rather than just
passing them through from read to write via generators) in order to
sort them.

Change-Id: Ieb6875ccde1ddbd475ae68c0766a666ec32b7005
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-08 13:01:33 +01:00
Edward Welbourne 246ba8ca61 Update CLDR to v38
Fresh on the heels of our update to v37, they've released a new version.
No new languages to complicate life, fortunately.

Updated license (year range) and attribution. One test also needed an
update: Catalan's long time format now parenthesizes the zone.

Task-number: QTBUG-87925
Pick-to: 5.15
Change-Id: I54fb9b7f084b5cd019c983c1e3862dc03865a272
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-08 13:01:29 +01:00
Edward Welbourne 4ab6358039 Reorder locale enums alphabetically
Binary-incompatible change: change the numeric values of QLocale's
Language, Script and Country enums, as encouraged by a comment in the
generator script enumdata.py and clarify documentation around that.

In the process (since I was changing almost every line anyway),
convert the dictionary values from (mutable) lists of length two to
tuples, since they are (and should be) immutable data.

Change-Id: I26222bce45b9f5074b1d81ed70015a75ac34adcd
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-08 13:01:18 +01:00
Edward Welbourne 73ceb71576 Use newer names for various languages, territories and scripts
Our enumdata.py namings of countries had fallen somewhat out of sync
with CLDR's names. In the process, support including hyphenation in
the unsquashed name, along with spacing. Distinguish, in comments,
between older renamings and those first seen in Qt6.

Change-Id: I91ec444bf35222ab6a9332e389ace19cca0e4fdf
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-08 13:01:12 +01:00
Edward Welbourne b83b990659 Replace QLocalePriave::create() with a plain constructor
Be up front about using new in all the places where it's created.
Made one of the global statics into a function-local static.
Eliminated a static made redundant by its const sibling.
Made two members const now that they can be.

Change-Id: I46532b3c1e0e62d1f8c84f55494f70cff09d4404
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-08 13:00:46 +01:00
Edward Welbourne e330a9bb44 Replace fallbackUiLocaleData() with fallbackUiLocaleIndex()
This means always initializing globalLocaleData from an entry in the
locale_data array, where in principle the fallbackUiLocale() could be
the system locale, which isn't held in the array. However, no actual
implementation of fallbackUiLocale() uses the system locale (nor is it
clear this would work if one did).

Change-Id: Ie1c5ef3e8a97f21e0d82fa2dfb3cf3eb9e4c8840
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-08 13:00:39 +01:00
Edward Welbourne 902a5a1ff4 Rename QLocalePrivate's m_data_offset to m_index
Change-Id: I1d27e6e57893c2f96df40746e1280fc8428e9ec1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-08 13:00:31 +01:00
Edward Welbourne cc33b977ff QLocale: Compare to &globalLocaleData instead of systemData()
Calling systemData() locks a mutex but the tests against its return
are just testing whether some m_data we're looking at is the
&globalLocaleData it's returning; any other m_data points into the
locale_data global array. So bypass the expensive mutex for these
tests and just compare against the pointer systemData() would be
returning.

Thanks to Andreas Buhr <andreas.buhr@qt.io> for the analysis that
showed the need for this.

Task-number: QTBUG-87330
Change-Id: Ib06233773511dc9d532cb4658319b6d589d17b56
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-08 13:00:24 +01:00
Edward Welbourne 7d81f21d48 Always pass index when creating a QLocalePrivate
Previously, two calls using the default locale (which has an index in
the locale_data array when it isn't the system locale) neglected to
pass the index and the call for the system locale had no idnex, where
it should really set the index appropriate to its language, script and
country, so that we get appropriate calendar data to go with the
system locale. One other place that handled the default locale also
neglected to revise the index it was using.

Change-Id: I4cc52e2d085a99e61236c91c0ae873b3bde5f11d
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-08 13:00:17 +01:00
Edward Welbourne 297cbd506f QLocale: use uint less
Various uses of uint were simply redundant, now that Language, Script
and Country are ushort-based. Others should in any case have been
quint16 or char32_t.

Change-Id: Id0d0dc2558e1724907907cde56059f70972e824a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-08 13:00:09 +01:00
Edward Welbourne 098f43fdd2 Use QLocaleId in place of language, script, country triples
Pass a single argument in place of three; and (prepare to) replace
QLocalePrivate::getLangAndCountry(), taking three out parameters, with
QLocaleId::fromName(). Removal of getLangAndCountry() must wait for
removal of linguist's use of it in qttools, which has to wait for this
change to land in qtbase. In the process, change findLocaleIndex()'s
return to int.

Change-Id: I9f5c44c41f2dd1598c53ed5ccb0abddc6b17d21f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-08 13:00:01 +01:00
Edward Welbourne 38b6cf490d Rework finding of locale data to be index-based
Instead of returning a pointer (from which we then have to infer an
index for use in calendar data access), compute the index as primary
and infer the data pointer from it. Also refer to the index as such,
rather than as an offset.

Comments advocating this wanted to dispense with the pointer entirely;
that's not an option, however, due to the system locale having its
data in a separate object, outside the array that contains all the
other locales' data.

Change-Id: I1c60e688229394003e61372dbfc6cfb11086eafa
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-08 12:59:49 +01:00
Edward Welbourne 8bf36025f5 Add some inline methods to make code more readable
Give QLocaleId matchesAny() and isValid() checks and some acceptance
tests for their use as filters. Give QLocaleData a QLocaleId id().
A few messy pieces of code get easier to read.

In the process, greatly simplify a do-while loop (sacrificing some
pretest-before-loop optimizations - benchmarking shows they made
negligible difference) and change a while loop to match its form,
since it was doing essentially the same iteration and (thus) its
condition was guaranteed true on the first iteration.

Change-Id: I36b1a6ca8a3cf350b3f3abbe75b177e5a7637cd8
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-08 03:14:11 +01:00
Giuseppe D'Angelo dcbc8f16d0 Be explicit in a uint->QChar conversion
And check that the result fits.

Change-Id: Iaee1085315559bdffea9400b94b29869621ab7ff
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-08 03:13:31 +01:00
Volker Hilsheimer c5a51926d6 Revert "Refine {QString, QBA}::reallocData() logic"
This reverts commit 504972f838.

Introduced realloc failures in qdoc.

Task-number: QTBUG-88258
Change-Id: I953e8d3933085022c75068af357ec9a44ab7e984
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-08 03:11:55 +01:00
Edward Welbourne cfac358fa3 Turn QLocale's operator==() and operator!=() into hidden friends
Update docs to match. Add note on the conditions for equality.

Change-Id: I973b7a5dae3fae2e62f8a0d1db1f3115d24bee8b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-11-07 06:24:52 +01:00
Topi Reinio b20779b192 Doc: Add a workaround for QUtf8StringView's missing docs
QUtf8StringView is a specialization of QBasicUtf8StringView but we only
want to document the former. Add a workaround when Q_CLANG_QDOC is
defined to rename the base type, so the documentation in the .qdoc file
is matched correctly.

Fixes: QTBUG-88030
Task-number: QTBUG-86295
Change-Id: Id6e3d6fd5c28603bebf30771b7a47c3f76ca709d
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-06 21:03:51 +00:00
Volker Hilsheimer 4a66fb9d76 Fix a bunch of qdoc warnings
Remove or fix references to removed APIs, and some qdoc syntax fixes.

Change-Id: I67d71062cd7a29f4eb74b02199b1482af5e59fc0
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-06 10:16:31 +01:00
Andrei Golubev 504972f838 Refine {QString, QBA}::reallocData() logic
Fixed misleading naming of "slowReallocatePath". It's no longer "slow",
it's downright dangerous now to reallocate under certain conditions

While at it, added extra assert to QArrayData::reallocateUnaligned()
and cleaned up that function a bit

Change-Id: I05921fb5058eb563997e66107566c87fb4ea5599
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-06 10:16:31 +01:00
Andrei Golubev a7b6f0391b Always use fast path in QString::append(QLatin1String)
This must be possible with a new set of changes and the way QString
reallocates

Task-number: QTBUG-86583
Change-Id: I513f51d7c6e984ae4e81fc344138687c791037c4
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-04 11:22:20 +01:00
Lars Knoll 1282c05cdc Rename AllocationPosition enum and its members
Use GrowsAt* and GrowthPosition as that is clearer.

Change-Id: I3c173797dec3620f508156efc0c51b4d2cd3e142
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-04 10:22:16 +00:00
Lars Knoll 9ee50a14b7 Move insert() operation into QArrayDataOps
This allows us to unify and simplify the code base between QList,
QString and QByteArray.

Change-Id: Idc8f360d78f508a68f38eb3ef0ed6e5d37f90574
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-04 11:21:50 +01:00
Lars Knoll b76fbb48fb Clean up out allocation handling
Get rid of the allocation options inside the flags
field of QArrayData, they are really a completely
separate thing.

Change-Id: I823750ab9e4ca85642a0bd0e471ee79c9cde43fb
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-04 11:21:46 +01:00
Lars Knoll 419eaa0679 Cleanup QArrayDataOps::reallocate() and related
Don't use QArrayData::GrowsForward/Backward anymore and replace
it with a simple 'bool grow'.

Change-Id: Ifddfef3ae860b11dda4c40854c71ef2aeb29df34
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-04 11:21:41 +01:00
Lars Knoll 32a703e277 Don't move data in QArrayDataOps::reallocate()
reallocate() should only ever call realloc(), and only be used to
create more space at the end of the data.

Change-Id: I2ac4dbc90d2afaa571bb620108d7984356712cb2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-04 11:21:37 +01:00
Lars Knoll b99271caa6 Avoid expensive iterator calculations in append()
Avoid moving data inside the array to create free
space at one end. This is a performance bottleneck,
as it required quite a lot of calculations for every
insert. Rather reallocate and grow in this case,
so we only need to do expensive work when we reallocate
the array.

Change-Id: Ifc955fbcf9967c3b66aa2600e0627aac15f0c917
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-04 11:21:22 +01:00
Andrei Golubev 7eed57511a QArrayDataPointer: redesign (and simplify) growth policy
It looks like we can drastically simplify the way QADP grows without
sacrificing much:
1. append-only use cases should have the same performance as before
2. prepend-only use cases should (with the help of other commits) get
   additional performance speedup
3. mid-insertion is harder to reason about, but it is either unchanged
   or benefits a bit as there's some free space at both ends now
4. mixed prepend/append cases are weird and would keep excess free
   space around but this is less critical and overall less used AFAIK

Now, QList would actually start to feel like a double-ended container
instead of "it's QVector but with faster prepend". This commit should
help close the performance gap between 6.0 and 5.15 as well

As a drawback, we will most likely have more space allocated in mixed
and mid-insert cases. This needs to be checked

Task-number: QTBUG-86583
Change-Id: I7c6ede896144920fe01862b9fe789c8fdfc11f80
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-04 11:21:12 +01:00
Allan Sandfeld Jensen 02c2a58cdf Avoid allocation on char16_t* comparisons
Compare as QStringView

Change-Id: I151d17ac20da30266776ca369ca8221017174f84
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-04 08:58:26 +01:00
Allan Sandfeld Jensen de2b221ce8 Add noexcept to slicing and indexing of QStringView
None of those paths should be able to cast.

Change-Id: I947f26c0aae134076499c9f80e910b0257d2bc62
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-04 05:16:48 +01:00
Andreas Buhr 0d3fb3784b Performance improvement for integer->QString conversion
The compiler can generate better code when the base is known
in integer to string conversion. This patch creates separate branches
for known bases and leaves generic code as a fallback.
Saved about 12ns per conversion of 12345678 in one measurement.

Task-number: QTBUG-87330
Change-Id: I44c9bb467cf211f7e617ed55104476062296bba6
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2020-10-31 13:38:45 +01:00
Topi Reinio 739e7dd191 Doc: Fix various documentation issues for Qt Core
Task-number: QTBUG-86295
Change-Id: I3bf7d4b1533d4fc81114d353b19beaf4ea9b93b2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-10-31 11:46:54 +01:00
Allan Sandfeld Jensen 5b76be7e2b Fix two missing conversions from in to qsizetype
Change-Id: I08ac9a0eb5dfb17f2b6cfaca9e3f3d7375c02bd4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-29 21:59:31 +01:00
Topi Reinio ecd86b1894 Doc: Fix documentation warnings for string classes
Task-number: QTBUG-86295
Change-Id: I13033635eecd495b32c98c7ec9318a0102b6f23e
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-10-29 18:29:22 +01:00
Topi Reinio 59644dc9df Doc: Fix documentation issues for QStringTokenizer
Add documentation-specific variants of lvalue/rvalue-this
overloads that QDoc manages to parse as separate entities.

Document begin() and cbegin() iterator getters in one go.

Task-number: QTBUG-86295
Change-Id: I2768dc6525bbf067e1597aa12e2e727f6d9fc35a
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-10-29 18:28:00 +01:00
Edward Welbourne 3a1bc4bad5 Purge deprecated language and country codes from QLocale
Requires subsequent re-numbering of the enum tables to eliminate gaps,
before locale data can be regenerated. However, it will work with the
present locale data, since it merely loses the means to use some names
for which the available data was just the name and code. This implies
a transient issue of recognising some codes for which there is no
actual enum member; but relevant code will work as before, finding
nothing but the code and its name. This shall be resolved by a coming
BiC change to resort the language, country and script codes, changing
the numbering (almost) completely.

[ChangeLog][QtCore][QLocale] Various obsolete language and country
codes have been removed. Some lacked locale data, others were obsolete
aliases. All have been deprecated in 5.15.

Task-number: QTBUG-84669
Change-Id: I45fc76a5f2f6c3b0ea3c1bb61e917da984183783
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-10-29 10:44:38 +00:00
Volker Hilsheimer ec4079160a Make QByteArray comparison operators hidden friends
Also for QByteArray::FromBase64Result, to reduce ADL noise.

Add explicit overload for comparison with nullptr to avoid
ambiguous overload errors with '0' comparisons.

Change-Id: I7ff9dbc90581707856c10cf7fb835175dfcdb55e
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2020-10-29 10:22:21 +01:00
Karsten Heimrich 173615222a Doc: Scrub QByteArray/QByteArrayView documentation
Fixes: QTBUG-86555
Change-Id: I3221e0de10e692ca767eeb69daa82da55b93e395
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-10-29 09:26:33 +01:00
Allan Sandfeld Jensen 375a8b735b Remove qstring_compat left-over
Was missed when it was removed

Change-Id: I36c33be9240fa5567a65488d6fd0e14b8c3ad8cd
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-28 15:57:34 +01:00
Mårten Nordheim 205629bb62 QByteArray: make (ap|pre)pend(const QByteArray &) consider reserved
Append was previously optimized for lhs being empty but it should've
also taken into account if space had been reserved.
Apply the same optimization to prepend while we're at it.

Change-Id: I5e5d33a3189b9ad88d45e858a2ac412cbc294f79
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-28 08:48:23 +02:00
Edward Welbourne 2c4874be40 Deprecate old aliases for two countries and several languages
[ChangeLog][QtCore][QLocale] Deprecated several Language and Country
aliases, ready for removal in Qt 6.0, in favor of their newer names.

Task-number: QTBUG-84669
Pick-to: 5.15 5.15.2
Change-Id: Iebaa0a5a77bfa12f7014de53fab4a25b5f1cc92c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-28 06:26:01 +01:00
Edward Welbourne 2575a8ced3 Deprecate QLocale::Language entries that no locale data relates to
These are languages for which CLDR does not even recognize the claimed
language code (three-letter codes except for bh = Bihari, which might
be an old name for bho = Bhojpuri, which CLDR does give, but provides
no locale data using it).

[ChangeLog][QtCore][QLocale::Language] Many obsolete language names
are now deprecated in preparation for removal at Qt 6.0. No data has
been available for any locale using these languages since CLDR v29 (at
least; Qt now uses v37).

Task-number: QTBUG-84669
Pick-to: 5.15 5.15.2
Change-Id: I2bf2d49211ade7cc511277f35fb1a247e7048b31
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-28 06:25:47 +01:00
Allan Sandfeld Jensen c61f90fbe6 Remove left over friend declaration
Was not removed when it was inlined above it.

Change-Id: Ie81bd9273108920031b235bdf1f13439711e5fec
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-10-27 16:43:12 +01:00
Karsten Heimrich 626a9b66f2 Doc: Add notes on how to use View classes in Qt6
Task-number: QTBUG-87168
Change-Id: I631937ebaf7cfa3ed54c6c8a3641693fda910b36
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-10-27 12:49:40 +01:00
Allan Sandfeld Jensen 5cb150be46 Make remaining String binary comparisons hidden friends
Also forced the introduction of explicit comparisons with
char16_t* and std::nullptr_t.

Change-Id: I8e32c14a1d3aeec234ee070b9fefc6af06db0fda
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-10-26 20:10:48 +01:00
Edward Welbourne cb23d50f38 Update CLDR to v37, adding Nigerian Pidgin as a new language
Routine update by running scripts, ignoring clang-format's extensive
grumbles. Added notes to util/locale_database/'s README, on the need
for that, and enumdata.py, on when to add entries. As usual, several
new locales are also added, for existing languages, territories and
scripts.

[ChangeLog][QtCore][QLocale] Updated to new version of CLDR (the
Unicode Consortium's Common Locale Data Repository) v37.

Fixes: QTBUG-84669
Pick-to: 5.15
Change-Id: Ib76848bf4bd1219180faf46820077e8d8049a4e3
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-10-26 15:28:59 +02:00
Allan Sandfeld Jensen a6b7d6937b Make QString/QLatin1String comparisons hidden friends
Leaving most member comparisons untouched though.

Change-Id: I8267f85927ec8315d511ac38757bc8d8aaaa5672
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-10-26 14:07:54 +01:00
Robert Loehning 2096400d6e Revert changes in strto(u)ll.c to avoid integer overflows
Found in oss-fuzz issue 26045.

Pick-to: 5.12 5.15
Change-Id: Id9eac1b4f67ad9bbe2d92dd69cd03338a6ced74e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-26 11:21:33 +02:00
David Skoland dc44e4a35e Use metaType instead of type in qlocale_mac
QVariant's type() has been deprecated in favor of metaType()

Change-Id: Ibb060bde5e946849fc1c1a67a48ff63beb1d8ffe
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-26 09:50:11 +01:00
Giuseppe D'Angelo 45cf0cf513 QList: make (last)IndexOf and contains function templates
There's no reason why they shouldn't be; one might want to do a
lookup passing an object which is comparable with the list's value
type (e.g. search with a QByteArrayView needle into a QByteArrayList
haystack). Insofar we've had to add overloads to QListSpecialMethods
for all these cases, which clearly doesn't scale and creates
top-tier and low-tier lists.

There is one downside, namely, calling QList<A>::indexOf(B) for a B
for which there isn't an operator==(A, B) but only a conversion
towards A.  Before, B was converted only once (at call site), now
it's converted at every call of operator==.
In general: such types are broken and should be fixed on their own.
However let's avoid a possible regression in client code, so I've
left the QString overloads in QStringList in.

To get there: centralize the implementation of those methods in a
empty base class, which gets then inherited by QListSpecialMethods,
which is inherited by QList. This is there are still special methods
that may want to overload contains, e.g. QStringList which also
passes a case sensitivity).

The only breakages comes from code that was already broken, for
instance mixing signed and unsigned types, and the beauty of this is
that now we *detect* that instead of silently ignoring.

QVLA and other QList methods will be tackled in future commits.

[ChangeLog][QtCore][QList] The indexOf, lastIndexOf and contains
methods now take an object of any datatype -- and not just the
list's own value type. This allows for heterogenous lookup in
QLists.

Change-Id: Ib34812217eb2b0f926fad1fc195b33758196941c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-23 16:37:14 +02:00
Lars Knoll 11bad61096 Deprecate QVariant::Type
It's been obsolete for a long time already. Make sure
the compiler now warns about it and remove all remaining
uses in qtbase.

Change-Id: I0ff80311184dba52d2ba5f4e2fabe0d47fdc59d7
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2020-10-23 09:58:57 +02:00
Volker Hilsheimer a6327d7305 Fix documentation for hidden friend operators
At least for qdoc, hidden friends are class members.

Change-Id: I6eaa21565937cd49c0905ee47b8b82b0c1765bc1
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-10-23 00:58:11 +02:00
Allan Sandfeld Jensen b38d5fd8e4 Make QLatin1Char and QChar comparisons hidden friends
Reduces the ADL noise on missing comparisons errors.

Change-Id: I16a17d73504917feb25a94053bb54db0b083118b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-10-22 13:54:46 +02:00
Edward Welbourne e69b81101c Fix locale look-up when language is unspecified
Looking up a locale with unspecified language got the C locale, due to
taking a short-cut that would make sense if no locale were found for a
specified language. Stop assuming the language was specified.

Task-number: QTBUG-74287
Pick-to: 5.15 5.12
Change-Id: I8b3c232da584fb187ebb6c190729c377d0083808
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-10-21 17:56:48 +02:00
Edward Welbourne 4f9ed76709 QLocale: do the inlining in the class body to save repetition
It also makes it easier to find the definition when looking at the declaration.

Change-Id: Idae18d3881f3cf8ba6c6c7e48201ec925815013e
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-10-19 17:46:00 +02:00
Edward Welbourne 488584c944 Refine QLocale constructor documentation
Clarify that the "minus sign" is a plain ASCII U+002D dash, not U+2212
minus sign; and, for symmetry, that the underscore is U+005F.

Change-Id: I7250959d36e56f960dac24a739a1a8826a6bc578
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-10-19 17:45:39 +02:00
Edward Welbourne 55e16b25f5 Fix QLocale's findLocaleDataById(): skip likely sub-tag look-up
It was always called in pairs, first with likely sub-tags added, then
with the base that started from. So doing a likely sub-tag lookup
inside the function was redundant for the former while making the
latter redundant - and it's needed.

Task-number: QTBUG-84669
Pick-to: 5.15
Change-Id: I18bf1d4976a51d9436efd20d1a84a36cfc60f618
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-19 17:45:12 +02:00
Giuseppe D'Angelo aee81c00cf Revert "QRegularExpression: add move constructor(s)"
The QRE classes are not ready for move construction. They would
need to deal with the possibility of a null-dpointer, and they
currently don't; this clashes with the policy of having
moved-from classes in valid-but-unspecified state.

This reverts commit 733ab10961.

Change-Id: I36720dc9d0bf754a980eba373e37abf725cea174
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-19 00:47:19 +02:00
Giuseppe D'Angelo 79917d7965 QRegularExpression: port to QESDP
For QRegularExpressionMatchIterator there is actually one code
path that modifies the object itself. Avoid spurious calls to
detach() in there by making the detach explicit, and streamline
the rest of the code around it.

QRegularExpressionMatch only has a const API so it "doesn't care",
but port it for consistency.

Change-Id: I26881b3af9ae75082dd39462115869b1a9ee1339
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-19 00:47:19 +02:00
Giuseppe D'Angelo 2a1b44f57b Remove QByteArrayList_indexOf
It was used as exported symbol for the implementation of
QByteArrayList::indexOf. Since then, the implementation has
been changed, and this code is unused.

Change-Id: I468d05507b6b520cf5bfa4bc567a3d67c43b9a32
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-10-18 18:38:02 +02:00
Volker Hilsheimer 1d49dad22c Fix warning, make sure temporary is moved into return value
Seen on clang 12; might be a compiler bug, but doesn't hurt
either.

Change-Id: I4aba8406c99951106e57fe9e61c688e649963cd6
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-16 13:53:03 +02:00
Allan Sandfeld Jensen ada6e4fbe9 Fix some bad uses of QSharedPointerData::operator T*
Avoid detaching where possible

Change-Id: I438d3e66689aeef05951af86a48af2a6910da7c2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2020-10-16 09:48:09 +02:00
Giuseppe D'Angelo a095a999a3 Long live Q_IMPLICIT!
C++20 will give us explicit(bool). While we can't use it just yet
in its full potential, we can introduce a macro to start marking
our implicit conversions (aka `explicit(false)`), removing the need
for /* implicit */-like comments.

Port a few usages to it.

Change-Id: I336d5e4c8d51d8329627900d1059e59062c5cafd
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-14 20:58:51 +02:00
Edward Welbourne e2628b5f57 Minor refinements in QLocale
A loop's condition could be simplified.
Use std::size() rather than sizeof()/sizeof().
Clarify two comments.

Change-Id: Ideba2e0e1ba9c9656297aefb0a375cc122ee8626
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-12 16:54:01 +02:00
Edward Welbourne 57455543c5 Eliminate QLocaleId::fromIds() in favor of {...} construction
It's a value type, we don't need a pseudo-constructor to bypass constructors.

Change-Id: Ic4774c82e43ab7e2c54ac743026ce087e34c150f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-10-12 16:53:45 +02:00
Edward Welbourne 8b0e068847 Mark QLocale's Language, Country and Script enums as ushort
The code pervasively presumes their values can be held in a ushort, so
make sure the compiler knows we expect that to work (and doesn't
complain about narrowing when we do convert them to ushort).

Change-Id: Idde7be6cceee8a6dae333c5b1d5a0120fec32e4a
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-10-12 16:53:40 +02:00
Andrei Golubev 6c7ed4c013 Make QADP capacity functions use qsizetype instead of size_t
Change types returned and accepted by capacity-related QArrayDataPointer
functions to qsizetype:

1) QArrayData (underlying d-ptr) works with qsizetype
2) QArrayDataPointer::size is of type qsizetype
3) All higher level classes that use QADP (e.g. containers)
   cast capacity to qsizetype in their methods

Additionally, fixed newly appeared warnings through qtbase

Change-Id: I899408decfbf2ce9d527be7e8b7f6382875148fc
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-08 16:52:28 +02:00
Lars Knoll ae8ccbab45 Smaller code cleanup
remove the static qt_compare_string methods and inline the code
into the public ones.

Change-Id: Id6f4c85a21df63875fd9816a368358f3f750617b
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
2020-10-07 14:57:56 +02:00
Lars Knoll 8a7b74f6e7 Optimize equality operators for string classes
Using compare() for those operators is not a good idea, as we can't
shortcut comparisons if the string sizes are different. This alone
made our HTML parser in QtGui around 15% slower.

Don't go through QAnyStringView to implement compare() for
QUtf8StringView, use QtPrivate::compareStrings() directly instead.

Task-number: QTBUG-86354
Change-Id: I04869c29c9918161990dc1baf8e943b3a264ff3c
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
2020-10-07 14:57:51 +02:00
Lars Knoll fa8d021fa6 Convert a couple of APIs to use views
Try to get rid of APIs that use raw 'const {char, QChar} *, length'
pairs. Instead, use QByteArrayView or QStringView.

As QStringConverter is a new class, simply change the API to what we'd like
to have. Also adjust hidden API in QStringBuilder and friends.

Change-Id: I897d47f63a7b965f5574a1e51da64147f9e981f6
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-06 11:16:36 +02:00
Giuseppe D'Angelo 733ab10961 QRegularExpression: add move constructor(s)
Change-Id: I599e4b7338172de5936b191f5e16383c1c31104c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-06 09:15:28 +02:00
Karsten Heimrich bd225ef95e Make QAnyStringView comparison operators hidden friends
Also add the very same operators to the QBasicUtf8StringView
class to overcome the compiler issues seen on gcc.

Fixes: QTBUG-86481
Change-Id: I12484455ebd3b7b38d4ad67c38977d76f9b3ddfa
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-10-06 06:31:18 +02:00
Lars Knoll 6abdbb65e5 Change QString::fromLatin1 and friends to use QByteArrayView
Also adjust the QString constructor from QByteArray to ignore
\0 characters in the string (and not terminate conversion there).

[ChangeLog][QtCore][QString] Constructing a QString from a QByteArray
will not stop at intermediate '\0' (null) characters in the string as
in Qt 5, but will convert all characters in the byte array.

Change-Id: I1f6bfefe76dfa9072b165903fec7aa4af1abd882
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-05 10:12:04 +02:00
Giuseppe D'Angelo 889d40ebe2 Centralize the implementation of move assignment operators
At the moment we have two main strategies for dealing with move
assignment in Qt:

1) move-and-swap, used by "containers" (in the broad sense): containers,
but also smart pointers and similar classes that can hold user-defined
types;

2) pure swap, used by containers that hold only memory (e.g. QString,
QByteArray, ...) as well as most implicitly shared datatypes.

Given the fact that a move assignment operator's code is just
boilerplate (whether it's move-and-swap or pure swap), provide two
_strictly internal_ macros to help write them, and apply the macros
across corelib and gui, porting away from the hand-rolled
implementations.

The rule of thumb when porting to the new macros is:

* Try to stick to the existing code behavior, unless broken

* if changing, then follow this checklist:

  * if the class does not have a move constructor => pure swap
    (but consider ADDING a move constructor, if possible!)

  * if the class does have a move constructor, try to follow the
     criteria above, namely:

    * if the class holds only memory, pure swap;

    * if the class may hold anything else but memory (file handles,
      etc.), then move and swap.

Noteworthy details:

* some operators planned to be removed in Qt 6 were not ported;

* as drive-by, some move constructors were simplified to be using
qExchange(); others were outright broken and got fixed;

* some contained some more interesting code and were not touched.

Change-Id: Idaab3489247dcbabb6df3fa1e5286b69e1d372e9
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2020-10-03 11:47:17 +02:00
Allan Sandfeld Jensen 93dad2bf91 Switch Q_DECL_DEPRECATED to use C++14 [[deprecated]]
As a C++ attribute it must be on the beginning of the line or after
the function name however. And for friend declarations can only
be on the definition.

Change-Id: I456884428f36e1f1c621089c7b1addee13ada0fe
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-10-03 00:12:05 +02:00
Nicolas Fella 2d8d8ab8c2 Reference proper SplitBehaviour enum in docs
QString::SkipEmptyParts is Qt::SkipEmptyParts now.

Pick-to: 5.15
Change-Id: Ie351bbe9d2350e771f821a9f0bc9f581be5b0022
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2020-10-02 08:05:42 +02:00
Giuseppe D'Angelo 7ee682a1dd QREMatchIterator: add support for range-based for
Add begin()/end() on QRegularExpressionMatchIterator, making
iterators over an iterator (like directory_iterator).

[ChangeLog][QtCore][QRegularExpression] The iterator object
(QRegularExpressionMatchIterator) returned by a global match
is now usable in a range-based for loop.

Change-Id: If3d31bd2e84e7d1fb626a0b3d2745914dff03e39
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-09-30 21:39:36 +02:00
Xie Chuan 9af32d7019 Eliminate compilation warnings
When converting a const variable to a non-const variable, use the conversion operator 

Change-Id: Ib1c8f3defbf9ccce1af5c90e7e9c508bc8c039d0
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-09-30 14:55:32 +08:00
Allan Sandfeld Jensen 0c07f0cab8 Fix ubsan errors
Nullptr memcpy, memmove and 36 bit shift of integer.

Change-Id: Ib79c8a98a710d021fc93b6aaec6c0ba9bde5f91e
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-09-30 00:10:40 +02:00
Oswald Buddenhagen b9290cb6e5 make {QString,QByteArray}::squeeze() work without prior reserve()
string-shortening operations never throw away capacity (unless
detaching), so it may very much make sense to squeeze a string whose
capacity was not explicitly reserved.

this does in fact restore the behavior prior to commit a3aa2fcf, which
changed it presumably only due to not considering the case above.

Change-Id: I0d7919a1724dd3ecc6cd4cbd7236eb52067f0a1c
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
2020-09-28 22:08:40 +02:00
Volker Hilsheimer de52ad0a0f Fix documentation for QStringList
Explicitly declare members in qdoc runs that are otherwise inherited
from QListSpecialMethods.

Note: Due to a bug in syncqt, those members need to be added in a
separate #ifdef Q_QDOC section.

Change-Id: I96850f3665359de4f97be1b8d10f8052ba252fab
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-09-28 08:16:59 +02:00
Volker Hilsheimer 7542638e0c Fix qdoc warnings from Q(Latin1)String
arg() is now a variadic template, already documented in
qstringview.cpp, so document that and remove the documentation for
the removed overloads.

QString has no member subString, so remove that as well.

Fix return type in QLatin1String member function documentation.

Change-Id: I32e7bcba770bcee77ae4a07c06ac61228ffa93a6
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-09-28 07:07:56 +02:00
Volker Hilsheimer 0ebe1708e2 Fix qdoc warnings in QStringView
Fix prototype of template member function, and fix see-also reference.

Change-Id: Ibb39925063dfeb3fd511f47a1606a0b243d4c2ef
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2020-09-26 14:35:48 +02:00
Volker Hilsheimer aa62ee3f9a Fix qdoc warning: QTextBoundaryFinder
Change-Id: Iec38f33519f05b046d6995d6f7eef1557fd5f209
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2020-09-26 14:35:40 +02:00
Volker Hilsheimer 756104d5e1 Fix some qdoc warnings for QString/View/Tokenizer
Use correct member function prototype, which requires the template declaration.
Remove see-alsos that don't exist.
Document parameters for qTokenize.

Still lots of warnings from QStringTokenizer, due to the inheritance structure
of that template class and the declarations of nested types in undocumented
base classes.

Also, qdoc doesn't seem to recognize training this-lvalue/this-rvalue
declarations for overloads, and considers the second toContainer documentations
to override the first.

Change-Id: Iadf967d3328ddda52b6f66786836853bddeda79b
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2020-09-26 14:35:29 +02:00
Volker Hilsheimer c2be134d15 Fix some qdoc warnings for QAnyStringView
Change-Id: I62f05fea897effff22e5031f02661c01b2e3c45f
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2020-09-26 14:35:21 +02:00
Julien Schueller cc6677a6c7 Fix -Wmaybe-uninitialized warnings
Fixes few of these, for example:
qurlrecode.cpp:308:19: warning: 'ucs4' may be used uninitialized in this function [-Wmaybe-uninitialized]
*output++ = ucs4;

Change-Id: Iaf09fa854102c76b51e6e18556c5ef20212e57cf
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-09-26 11:40:21 +02:00
Allan Sandfeld Jensen d3643d9690 Use c++20 when available at compile time
Also std::end is constexpr where std::next sometimes isn't always with
sanitizers active.

Change-Id: Ibe4c11eb4945fb286247e841b6a7f6cc3ff1eaa6
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2020-09-25 08:18:03 +02:00
Allan Sandfeld Jensen c2be9180b7 Replace Q_REQUIRED_RESULT with [[nodiscard]]
It was already used many places directly making the code inconsistent.

Change-Id: I3b14bc6c333640fb3ba33c71eba97e78c973e44b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-25 07:10:45 +02:00
Edward Welbourne 691762e0e3 QStringBuilder: use qsizetype for size() methods
Prompted by a ### Qt 6 comment on one of them.

Task-number: QTBUG-85700
Change-Id: Id78a05a7bf77ba04207e0f5bc2a316984b13c9ae
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-23 16:59:08 +02:00
Volker Hilsheimer 3299476791 Fix qdoc warnings for QByteArrayView
Provide simplified declaration of fromArray for qdoc runs;  fix a small typo.

Change-Id: I8c7300a014270e8ab7f18afd94ee66af4734e0c7
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-09-23 16:59:08 +02:00
Volker Hilsheimer c1ade7f401 Fix qdoc warnings from removed enum values
Change-Id: Icd7a941ed1d8c7a4674482ace4b280a15e592c1a
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-09-23 16:59:07 +02:00
Volker Hilsheimer 50e33159f1 Fix some qdoc warnings from QByteArray
A snippet bug, and removed overloads.

Change-Id: I82aee3627ba1a4e75e392b28d8ec72d470c395db
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-09-23 16:59:07 +02:00
Edward Welbourne 270c3dced7 Remove ### comment on QT5_NULL_STRINGS
Commented recommended turning it off by default in Qt 6, but Lars
changed his mind once he saw how much broken on doing that.

Task-number: QTBUG-85700
Change-Id: I1aeec408400978821e0e64d082dbb73cf982e54a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-23 16:59:06 +02:00
Volker Hilsheimer 6db7aceb43 Fix some qdoc warnings: QRegularExpression parameters
Change-Id: Ib4d33327c6c059e11d8615bac0f72d9f028d5860
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2020-09-22 22:49:22 +02:00
Friedemann Kleint 631eed68d0 Fix some MSVC conversion warnings
Change-Id: Ib2c1fdb7b84f89201136438362ab5962126ec929
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2020-09-22 09:51:15 +02:00
Mårten Nordheim 107ff4c1d6 Q(Any|Utf8)StringView: move array size deduction feature to fromArray
The constructor taking an array literal will now stop at the first
null-terminator encountered.

And fromArray is introduced which only supports array literals.
Constructs a view of the full size. Explicit so it shouldn't be
surprising.

Change-Id: I1497c33a5c12453a95e87c990abe6335b2817081
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-18 23:34:52 +02:00
Mårten Nordheim bbe7570ddc QByteArrayView: move array size deduction feature to fromArray
1. Make the ctor unable to construct a QByteArrayView from
array literals other than 'char'.
    With the new behavior it would either be (very likely) unintended to
    pass e.g. a std::byte array to the ctor. And it would be confusing
    because you would get different sizes based on signed-ness.
2. Introduce fromArray
    Only supports array literals. Constructs a view of the full size.
    Explicit so it shouldn't be surprising.

Change-Id: Ifdb55eb21057dfe7053b2561bd81e2c9825e9bc6
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2020-09-18 23:34:49 +02:00
Andrei Golubev 8716413afc Update QByteArray documentation relevant to prepend optimization
[ChangeLog][QtCore][QByteArray] QByteArray is a prepend optimized
container similar to QList.

Task-number: QTBUG-84320
Change-Id: I45ed1cb75414930f5998be58bfcfe343b1790331
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-09-18 10:02:04 +02:00
Andrei Golubev ecf4f8fc64 Update QString documentation relevant to prepend optimization
[ChangeLog][QtCore][QString] QString is a prepend optimized
container similar to QList.

Task-number: QTBUG-84320
Change-Id: Id035aac859a6f404e389f2eeaf20f9eee5bff20c
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-09-15 15:55:46 +02:00
Allan Sandfeld Jensen aaa7ab5222 Only include <bit> if using post C++17
Otherwise we hit an #error statement in MSVC standard library.

Change-Id: Ib029edf0be8513a80f2640fd9ca75541615a0448
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2020-09-15 11:32:09 +02:00
Lars Knoll cb78972e37 Remove deprecated API
And replace it's few remaining usages

Change-Id: I2dfbbaa5259acfece028606bef1e872c5692f9fe
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-09-15 08:12:39 +02:00
Edward Welbourne 533df067e9 Purge Q_{STDLIB,COMPILER}_UNICODE_STRINGS
These were now always defined, hence redundant.
Leave the #define in place so that we can verify we actually do always
define it, in a #else of an existing #if check on it.

Change-Id: Iea4c3dbc8f9982268bcf81da5ef17fe2ebf5c462
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-09-14 09:47:51 +02:00
Andrei Golubev 1ca3af0a71 QString: use QCommonArrayOps::erase instead of custom logic
With 6e8985e357 merged we can now use
generic erase logic provided by array operations. This commit aligns
QString with QList/QByteArray

Task-number: QTBUG-84320
Change-Id: I83e9349e2461afd98737df25613aa2d0fd817a71
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-09-14 09:47:50 +02:00
Allan Sandfeld Jensen 6a37ca39ec Use universal C++20 bit operations when available
Avoids using compiler builtins, and can in future replace them.

Change-Id: I3f0afe7d28b6ba05bcd1c1132b44a8db7b182d8a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-09-13 18:26:49 +02:00
Lars Knoll 652bd1efca Make QStringList an alias to QList<QString>
Fix our API, so that QStringList and QList<QString> are the
same thing.

This required a bit of refactoring in QList and moving the
indexOf(), lastIndexOf() and contains() method into
QListSpecialMethods. In addition, we need to ensure that
the QStringList(const QString&) constructor is still available
for compatibility with Qt 5.

Once those two are done, all methods in QStringList can be moved
into QListSpecialMethods<QString>.

Change-Id: Ib8afbf5b6d9df4d0d47051252233506f62335fa3
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-09-12 23:37:15 +02:00
Andrei Golubev 781ecbfc6f QString/QBA: change realloc*Data signatures to use qsizetype
Changed reallocData, reallocGrowData signatures to use qsizetype
instead of size_t

Change-Id: Iebe7def5430d3d3f4660e19cb6c12612543c5abc
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-09-10 17:31:31 +02:00
Andrei Golubev ec7e680c50 Remove '\0' space reservation logic in QString
Changed QString to use implicit element reserved by QArrayData

Task-number: QTBUG-84320
Change-Id: If517500b3f0e71bb8d2989c64815a634aa8dd554
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-10 17:31:23 +02:00
Andrei Golubev 04d78df344 Remove '\0' space reservation logic in QByteArray
Changed QByteArray to use implicit element reserved by QArrayData

Task-number: QTBUG-84320
Change-Id: I2a0091c814a47a5c052da7a83d10cb641834c7bd
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-09-10 17:31:19 +02:00
Friedemann Kleint bbec7aaf3a Fix a number of MSVC integer conversion warnings
Mostly related to qstrlen().

Change-Id: I69e2052c83766e4fc466ed398d0d0eac011a77ec
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2020-09-10 03:16:34 +02:00
Wang Wei e18cb8b535 Initialize "uc1" variable
remove warning for -Wmaybe-uninitialized.

Change-Id: Ib17200eb86ee443875a9059b62762b2dc2100634
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-08 14:02:16 +08:00
Andrei Golubev 08c70ca0cc QList/QString/QByteArray: no prepend optimized allocation when empty
Scoped prepend optimized allocation to only work when prepending into
a non-empty container. Otherwise, even appends would be considered
prepends since d.size == 0 when container is empty

This is, of course, not good for prepend cases but we prefer appends
over prepends. My proposal is to figure out what's the best strategy
based on use cases and performance measurements. For now, let's just
make sure appends are not additionally pessimized

Anyhow, this is an implementation detail and should not be considered
behavior change (at least not the one that is user noticeable)

Task-number: QTBUG-84320
Change-Id: Ibed616a2afa9bc24f78252f15a617bf92e2c6ea3
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-07 15:50:03 +02:00
Lars Knoll 0ae5b8af9c Clean up QTextBoundaryFinder and qunicodetools
Make QTBF ready for Qt6 by using qsizetype in the API and use
QStringView where it makes sense.

Change the exported API of qunicodetools to use QStringView as
well and use char16_t internally.

Change-Id: I853537bcabf40546a8e60fdf2ee7d751bc371761
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-09-07 09:09:55 +02:00
Lars Knoll fae4f80ecc Make QStringMatcher ready for Qt 6
Use qsizetype for string indices everywhere.
Clean up the data structures and remove some Qt 3 or Qt 4
left-overs. This reduces the size of the QStringMatcher from
1056 to 288 bytes.

Change-Id: Icc351da8e3aad10a6c940196f52c39f8d2f5bf80
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2020-09-07 09:09:55 +02:00
Edward Welbourne 3d7d8346dd Remove some comments that are no longer relevant
Task-number: QTBUG-85700
Change-Id: I5ce368e8edca2b9483a0f0ef34bc9eb6b4e44574
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-09-05 02:08:29 +02:00
Lars Knoll 95daeb2407 Add QByteArrayView overloads for push_back and push_front
Change-Id: If70f3ac6764958d92dcbab44432b4f4994d20405
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-09-03 14:15:53 +02:00
Lars Knoll 8897aa071a Clean up the QByteArray API and implementation
Add overloads using a QByteArrayView where it makes sense, and
call those inline from the other overloads. Remove overloads
that are not required anymore (due to implicit conversion of
a const char * to a QByteArrayView).

Guard all implementations against passing this object to them.

Change-Id: I930156f8b05ce72c32cb8201c70513f2e6e19d3e
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-09-03 14:15:52 +02:00
Mårten Nordheim 8eef75f0b5 QList/QByteArray/QString: Base GrowsBackwards heuristic on old size
If you grow from 10 to 100 characters then even if the point of
insertion was the end then it will get the GrowsBackwards option on
realloc. By basing it on the oldSize the intention of the position to
insert at is better clarified.

Change-Id: Ia73f4902e8356d94709556de5704cbfa0e1a3a56
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-03 14:15:32 +02:00
Andrei Golubev 27fed69d0a QString/QList: disregard space at front during reserve()
Aligned QString, QList to the new agreed upon behavior

Aligned QList::resize() along the way to be consistent with QString/QBA

Task-number: QTBUG-84320
Change-Id: Ie9d7b4b6ebe54bd373af78d92906144b383bbfe2
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-09-02 23:10:25 +02:00
Mårten Nordheim b98b7de0da QByteArray: Disregard space at front during ::reserve(...)
Traditionally when calling reserve it's because you expect to append
up to X amount of bytes. We should keep that behavior the same.

With another patch still in the works current behavior caused an issue
with QStringBuilder in QNAM, as mirrored in the testcase attached.

Change-Id: I9792a8f158fc9235e3de48ac8b06ac2c10e7f3dc
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-09-02 23:10:21 +02:00
Marc Mutz 2c9529e158 Long live Q{Any,Utf8}StringView!
We need to add these two classes at the same time, because
QAnyStringView makes all QUtf8StringView relational operators moot. We
might want to add some later, esp. for UTF-8/UTf-8 comparisons, to
avoid the pessimization that we can't early-out on size() mismatch in
QAnyStringView equality operators, but that's an optimization, not a
correctness issue, and can be fixed in a source-compatible way even
after Qt 6 is released.

To deal with the char8_t problem in C++20, make QUtf8StringView a
class template out of which two UTF-8 views can be instantiated: the
Qt 7 version, which depends on C++20 char8_t as value_type, and the Qt
6 version where value_type is a char. Use inline namespaces to map the
QUtf8StringView identifier to one or the other, depending on the C++
version used to compile the user code. The inline namespace names must
needs be a bit ugly, as their inline'ness depends on __cpp_char8_t. If
we simply used q_v1/q_v2 we'd be blocking these names for Qt inline
namespaces forever, because it's likely that inline'ness of other
users of inline namespaces in Qt depends on things other than
__cpp_char8_t. While inline'ness of namespaces is, theoretically
speaking, a compile-time-only property, at least Clang warns about
mixed use of inline on a given namespace, so we need to bite the
bullet here. This is also the reason for the QT_BEGIN_..._NAMESPACE
macros: GCC is ok with the first declaration making a namespace
inline, while Clang warns upon re-opening an inline namespace as a
non-inline one.

[ChangeLog][QtCore][QUtf8StringView] New class.

[ChangeLog][QtCore][QAnyStringView] New class.

Change-Id: Ia7179760fca0e0b67d52f5accb0a62e389b17913
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-31 22:57:49 +02:00
Lars Knoll 4a1567ab12 Inline some methods that only forward to another overload
Change-Id: Iba74962d20c00de8996834f0a003f38c2d2cc3e8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-29 21:00:51 +02:00
Edward Welbourne 78cf89c07d Use checked string iteration in case conversions
The Unicode table code can only be safely called on valid code-points.
So code that calls it must only pass it valid Unicode data. The string
iterator's Unchecked Unchecked methods only provide this guarantee
when the string being iterated is guaranteed to be valid UTF-16; while
client code should only use QString, QStringView and friends on valid
UTF-16 data, we have no way to be sure they have respected that.

So take the few extra cycles to actually check validity in the course
of iterating strings, when the resulting code-points are to be passed
to the Unicode table look-ups. Add tests that case mapping doesn't
access Unicode tables out of range (it'll trigger the new assertion).
Added some comments to qchar.h that helped me understand surrogates.

Change-Id: Iec2c3106bf1a875bdaa1d622f6cf94d7007e281e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-29 18:15:27 +02:00
Andrei Golubev a2b1b0292d Prepend optimize QString
Added prepend optimization to QString

Task-number: QTBUG-84320
Change-Id: Iaa8df790a10c56ecceb06f7143718fb94874ce76
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-29 14:20:06 +02:00
Andrei Golubev 4b9ec00534 Support GrowsBackwards in QByteArray
Updated main QByteArray operations to support prepend-optimization path

There are still many things to consider especially algorithms that use
QByteArray::data() or do raw memory operations (e.g. memcpy) regardless
of the underlying memory layout, which was somewhat valid before but
will likely break now given free space > 0 at the beginning of the byte
array memory. Looked at existing cases in the scope of QByteArray, they
seem to be OK. Hopefully, CI would find missed violations if any

Task-number: QTBUG-84320
Change-Id: I7990cda165b8e77a397e41df4e145468e7a86be0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-29 14:20:06 +02:00
Edward Welbourne 1aa412987f Remove QUnicodeTools::DefaultOptionsCompat
Used in only one place, declared in a private header with a comment
saying to remove it. All callers of the one function that had it as
default parameter value are passing a value for the parameter.

Task-number: QTBUG-85700
Change-Id: Ic72e4df730740a4023b0a43be6bf7acf33a3166b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-28 21:29:45 +02:00
Edward Welbourne 429985b53a Convert QStringView::toWCharArray() to return qsizetype
As requested in a ### Qt6 comment.

Task-number: QTBUG-85700
Change-Id: I28a02bf49f4a6455a21a6032179318ce2915b8ca
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-28 21:29:29 +02:00
Edward Welbourne 34a095848d Inline QString's conversions to integral types, except long long ones
As requested by a ### Qt6 comment.

Task-number: QTBUG-85700
Change-Id: I7c2813c0d8fbc38bcd2f7229de3a9d8e1b8b1f03
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-28 21:29:18 +02:00
Edward Welbourne 0d11a92af9 QLatin1String: finish up the qsizetype conversion
Correct one QString::lastIndexOf() whose return and parameter had been
changed, but body and comment hadn't.

Task-number: QTBUG-85700
Change-Id: Icbcd049f72346f0e696e6b22fe0893f6de5a2646
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-28 21:29:06 +02:00
Edward Welbourne 69014b6cd6 Use qsizetype for the size of QByteArray's raw data methods
A ### comment said to use int in setRawData(), which took a uint; but
the underlying QArrayDataPointer::fromRawData() takes a qsizetype, so
propagate that all the way.

Change-Id: Iba1f8d020c509b33f5c202c22c6a9bf85b3bab7f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-28 21:28:47 +02:00
Edward Welbourne e7db401b48 Use char32_t for QLocaleData::zeroUcs() and friends
Also catch some stray ushort that should be char16_t by now, use
unicode character values for some constants and rename a UCS2 variable
to not claim it's UCS4.

Change-Id: I374b791947f5c965eaa22ad5b16060b475081c9d
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-28 21:27:40 +02:00
Edward Welbourne 2d6705575c Don't second-guess strcoll()
It's defective on Android, but no worse so than the fall-back we were
using; and we can't remember why we had that fall-back anyway.

Task-number: QTBUG-63518
Change-Id: I28e9b5c7cc64963c9e3941eb1bad85aced280a9b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-28 21:27:24 +02:00
Marcel Krems 257285553f Use qsizetype in QRegularExpression
PCRE2 already uses size_t which we can now make full use of.

Change-Id: Icb5efd5c6ef27f2e31a9780bf62f5671ddc603cd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-28 02:22:10 +02:00
Volker Hilsheimer 062d283184 macOS: fix standaloneMonthName implementation for system locale
macOS has specific formatters for the standalone month names, so use
them.

Change-Id: Ic4ad547c7d1c29d71c85f60301acd5a5f0f263d2
Fixes: QTBUG-86191
Pick-to: 5.15
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Evgeniy Dushistov <dushistov@mail.ru>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2020-08-27 18:58:21 +02:00
Lars Knoll 3964ece5a5 Pass QByteArrayView by value
Change-Id: I65df03e7781bac63d98b8d3b59568841601d8f25
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-08-27 18:58:21 +02:00
Lars Knoll 03a0937754 Inline the equality operator
There's no reason to have this out of line.

Change-Id: I52aa2ba941f9c81c2194865b156dbc0a2104363b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-27 18:58:21 +02:00
Lars Knoll 50661a9558 Change QByteArray to handle large arrays
Use qsizetype throughout.

Change-Id: I787af7fcfa17e1be87decb64c41c609cc24be117
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-27 18:58:20 +02:00
Sona Kurazyan 7d35e31efb Add back QByteArray's relational operators taking QString
QString still has the overloads of relational operators taking
QByteArray. Add back QByteArray's relational operators taking
QString for symmetry. See also the comments of
d7ccd8cb45 for more details.

[ChangeLog][EDITORIAL] Remove the changelog about QString/QByteArray
operators being removed. They're back.

Change-Id: I22c95e727285cf8a5ef79b3a4f9d45cb66319252
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-26 14:37:43 +00:00
Giuseppe D'Angelo 75cd9c13c2 QRegularExpression: code tidies
Given QList-is-QVector, remove an historical piece of code.

Change-Id: I7a8876be8ade6dbaa1822d773b092ddb3c4182d4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-26 01:09:14 +02:00
Giuseppe D'Angelo 049d8892ea QRegularExpression: do not assume QStringViews are NUL terminated
The convenience API used to look up the index of a named capturing
group expects NUL terminated strings. Therefore, we can't just
use it together with QStringViews, which may be not. Use the
non-convenience API instead.

Pick-to: 5.15
Change-Id: I25ca14de49b13ee1764525f8b19f2550c30c1afa
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-25 23:09:09 +00:00
Giuseppe D'Angelo 33218bac1b QStringList: inherit the constructors from QList
Otherwise it would be missing some, e.g. QStringList(qsizetype).

Change-Id: I5214672e62c98514b37b09d283e6035c799eda99
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-25 01:38:51 +02:00
Mårten Nordheim 43f01ec2e5 QByteDataBuffer: add readPointer functionality using QByteArrayView
While it could be done before it's nice to not have a custom "local"
struct or the size in an out-parameter.

Change-Id: Ie910f7060b1dadf037312d45e922f8e2deafe3ec
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-24 17:44:08 +02:00
Marc Mutz dcf856ca7a QStringTokenizer: use sliced() instead of mid()
The code was developed against the narrow-contract version of mid(),
but not updated when mid() became wide-contract.

Change-Id: I038054fb3f5acc0085c48fbf36af13dd14c917b8
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-23 10:38:24 +02:00
Marc Mutz 60dd5451a2 Port QLatin1String to qsizetype and add narrow-contract substring functions
QLatin1String::mid() etc were changed from narrow to wide contract,
but the narrow-contract replacements weren't added. This blocks using
the narrow-contract functions in QStringTokenizer.

As a drive-by, Q_REQUIRED_RESULT -> [[nodiscard]] and Q_DECL_CONSTEXPR
-> constexpr. Also centralize most Q_ASSERT()s in a single function,
verify(), in an attempt to reduce the amount of string data generated
from the asserts in assertive builds.

[ChangeLog][QtCore][QLatin1String] Added from(), sliced(), first(n),
last(n) functions.

[ChangeLog][QtCore][QLatin1String] size_type/size() is now qsizetype
(was: int). This makes QLatin1String(ptr, 0) ambiguous now between the
(ptr, ptr) and (ptr, qsizetype) constructors.

Change-Id: Ie195f66ae1974eb0752c058aa9f3b0853ed92477
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-23 10:38:01 +02:00
Friedemann Kleint 92d4d490fe Fix a number of qdoc warnings
- Remove obsolete functions and enumeration values
- Remove QObject * parameter from QMetaProperty accessors
- Fix renamed enumerations in QSsl
- Fix list items to be \li
- Fix function signatures and variable names

Change-Id: I37c7e6bf2c8ff92bc7b82620bae0a27796f866ab
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-08-20 07:51:05 +02:00
Karsten Heimrich 2766322de3 Move QStringRef and remains to Qt5Compat
Export some private functions from QUtf8 to resolve
undefined symbols in Qt5Compat after moving QStringRef.

Task-number: QTBUG-84437
Change-Id: I9046dcb14ed520d8868a511d79da6e721e26f72b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-20 00:58:13 +02:00
Karsten Heimrich 3398eeadf6 Refactor QXmlStreamStringRef
Use a QStringPrivate inside the implementation. This saves
two pointers, and actually makes this a safe replacement for
QStringRef inside the implementation of QXmlStreamReader.

Unexport the class as all members are inline, and move it
into the QtPrivate namespace as class QXmlString.

Change-Id: I43fa4684f569514c8c621838dcc346657ac1a915
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
2020-08-19 19:48:10 +02:00
Allan Sandfeld Jensen 2df41e2c48 Remove binary compat sources for qbytearray and qstring
No longer needed in Qt6.

Change-Id: I29567e175e07cc3658f0619acfd604abf64f6459
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-19 19:04:34 +02:00
Allan Sandfeld Jensen 6f0df02d00 Replace Qt CONSTEXPR defines with constexpr
Both normal and relaxed constexpr are required by our new minimum of
C++17.

Change-Id: Ic028b88a2e7a6cb7d5925f3133b9d54859a81744
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-08-14 15:52:58 +02:00
Giuseppe D'Angelo 06ffb912ca Drop qunicodechar
It's unused except in the definition of QStringLiteral, where
we can just use char16_t. The static_assert can also go as it's
already checked in qglobal.cpp.

Change-Id: I06e8a87b4dea1582cd84957efca1b8ad0d2e0266
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-14 13:17:11 +02:00
Edward Welbourne ca034e4e50 Inline two macros in the unicode tables
They were only used by one function each, in unicodetables.cpp, so
don't need to be macros.

Change-Id: I3e7f9f661568862d0a0d265bb8f657a8e0782b13
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-12 13:47:56 +02:00
Thiago Macieira ef8fe74324 Add x86 vector implementation of UTF-8 comparison to UTF-16
Change-Id: Ied637aece2a7427b8a2dfffd161181f75b738532
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-06 15:07:36 -07:00
Thiago Macieira 3caeb0187d qustrlen: Add #warnings to explain how to deal with GCC 7.x's ASan
The build breaks by disabling ASan in this function because it also
removes its ability to emit SSE2 code. That's clearly broken because all
x86_64 can use SSE2. So this adds #warnings so people are told how to
choose their solution.

Clang doesn't currently define __SANITIZE_ADDRESS__ but I added a
conditional just in case some future version does.

Fixes: QTBUG-84856
Pick-to: 5.15
Change-Id: I552d244076a447ab92d7fffd1617875fdd8dbe62
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
2020-08-05 21:51:24 -07:00
Thiago Macieira 274e07a339 Optimize non-vectorized UTF-8 to UTF-16 comparison to US-ASCII
This allows us to skip the surrogate pair decoding too, since it can't
match anyway.

Change-Id: Ied637aece2a7427b8a2dfffd16118183e5d76794
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-05 21:51:24 -07:00
Thiago Macieira 45838673df Implement UTF-16 to UTF-8 case-insensitive compare and make public
Change-Id: Ied637aece2a7427b8a2dfffd16116cf3645c6359
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-05 21:51:24 -07:00
Thiago Macieira 9422b5ebc3 QtPrivate::isLatin1: fix SSE2 non-SSE4.1 code
The implementation was broken. The "high" in PUNPCKHBW's "unpack high
data" means the high 64-bit of the 128-bit, not the high byte of a 16-
bit word. This never worked. It always passed for me because I don't
build non-SSE4.2 code (too old, no longer relevant).

So just use the working version of simdTestMask.

Pick-to: 5.15 5.12
Change-Id: I35a1b4d0a19a43149daefffd16284542f0de3fa3
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2020-08-05 21:51:24 -07:00
Thiago Macieira 60aa0d0868 Allow use of charXX_t in QUtf8Functions
Even added an internal char8_t type if the compiler doesn't have one.

Change-Id: Ied637aece2a7427b8a2dfffd1611813c345d10ec
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-05 21:51:24 -07:00
Edward Welbourne f12ddfaecc Tidy up unicode table generation
Eliminate some needless parentheses, tidy up some spacing and
indentation and split some long lines.  Change first += after
declaration to initializer.

Change-Id: I05ff2a6337b7ed14e0a2dc9c03fc784c92b63515
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-05 10:02:11 +02:00
Sona Kurazyan 8003ae79bf Document the changed semantics when passing arrays to QByteArray methods
After adding QByteArrayView overloads of QByteArray methods that used
to take char*, the way of determining the length of passed fixed-sized
array data has changed, due to the QByteArraiyView's optimization to deduce
the length at compile time for arrays. Document the behavior and add a
changelog item.

[ChangeLog][QtCore][QByteArray] When passing fixed size C arrays to
QByteArray methods, the length of the data on which the method will operate
is determined by array size, and not by scanning for the first '\0'
terminator, as it was in Qt 5.

Task-number: QTBUG-85815
Change-Id: I11cba17d428791e06c9bd4c7a727b7bd6b6aec3c
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-04 19:52:22 +02:00
Sona Kurazyan 883f2dd81f Avoid possible ambiguities with QByteArrayView's comparison operators
QByteArrayView's comparison operators are declared in the global
namespace, which can collide with the ones declared for other types that
are implicitly convertible to QByteArrayView (see the example attached to
the bugreport). Changing them to be hidden friends will make them visible
only when at least one of the operands is a QByteArrayView, so the
ambiguity will be avoided.

Fixes: QTBUG-85880
Change-Id: Ic3582269d9bda9a2105336ef0f044ea619af37ba
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-08-04 19:52:08 +02:00
Mårten Nordheim 246e712548 Move-enable QByteDataBuffer::{append,prepend}
Change-Id: I2fd342465475e3a694c8459a54957149f8b418a9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-01 10:51:21 +02:00
Allan Sandfeld Jensen 0c53f8ba98 Fix undefined use of memcpy and memcmp
Don't call them on a nullptr, even with a length of 0.

Change-Id: I7fee23303562e5771697a16365cae12e3e87af6f
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-07-31 20:08:50 +02:00
Thiago Macieira fe9e6b2ceb QString::vasprintf: fix 't' modifier for integers on 64-bit
‘t’
     Specifies that the argument is a ‘ptrdiff_t’.
     This modifier was introduced in ISO C99.

We use qsizetype, which is the same width as ptrdiff_t, so it makes no
difference in va_arg().

Change-Id: Iea47e0f8fc8b40378df7fffd16255730109413a5
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-07-31 10:36:33 -07:00
Allan Sandfeld Jensen 5747f31392 Another round of 0->nullptr cleanup
Change-Id: Ic8db7dc252f8fea46eb5a4f334726d6c7f4645a6
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-07-31 12:56:50 +02:00
Thiago Macieira 61ccfefb25 Fix warning in QStringView::compare(QChar) on qsizetype->int
size() - 1 is converted to int as the result, but size() is a qsizetype
and could be bigger than INT_MAX. So rewrite to not depend on the cast.
This was introduced on b2f79cceb1.

I could have replaced size() - 1 with int(size() > 1) - 1, but that's
even more complex. To simplify, I split the function in two while
retaining the C++11 constexpr requirements.

Bonus: removes the use of the ambiguously-named "empty()" function that
looks like a verb.

Fixes: QTBUG-85665
Pick-to: 5.15
Change-Id: Ieffc3453b88c4517a1dbfffd162338fdb084a376
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-07-30 20:29:23 -07:00
Thiago Macieira caa40f57d4 QLocale: update qt_asciiToDouble to use qsizetype
No need to change the output variable from int to qsizetype. That would
complicate the use of libdouble-conversion, which uses ints.

Change-Id: Iea47e0f8fc8b40378df7fffd1624bfdba1189d81
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2020-07-31 03:29:11 +00:00
Edward Welbourne 2ab4fe2ac8 Be clearer about the locale-aware comparison QString supports
The docs didn't make clear that there's a case where a rather poor
locale-aware compare may be in use - which turns out to be in use on
Android.

In the process, stop duplicating (in two slightly different variants)
the same paragraph in many places when we can use a \sa to refer to a
sub-section of the class doc.

Pick-to: 5.15
Task-number: QTBUG-63518
Change-Id: I5a41b0a269e477e74236131310992e70462734d7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2020-07-30 13:15:42 +02:00
Thiago Macieira f16613f7ef QLocale: fix conversion of "\0" to double
That is not a valid conversion. An empty string is a valid conversion; a
string containing a null should fail.

Change-Id: Iea47e0f8fc8b40378df7fffd1624c088f3bd1b14
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2020-07-28 08:54:06 -07:00
Thiago Macieira f50945b8fd QLocaleData: remove unused internal function
Pick-to: 5.15
Change-Id: Iea47e0f8fc8b40378df7fffd1624bf3469e66c90
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2020-07-28 08:54:03 -07:00
Thiago Macieira efd3c7bf24 QByteArray::toDouble: fix buffer overflow reads on fromRawData()
If Qt was not compiled with libdouble-conversion, sscanf() requires
null-termination, which fromRawData() does not require. This could be
fixed by making QByteArray pass a reallocated copy if it is operating on
raw data, but fixing qt_asciiToDouble() means we catch all cases and we
optimize for the common case of not-horribly-long strings.

Fixes: QTBUG-85580
Pick-to: 5.15 5.12
Change-Id: Iea47e0f8fc8b40378df7fffd16246f6163b01442
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2020-07-28 08:54:02 -07:00
Allan Sandfeld Jensen 9a189a096f Remove non-Qt6 compile time switches from QtCore
We already manage to compile without this code, and none of it are full
classes or separate functions suitable for qt5compat.

Change-Id: I47facac7ec621cfc4b0b26214b7de37897443519
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2020-07-24 13:10:57 +02:00
Friedemann Kleint 61a50b2b9b Fix a number of qdoc warnings related to deprecation
Remove obsolete documentation.

Change-Id: Iaf4b6f9852a883dea0f256c5c89e74f6ebbe85f3
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-07-24 10:02:27 +02:00
Edward Welbourne cbae0301c7 QLocale: purge deprecated API
Since 5.15 - toTime() with a calendar in the argument list
The calendar was never used.

Change-Id: I37897d47b42e69d1a8312e6389d6349febb889ae
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-23 11:05:15 +02:00
Friedemann Kleint 07bef8b383 Fix some qdoc warnings
src/corelib/text/qstringconverter.h:160:54: error: no matching constructor for initialization of 'QStringConverterBase::State'
src/corelib/text/qstringconverter.h:72:19: note: candidate constructor not viable: no known conversion from 'QFlags<QStringConverter::Flag>' to 'QFlags<QStringConverterBase::Flag>' for 1st argument
src/corelib/text/qstringconverter.h:75:9: note: candidate constructor not viable: no known conversion from 'QStringConverter::Flags' (aka 'QFlags<QStringConverter::Flag>') to 'QStringConverterBase::State' for 1st argument
src/corelib/text/qstringconverter.h:108:24: note: candidate constructor not viable: no known conversion from 'QStringConverter::Flags' (aka 'QFlags<QStringConverter::Flag>') to 'const QStringConverterBase::State' for 1st argument
src/corelib/text/qstringconverter.h:159:32: warning: constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]
src/corelib/text/qstringconverter.h:187:11: note: member not initialized by constructor
src/corelib/kernel/qproperty.h:403:14: error: deduction guide must be declared in the same scope as template 'QProperty'
src/corelib/kernel/qproperty.h:202:7: note: template is declared here
src/corelib/kernel/qproperty.h:403:14: error: deduction guide declaration without trailing return type
src/gui/painting/qregion.h:139:5: error: unknown type name 'HRGN'
src/gui/painting/qregion.h:140:29: error: unknown type name 'HRGN'

Change-Id: I3c195a60ceeb51664368a4aeef90c70c31954fc3
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-07-21 13:19:09 +02:00
Edward Welbourne c7f277483a QRegularExpression: Purge deprecated PatternOption members
They've been no-ops since (at least) 5.12.
At the same time, save future readers the need to git blame to find
out how long the other deprecated enum name is.

Change-Id: I2081ba2859c6540651b6f6807cc6bd59890bfce5
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2020-07-20 16:06:28 +02:00
Edward Welbourne 996a7fc6f1 QChar: purge deprecated API
Since 5.3 joining() and old Joining type
Replaced by JoiningType joiningType()

Change-Id: Iefee50aaf94cec6d67b5fc004b3e68357b2015c5
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2020-07-20 16:06:28 +02:00
Edward Welbourne d853816307 Fix handling of Suzhou numbering system
This only arises when the system locale tells us to use its zero as
our zero digit, since no CLDR locale uses it by default. Adapt an
MS-specific QLocale::system() test to use Suzhou numbering, so as to
test this.

While updating the locale-restoration code to also restore the digits
being set in that test, add restore code for the long time format,
where previously only the short time format was restored. Add a
comment to make it less likely one of those shall be missed in future.

Fixes: QTBUG-85409
Change-Id: I343324bb563ee0e455dfe77d4825bf8c3082ca30
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-17 12:19:01 +02:00
Sona Kurazyan b7ccc80526 Use qsizetype instead of int in QByteArrayMatcher
Change-Id: Id32dc567fa0359ad281d34fcf88c46484f87ce2c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-07-15 23:16:50 +02:00
Edward Welbourne 7ec5cba6de QSystemLocalePrivate::substituteDigits(): change to move semantics
Rather than passing an in-out reference parameter and ignoring the
return (of that parameter) use an actual rvalue ref parameter and move
the value through the function, to make it easier for compilers to
see how to optimize it.

Change-Id: Ie239400345da012d8fb8a731394f1687b8b62430
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-15 12:19:21 +02:00
Edward Welbourne b5bc3ee036 Simplify uses of QSystemLocale::query()
QVariant::isNull() shall no longer return true when the variant does
package an object, but that object's isNull() is true, so take care to
catch QString-wrapping returns that contain an empty string, except
where this is a valid return. Generally tidy code processing the
returned value.

At the same time, make the second argument of query() optional, since
it's only used by a subset of the query types.

Change-Id: I3dba9a59260f9f182ca277784c77277e2ea255e2
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-15 12:19:14 +02:00
Edward Welbourne d0806bf26a Simplify qlocale_win's getLocaleInfo() and its _int variant
One of the former's overloads was a template; it and its _int variant
took an optional maxlen; no caller passed maxlen, only three callers
didn't over-ride the template's <QString> default return value to
<QVariant>; so eliminate maxlen and have it simply return QVariant,
using .toString() on it where needed.

Change-Id: Icf3ff32f167ee96cfbb6412613ecd7f0886a2fe9
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-15 12:19:08 +02:00
Edward Welbourne bb6a73260e Support digit-grouping correctly
Read three more values from CLDR and add a byte to the bit-fields at
the end of QLocaleData, indicating the three group sizes. This adds
three new parameters to various low-level formatting functions. At the
same time, rename ThousandsGroup to GroupDigits, more faithfully
expressing what this (internal) option means.

This replaces commit 27d1391280 with a
fuller implementation that handles digit-grouping in any of the ways
that CLDR supports. The formerly "Indian" formatting now also applies
to at least some locales for Bangladesh, Bhutan and Sri Lanka.

Fixed Costa Rica currency formatting test that wrongly put a separator
after the first digit; the locale (in common with several Spanish
locales) requires at least two digits before the first separator.

[ChangeLog][QtCore][Important Behavior Changes] Some locales require
more than one digit before the first grouping separator; others use
group sizes other than three. The latter was partially supported (only
for India) at 5.15 but is now systematically supported; the former is
now also supported.

Task-number: QTBUG-24301
Fixes: QTBUG-81050
Change-Id: I4ea4e331f3254d1f34801cddf51f3c65d3815573
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-14 14:52:08 +02:00
Edward Welbourne 19ed60d703 Refactor QLocale's integer formatting
Break out some shared code in the integer formatting to save
duplicating it. Simplify what's left.
Renamed some variables to match Qt style.

Change-Id: I369a013802a267a94725302de0d1d33291c29538
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-14 14:52:08 +02:00
Edward Welbourne 0b0bc0ce20 QLocalePrivate: rearrange number format statics and tools
Instead of passing lots of instance data around among public static
methods and functions in qlocale_tools, do the work in instance
methods that can access the relevant attributes of the locale when
they need them. Incidentally reduces clutter in the global namespace.
Add a signPrefix() to handle a repeated computation. Keep new internal
methods private.

Change-Id: I9556a960acac9fb645872337c61f509fb902984e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-14 14:52:08 +02:00
Edward Welbourne 3f8eae848e Fix floating-point 'g'-format's choice between 'e' and 'f' forms
During review of a refactor (coming shortly), Thiago wondered what the
magic numbers were. On closer examination, I concluded that they were
wrong and wrote some tests to prove it. This commit adds those tests;
replaces the misguided old code with something that passes them; and
documents the reasons for the various parts of its decisions.

In the process, tidy up QLocaleData::doubleToString() somewhat and
rename some of its variables to conform to Qt coding style.

Change-Id: Ibee43659b1bdb0707639cdb444cfe941c31d409f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-14 14:52:08 +02:00
Edward Welbourne 3809643093 Simplify qlocale_win's currency formatting
Use QLocaleData::c()'s instance method, rather than QLocaleData's
static method, to format integers. This avoids the need to duplicate
various arguments as literals, that the C locale provides as default.
It also future-proofs against changes to the static methods.

Change-Id: I5bba407cfc29e3f33d1e9fa878ddf35fff3b113c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2020-07-14 14:52:08 +02:00
Edward Welbourne e8d5000026 Use numeric_limits instead of hand-coded equivalents
As a comment noted, the reason for QLocaleData rolling its own values
describing the ranges of digits and exponents in a double were all
about std::numeric_limits's constants not being constexpr - which they
have now been since C++11, so we can do away with our own.

One of the constants was used in two places in the same way; so
abstract that use out into an inline function in qlocale_tools, to
save duplication and give somewhere to document it.

Change-Id: I7e3740ece9b499c0ec434de18d70abe69e1fe079
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-13 12:05:32 +02:00
Sona Kurazyan 361dc074f2 Move QRegExp and its remaining mentions out of QtCore
Task-number: QTBUG-85235
Change-Id: Ibd6c98d952c1bb9916b64715c6430fb0d3fe3843
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-07-13 10:53:23 +02:00
Linus Jahn 1ecc884bfd QStringView: Remove outdated note about usage with QList
Change-Id: Id1cef09642ccde701e57e8f0a3a3d0e5fcf47e5c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-12 21:07:05 +02:00
Lars Knoll 744e55b85a Remove that casts to int/uint that shouldn't be there anymore
Remove casts that truncate a qsizetype or size_t in qstring.cpp

Change-Id: Ibc1515f9906d5a0840254e60e2e7dfca716b63b5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-10 19:04:11 +02:00
Dimitrios Apostolou b800f74fe0 Rename local variable hiding parameter
As found by LGTM.com.

Change-Id: If3024bdaad06cafcd401b4ee04524ad03bd69a97
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-10 02:37:02 +02:00
Dimitrios Apostolou 89e3a426a8 Remove local variable masking a global one
As found by LGTM.com.

Change-Id: Ied926a9eace9044ec9abc859557cd28178e5defb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-10 02:36:33 +02:00
Sona Kurazyan 577558daf5 Fix QByteArray::count implementation for longer data
The issue has been introduced when refactoring QByteArray::count
implementation (see 631127126c).

Because the last argument of QByteArrayMatcher::indexIn() method
has a defult value, it has been compiling without issues, but was being
called with incorrect size parameter. Fixed it to pass the length of the
input data correctly.

Change-Id: Ic9c2f33733131ec17276aa889f2d7ea40ec79b01
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-07-09 18:38:33 +02:00
Friedemann Kleint f4e4ad6d2b Silence some warnings about fallthrough
src/corelib/text/qunicodetools.cpp:1243:13: warning: this statement may fall through [-Wimplicit-fallthrough=]
src/corelib/text/qunicodetools.cpp:1247:55: warning: this statement may fall through [-Wimplicit-fallthrough=]

Change-Id: I441000db46cb6d85a5dcd0534ea2168b39a3f3bd
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-07-09 08:32:23 +02:00
Sona Kurazyan 631127126c Introduce QByteArrayView
Created a QByteArrayView in symmetry with QStringView.
Added the basic tests symmetrical to QStringView tests.

Moved the implementations of non-modifying methods of QByteArray to
namespace QtPrivate, to be reused inline from both QByteArray and
QByteArrayView. Changed QByteArray's counterparts of those methods to
take QByteArrayView as argument instead of QByteArray. Removed
QByteArray's operator QNoImplicitBoolCast(), because it was causing
ambiguity when calling those methods with QByteArray argument (it was
there to perevnt if(!ba)/if(ba) from compiling, but currently that would
be ambiguous and won't compile anyway).

[ChangeLog][QtCore][QByteArrayView] New class.

Task-number: QTBUG-84321
Change-Id: I05f92e654cf65c95f2bb31b9c9018746ac110426
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-07-08 08:45:49 +02:00
Lars Schmertmann 6ce2f3f26b Add ; to Q_UNUSED
This is required to remove the ; from the macro with Qt 6.

Task-number: QTBUG-82978
Change-Id: I3f0b6717956ca8fa486bed9817b89dfa19f5e0e1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2020-07-07 11:51:48 +02:00
Lars Knoll 563fbe79e5 Try to workaround bogus compiler warning in gcc 9 for ARMv7
../../src/corelib/io/qurlidna.cpp: In function ‘QString qt_ACE_do(QStringView, AceOperation, AceLeadingDot)’:
../../src/corelib/io/qurlidna.cpp:2543:23: error: ‘int __builtin_memcmp_eq(const void*, const void*, unsigned int)’
     reading 8 bytes from a region of size 2 [-Werror=stringop-overflow=]
              if (memcmp(result.constData() + prevLen, acePrefixUtf16, sizeof acePrefixUtf16) == 0)
                  ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors

In function ‘bool operator==(const QByteArray&, const QByteArray&)’,
     inlined from ‘virtual void (* QLinuxFbIntegration::platformFunction(const QByteArray&) const)()’
          at ../../src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp:185:18:
 include/QtCore/../../../../src/corelib/text/qbytearray.h:571:45: error:
     ‘int __builtin_memcmp_eq(const void*, const void*, unsigned int)’ reading 17 bytes from
          a region of size 1 [-Werror=stringop-overflow=]

The warnings/errors are bogus. Fix them by using QStringView::sliced() and de-inlining the
comparison operator for QByteArray.

Change-Id: I24956fe74a7989e75cd03d717570b8fca493ab23
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-06 21:31:40 +02:00
Lars Knoll 9117e3850b Rename from() to sliced()
After API discussions, agreement was that from(n) is a bad name
for the method. Let's go with sliced(n) instead.

Change-Id: I0338cc150148a5008c3ee72bd8fda96fb93e9c35
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-06 21:31:35 +02:00
Lars Knoll 9a9a1a2a2e Port QString to qsizetype
Change-Id: Id9477ccfabadd578546bb265a9483f128efb6736
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-06 21:31:20 +02:00
Lars Knoll df853fed66 Use qsizetype in QList
The change creates a slight source incompatibility. The main
things to take care of are

* code using printf statements on list.size(). Using qsizetype in
printf statements will always require a cast to work on both 32
and 64 bit.
* A few places where overloads now get ambiguous. One example is
QRandomGenerator::bounded() that has overloads for int, uint and
double, but not int64.
* Streaming list.size() to a QDataStream will change the format
depending on the architecture.

[ChangeLog][QtCore][QList] QList now uses qsizetype to index into
elements.

Change-Id: Iaff562a4d072b97f458417b670f95971bd47cbc6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-06 21:31:14 +02:00
Lars Knoll 0341bf2e97 Make QArrayDataPointer::size a qsizetype
This is a next step towards making QList, QString
and QByteArray able to deal with large sizes.

Change-Id: Icad49b33f503401ac4912678b2f88584c6f91a63
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-06 21:30:47 +02:00
Lars Knoll fbce2e58e6 Get rid of QArrayData::sharedNull()
Remove the last places where those got used and avoid
allocations when we resize to 0.

Change-Id: Ib553f4e7ce7cc24c31da15a55a86d18bdf1cc5c3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-06 21:30:33 +02:00
Lars Knoll a8d5f38537 Avoid allocating a d-pointer for empty strings
Those can simply be handled as compile time constant strings
pointing to the empty (Q)Char.

Change-Id: I1f6f6ab923a30c68a720003ca68c34c572aa29da
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-06 21:30:12 +02:00
Lars Knoll a46caf087c Simplify Q_ARRAY_LITERAL
And clean up some unused pieces of code.

Change-Id: I285b6862dc67b7130af66d3e08f652b1a56b990e
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-07-06 21:30:06 +02:00
Lars Knoll 76004502ba Get rid of shared null for QByteArray, QString and QVector
As a side effect, data() can now return a nullptr. This
has the potential to cause crashes in existig code. To work
around this, return an empty string from QString::data()
and QByteArray::data() for now.

For Qt 6 (and once all our internal issues are fixed), data()
will by default return a nullptr for a null QString, but we'll
offer a #define to enable backwards compatible behavior.

Change-Id: I4f66d97ff1dce3eb99a239f1eab9106fa9b1741a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-06 21:29:58 +02:00
Lars Knoll a5025efccf Fix a crash in QClipBoard when copying utf16 data
Properly use the new QStringConverter API and not an internal
qFromUtfEncoded method that was buggy after the changes.

Take the oppportunity to clean up and remove qFromUtfEncoded, as
QClipboard was its only user.

Fixes: QTBUG-85417
Change-Id: I8540d12056bf3f448c1f628ce0bd0ad462a6447d
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2020-07-06 11:31:43 +02:00
Lars Knoll 1480aa895b Move the reallocate() method from QArrayDataPointer to the Ops class
And only implement it for QPodArrayOps, as that's the only case where
we should be using it.

Change-Id: If48f3e4b142c322d3451309d6d1cf68aee569ea2
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-07-02 11:42:11 +02:00
Kai Koehne 63e2acec00 Documentation fixes for QStringTokenizer
Task-number: QTBUG-85343
Change-Id: Ib647d90ba3cfa1181690dc745249637031c7ad67
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-07-01 15:10:54 +02:00
Giuseppe D'Angelo b1ec50c96d QByteArray::insert: do not assert that pos must be non-negative
The insert() overloads have generally a very wide contract. The very
next line accepts negative positions, so remove the related assert.

Change-Id: I89b67615c59287825942047a28572bf896cf30e3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-06-30 18:54:57 +02:00
Albert Astals Cid ee6aadcff4 QByteArray::operator[] no longer resizes
Fix the documentation

Change-Id: I328d9dd9255f15225992502dc35ae8877fe206a1
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2020-06-29 13:24:11 +02:00
Jarek Kobus b0f9c06a9b Use QList instead of QVector in corelib implementation
Omitting state machine and docs for now.

Task-number: QTBUG-84469
Change-Id: Ibfa5e7035515773461f6cdbff35299315ef65737
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-06-29 12:35:09 +02:00
Lars Knoll e81330d327 Add explicit encode()/decode() methods to QStringConverter
The functional style interface is nice, but does feel alien in some
contexts, so better also have explicit encode and decode methods.

Change-Id: Ic07ced15f65cdb3a7f1cf044041e341d2ef87f79
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
2020-06-26 14:41:42 +02:00
Jarek Kobus 0475460102 Use QList instead of QVector in corelib
Applied to headers only. Source file to be changed separately.
Omitted statemachine for now to avoid conflicts.
Omitted qmetatype.h for now - to be handled later.

Task-number: QTBUG-84469
Change-Id: I317376037a62467c313467d92955ad0b7473aa97
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-06-25 22:30:59 +02:00
Allan Sandfeld Jensen a418fd5cbb Improve casting
Make a handful of narrowing casts explicit

Change-Id: I318e9778840f2437963377b6b97f269d569909dc
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2020-06-25 10:19:09 +02:00
Sona Kurazyan d7ccd8cb45 Remove QByteArray's methods taking QString and their uses
[ChangeLog][QtCore][QByteArray] Remove method overloads taking
QString as argument, all of which were equivalent to passing the
toUtf8() of the string instead.

Change-Id: I9251733a9b3711153b2faddbbc907672a7cba190
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-06-25 09:54:16 +02:00