Add q_points_into_range to container utilities
We already used it in QString and QBA. And implicitly in QADP (see parent commit). Might as well move to a common location and reuse Change-Id: I694f0f1dbd109f17c134f64b3f3dc28d19556c88 Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit 10b46e7f0faecc42a94cc2e25ad3edd08ae28083) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
e5b25862ff
commit
ad496ea3b5
@ -67,12 +67,6 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
template <typename T, typename Cmp = std::less<>>
|
|
||||||
static constexpr bool points_into_range(const T *p, const T *b, const T *e, Cmp less = {}) noexcept
|
|
||||||
{
|
|
||||||
return !less(p, b) && less(p, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char QByteArray::_empty = '\0';
|
const char QByteArray::_empty = '\0';
|
||||||
|
|
||||||
// ASCII case system, used by QByteArray::to{Upper,Lower}() and qstr(n)icmp():
|
// ASCII case system, used by QByteArray::to{Upper,Lower}() and qstr(n)icmp():
|
||||||
@ -2015,7 +2009,7 @@ QByteArray &QByteArray::insert(qsizetype i, QByteArrayView data)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!d->needsDetach() && points_into_range(str, d.data(), d.data() + d.size)) {
|
if (!d->needsDetach() && QtPrivate::q_points_into_range(str, d.data(), d.data() + d.size)) {
|
||||||
QVarLengthArray a(str, str + size);
|
QVarLengthArray a(str, str + size);
|
||||||
return insert(i, a);
|
return insert(i, a);
|
||||||
}
|
}
|
||||||
@ -2144,7 +2138,7 @@ QByteArray &QByteArray::remove(qsizetype pos, qsizetype len)
|
|||||||
|
|
||||||
QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, QByteArrayView after)
|
QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, QByteArrayView after)
|
||||||
{
|
{
|
||||||
if (points_into_range(after.data(), d.data(), d.data() + d.size)) {
|
if (QtPrivate::q_points_into_range(after.data(), d.data(), d.data() + d.size)) {
|
||||||
QVarLengthArray copy(after.data(), after.data() + after.size());
|
QVarLengthArray copy(after.data(), after.data() + after.size());
|
||||||
return replace(pos, len, QByteArrayView{copy});
|
return replace(pos, len, QByteArrayView{copy});
|
||||||
}
|
}
|
||||||
@ -2201,11 +2195,11 @@ QByteArray &QByteArray::replace(QByteArrayView before, QByteArrayView after)
|
|||||||
return *this;
|
return *this;
|
||||||
|
|
||||||
// protect against before or after being part of this
|
// protect against before or after being part of this
|
||||||
if (points_into_range(a, d.data(), d.data() + d.size)) {
|
if (QtPrivate::q_points_into_range(a, d.data(), d.data() + d.size)) {
|
||||||
QVarLengthArray copy(a, a + asize);
|
QVarLengthArray copy(a, a + asize);
|
||||||
return replace(before, QByteArrayView{copy});
|
return replace(before, QByteArrayView{copy});
|
||||||
}
|
}
|
||||||
if (points_into_range(b, d.data(), d.data() + d.size)) {
|
if (QtPrivate::q_points_into_range(b, d.data(), d.data() + d.size)) {
|
||||||
QVarLengthArray copy(b, b + bsize);
|
QVarLengthArray copy(b, b + bsize);
|
||||||
return replace(QByteArrayView{copy}, after);
|
return replace(QByteArrayView{copy}, after);
|
||||||
}
|
}
|
||||||
|
@ -100,12 +100,6 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
template <typename T, typename Cmp = std::less<>>
|
|
||||||
static constexpr bool points_into_range(const T *p, const T *b, const T *e, Cmp less = {}) noexcept
|
|
||||||
{
|
|
||||||
return !less(p, b) && less(p, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char16_t QString::_empty = 0;
|
const char16_t QString::_empty = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2814,7 +2808,7 @@ QString& QString::insert(qsizetype i, const QChar *unicode, qsizetype size)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!d->needsDetach() && points_into_range(s, d.data(), d.data() + d.size))
|
if (!d->needsDetach() && QtPrivate::q_points_into_range(s, d.data(), d.data() + d.size))
|
||||||
return insert(i, QStringView{QVarLengthArray(s, s + size)});
|
return insert(i, QStringView{QVarLengthArray(s, s + size)});
|
||||||
|
|
||||||
d->insert(i, s, size);
|
d->insert(i, s, size);
|
||||||
@ -3108,7 +3102,7 @@ static void removeStringImpl(QString &s, const T &needle, Qt::CaseSensitivity cs
|
|||||||
QString &QString::remove(const QString &str, Qt::CaseSensitivity cs)
|
QString &QString::remove(const QString &str, Qt::CaseSensitivity cs)
|
||||||
{
|
{
|
||||||
const auto s = str.d.data();
|
const auto s = str.d.data();
|
||||||
if (points_into_range(s, d.data(), d.data() + d.size))
|
if (QtPrivate::q_points_into_range(s, d.data(), d.data() + d.size))
|
||||||
removeStringImpl(*this, QStringView{QVarLengthArray(s, s + str.size())}, cs);
|
removeStringImpl(*this, QStringView{QVarLengthArray(s, s + str.size())}, cs);
|
||||||
else
|
else
|
||||||
removeStringImpl(*this, qToStringViewIgnoringNull(str), cs);
|
removeStringImpl(*this, qToStringViewIgnoringNull(str), cs);
|
||||||
|
@ -59,6 +59,19 @@ QT_BEGIN_NAMESPACE
|
|||||||
namespace QtPrivate
|
namespace QtPrivate
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
|
||||||
|
Returns whether \a p is within a range [b, e). In simplest form equivalent to:
|
||||||
|
b <= p < e.
|
||||||
|
*/
|
||||||
|
template<typename T, typename Cmp = std::less<>>
|
||||||
|
static constexpr bool q_points_into_range(const T *p, const T *b, const T *e,
|
||||||
|
Cmp less = {}) noexcept
|
||||||
|
{
|
||||||
|
return !less(p, b) && less(p, e);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T, typename N>
|
template <typename T, typename N>
|
||||||
void q_uninitialized_relocate_n(T* first, N n, T* out)
|
void q_uninitialized_relocate_n(T* first, N n, T* out)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user