6#ifndef QSTRINGITERATOR_H
7#define QSTRINGITERATOR_H
20#include <QtCore/private/qglobal_p.h>
21#include <QtCore/qstring.h>
27 QString::const_iterator i, pos, e;
29 static bool less(
const QChar *lhs,
const QChar *rhs)
noexcept
30 {
return std::less{}(lhs, rhs); }
65 Q_ASSERT_X(!less(position, i) && !less(e, position),
66 Q_FUNC_INFO,
"position out of bounds");
79 Q_ASSERT_X(hasNext(), Q_FUNC_INFO,
"iterator hasn't a next item");
81 if (Q_UNLIKELY((pos++)->isHighSurrogate())) {
82 if (Q_LIKELY(pos != e && pos->isLowSurrogate()))
89 Q_ASSERT_X(hasNext(), Q_FUNC_INFO,
"iterator hasn't a next item");
91 if (Q_UNLIKELY((pos++)->isHighSurrogate())) {
92 Q_ASSERT(hasNext() && pos->isLowSurrogate());
99 Q_ASSERT_X(hasNext(), Q_FUNC_INFO,
"iterator hasn't a next item");
101 if (Q_UNLIKELY(pos->isHighSurrogate())) {
102 Q_ASSERT(less(pos + 1, e) && pos[1].isLowSurrogate());
103 return QChar::surrogateToUcs4(pos[0], pos[1]);
106 return pos->unicode();
111 Q_ASSERT_X(hasNext(), Q_FUNC_INFO,
"iterator hasn't a next item");
113 if (Q_UNLIKELY(pos->isSurrogate())) {
114 if (Q_LIKELY(pos->isHighSurrogate())) {
115 const QChar *low = pos + 1;
116 if (Q_LIKELY(low != e && low->isLowSurrogate()))
117 return QChar::surrogateToUcs4(*pos, *low);
122 return pos->unicode();
127 Q_ASSERT_X(hasNext(), Q_FUNC_INFO,
"iterator hasn't a next item");
129 const QChar cur = *pos++;
130 if (Q_UNLIKELY(cur.isHighSurrogate())) {
131 Q_ASSERT(hasNext() && pos->isLowSurrogate());
132 return QChar::surrogateToUcs4(cur, *pos++);
134 return cur.unicode();
139 Q_ASSERT_X(hasNext(), Q_FUNC_INFO,
"iterator hasn't a next item");
141 const QChar uc = *pos++;
142 if (Q_UNLIKELY(uc.isSurrogate())) {
143 if (Q_LIKELY(uc.isHighSurrogate() && hasNext() && pos->isLowSurrogate()))
144 return QChar::surrogateToUcs4(uc, *pos++);
160 Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO,
"iterator hasn't a previous item");
162 if (Q_UNLIKELY((--pos)->isLowSurrogate())) {
163 const QChar *high = pos - 1;
164 if (Q_LIKELY(high != i - 1 && high->isHighSurrogate()))
171 Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO,
"iterator hasn't a previous item");
173 if (Q_UNLIKELY((--pos)->isLowSurrogate())) {
174 Q_ASSERT(hasPrevious() && pos[-1].isHighSurrogate());
181 Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO,
"iterator hasn't a previous item");
183 if (Q_UNLIKELY(pos[-1].isLowSurrogate())) {
184 Q_ASSERT(less(i + 1, pos) && pos[-2].isHighSurrogate());
185 return QChar::surrogateToUcs4(pos[-2], pos[-1]);
187 return pos[-1].unicode();
192 Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO,
"iterator hasn't a previous item");
194 if (Q_UNLIKELY(pos[-1].isSurrogate())) {
195 if (Q_LIKELY(pos[-1].isLowSurrogate())) {
196 const QChar *high = pos - 2;
197 if (Q_LIKELY(high != i - 1 && high->isHighSurrogate()))
198 return QChar::surrogateToUcs4(*high, pos[-1]);
203 return pos[-1].unicode();
208 Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO,
"iterator hasn't a previous item");
210 const QChar cur = *--pos;
211 if (Q_UNLIKELY(cur.isLowSurrogate())) {
212 Q_ASSERT(hasPrevious() && pos[-1].isHighSurrogate());
213 return QChar::surrogateToUcs4(*--pos, cur);
215 return cur.unicode();
220 Q_ASSERT_X(hasPrevious(), Q_FUNC_INFO,
"iterator hasn't a previous item");
222 const QChar uc = *--pos;
223 if (Q_UNLIKELY(uc.isSurrogate())) {
224 if (Q_LIKELY(uc.isLowSurrogate() && hasPrevious() && pos[-1].isHighSurrogate()))
225 return QChar::surrogateToUcs4(*--pos, uc);
The QCalendar class describes calendar systems.
const QLocaleData *const m_data
QLocale::MeasurementSystem measurementSystem() const
QByteArray bcp47Name(char separator='-') const
char32_t peekNext(char32_t invalidAs=QChar::ReplacementCharacter) const
char32_t next(char32_t invalidAs=QChar::ReplacementCharacter)
QStringIterator(const QChar *begin, qsizetype idx, const QChar *end)
QString::const_iterator position() const
char32_t previous(char32_t invalidAs=QChar::ReplacementCharacter)
QStringIterator(QStringView string, qsizetype idx=0)
char32_t peekPreviousUnchecked() const
QStringIterator(const QChar *begin, const QChar *end)
char32_t peekNextUnchecked() const
void setPosition(QString::const_iterator position)
char32_t peekPrevious(char32_t invalidAs=QChar::ReplacementCharacter) const
char32_t previousUnchecked()
Q_GLOBAL_STATIC(DefaultRoleNames, qDefaultRoleNames, { { Qt::DisplayRole, "display" }, { Qt::DecorationRole, "decoration" }, { Qt::EditRole, "edit" }, { Qt::ToolTipRole, "toolTip" }, { Qt::StatusTipRole, "statusTip" }, { Qt::WhatsThisRole, "whatsThis" }, }) const QHash< int
static unsigned calculateFlags(int fieldWidth, char32_t fillChar, const QLocale &locale)
static QString calculateFiller(qsizetype padding, char32_t fillChar, qsizetype fieldWidth, const QLocaleData *localeData)
QDebug operator<<(QDebug dbg, const QLocale &l)
static QLocalePrivate * findLocalePrivate(QLocale::Language language, QLocale::Script script, QLocale::Territory territory)
static std::optional< QString > systemLocaleString(const QLocaleData *that, QSystemLocale::QueryType type)
static const QSystemLocale * systemLocale()
static bool checkParsed(QByteArrayView num, qsizetype used)
static QString rawWeekDayName(const QLocaleData *data, const int day, QLocale::FormatType type)
QDataStream & operator>>(QDataStream &ds, QLocale &l)
#define CheckCandidate(id)
static Q_DECL_COLD_FUNCTION void badSeparatorWarning(const char *method, char sep)
static QString rawStandaloneWeekDayName(const QLocaleData *data, const int day, QLocale::FormatType type)
static constexpr QLocale::NumberOptions defaultNumberOptions(QLocale::Language forLanguage)
static QStringView findTag(QStringView name) noexcept
static bool validTag(QStringView tag)
static qsizetype scriptIndex(QStringView code, Qt::CaseSensitivity cs) noexcept
static const QCalendarLocale & getMonthDataFor(const QLocalePrivate *loc, const QCalendarLocale *table)
static T toIntegral_helper(const QLocalePrivate *d, QStringView str, bool *ok)
static bool timeFormatContainsAP(QStringView format)
size_t qHash(const QLocale &key, size_t seed) noexcept
bool comparesEqual(const QLocale &loc, QLocale::Language lang)
static qsizetype findLocaleIndexById(QLocaleId localeId) noexcept
static constexpr qsizetype locale_data_size
static void updateSystemPrivate()
static QString rawMonthName(const QCalendarLocale &localeData, const char16_t *monthsData, int month, QLocale::FormatType type)
static qsizetype stringWidth(QStringView text)
static QLocalePrivate * c_private() noexcept
static const QLocaleData * defaultData()
static QString rawStandaloneMonthName(const QCalendarLocale &localeData, const char16_t *monthsData, int month, QLocale::FormatType type)
static QString localeString(const QLocaleData *that, QSystemLocale::QueryType type, QLocaleData::DataRange range)
static const QLocaleData * systemData(qsizetype *sysIndex=nullptr)
static QString offsetFromAbbreviation(QString &&text)
static qsizetype defaultIndex()
static constexpr char16_t single_character_data[]
static constexpr char16_t days_data[]
static constexpr QLocaleData locale_data[]
static constexpr QLocaleId likely_subtags[]
static constexpr unsigned char territory_code_list[]
static constexpr unsigned char script_code_list[]
bool qt_splitLocaleName(QStringView name, QStringView *lang=nullptr, QStringView *script=nullptr, QStringView *cntry=nullptr) noexcept
qsizetype qt_repeatCount(QStringView s) noexcept
QString qt_readEscapedFormatString(QStringView format, qsizetype *idx)
#define QStringLiteral(str)
char32_t ucsFirst(const char16_t *table) const
const GroupSizes grouping
QString positiveSign() const
QString groupSeparator() const
QSimpleParsedNumber< qint64 > stringToLongLong(QStringView str, int base, QLocale::NumberOptions options) const
Q_AUTOTEST_EXPORT char32_t zeroUcs() const
QString zeroDigit() const
bool numberToCLocale(QStringView s, QLocale::NumberOptions number_options, NumberMode mode, CharBuff *result) const
QString decimalPoint() const
QString doubleToString(double d, int precision=-1, DoubleForm form=DFSignificantDigits, int width=-1, unsigned flags=NoFlags) const
QString listSeparator() const
QString percentSign() const
double stringToDouble(QStringView str, bool *ok, QLocale::NumberOptions options) const
QString longLongToString(qint64 l, int precision=-1, int base=10, int width=-1, unsigned flags=NoFlags) const
QString exponentSeparator() const
QString negativeSign() const
QSimpleParsedNumber< quint64 > stringToUnsLongLong(QStringView str, int base, QLocale::NumberOptions options) const
QString unsLongLongToString(quint64 l, int precision=-1, int base=10, int width=-1, unsigned flags=NoFlags) const
QLocaleId withLikelySubtagsAdded() const noexcept
Fill in blank fields of a locale ID.
QLocaleId withLikelySubtagsRemoved() const noexcept
bool operator==(QLocaleId other) const noexcept