diff options
Diffstat (limited to 'src/qml/qml/ftw/qhashedstring.cpp')
-rw-r--r-- | src/qml/qml/ftw/qhashedstring.cpp | 81 |
1 files changed, 6 insertions, 75 deletions
diff --git a/src/qml/qml/ftw/qhashedstring.cpp b/src/qml/qml/ftw/qhashedstring.cpp index 4553fa9359..b822e1b120 100644 --- a/src/qml/qml/ftw/qhashedstring.cpp +++ b/src/qml/qml/ftw/qhashedstring.cpp @@ -41,60 +41,6 @@ QT_BEGIN_NAMESPACE -// Copy of QString's qMemCompare -bool QHashedString::compare(const QChar *lhs, const QChar *rhs, int length) -{ - Q_ASSERT((lhs && rhs) || !length); - const quint16 *a = (const quint16 *)lhs; - const quint16 *b = (const quint16 *)rhs; - - if (a == b || !length) - return true; - - union { - const quint16 *w; - const quint32 *d; - quintptr value; - } sa, sb; - sa.w = a; - sb.w = b; - - // check alignment - if ((sa.value & 2) == (sb.value & 2)) { - // both addresses have the same alignment - if (sa.value & 2) { - // both addresses are not aligned to 4-bytes boundaries - // compare the first character - if (*sa.w != *sb.w) - return false; - --length; - ++sa.w; - ++sb.w; - - // now both addresses are 4-bytes aligned - } - - // both addresses are 4-bytes aligned - // do a fast 32-bit comparison - const quint32 *e = sa.d + (length >> 1); - for ( ; sa.d != e; ++sa.d, ++sb.d) { - if (*sa.d != *sb.d) - return false; - } - - // do we have a tail? - return (length & 1) ? *sa.w == *sb.w : true; - } else { - // one of the addresses isn't 4-byte aligned but the other is - const quint16 *e = sa.w + length; - for ( ; sa.w != e; ++sa.w, ++sb.w) { - if (*sa.w != *sb.w) - return false; - } - } - return true; -} - QHashedStringRef QHashedStringRef::mid(int offset, int length) const { Q_ASSERT(offset < m_length); @@ -123,35 +69,20 @@ QVector<QHashedStringRef> QHashedStringRef::split(const QChar sep) const bool QHashedStringRef::endsWith(const QString &s) const { - return s.length() < m_length && - QHashedString::compare(s.constData(), m_data + m_length - s.length(), s.length()); + QStringView view {m_data, m_length}; + return view.endsWith(s); } bool QHashedStringRef::startsWith(const QString &s) const { - return s.length() < m_length && - QHashedString::compare(s.constData(), m_data, s.length()); -} - -static int findChar(const QChar *str, int len, QChar ch, int from) -{ - const ushort *s = (const ushort *)str; - ushort c = ch.unicode(); - if (from < 0) - from = qMax(from + len, 0); - if (from < len) { - const ushort *n = s + from - 1; - const ushort *e = s + len; - while (++n != e) - if (*n == c) - return n - s; - } - return -1; + QStringView view {m_data, m_length}; + return view.startsWith(s); } int QHashedStringRef::indexOf(const QChar &c, int from) const { - return findChar(m_data, m_length, c, from); + QStringView view {m_data, m_length}; + return view.indexOf(c, from); } QString QHashedStringRef::toString() const |