QStringMatcher: add QStringView support
While touching the code, deduplicate some methods. Change-Id: I28f469f0e9ae000a34466b0ecc604b5f3bd09e63 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
29a70348d4
commit
b35eec360d
@ -1,6 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Copyright (C) 2019 Mail.ru Group.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtCore module of the Qt Toolkit.
|
** This file is part of the QtCore module of the Qt Toolkit.
|
||||||
@ -175,13 +176,26 @@ QStringMatcher::QStringMatcher(const QString &pattern, Qt::CaseSensitivity cs)
|
|||||||
by \a uc with the given \a length and case sensitivity specified by \a cs.
|
by \a uc with the given \a length and case sensitivity specified by \a cs.
|
||||||
*/
|
*/
|
||||||
QStringMatcher::QStringMatcher(const QChar *uc, int len, Qt::CaseSensitivity cs)
|
QStringMatcher::QStringMatcher(const QChar *uc, int len, Qt::CaseSensitivity cs)
|
||||||
: d_ptr(0), q_cs(cs)
|
: QStringMatcher(QStringView(uc, len), cs)
|
||||||
{
|
{
|
||||||
p.uc = uc;
|
|
||||||
p.len = len;
|
|
||||||
bm_init_skiptable((const ushort *)p.uc, len, p.q_skiptable, cs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QStringMatcher::QStringMatcher(QStringView str, Qt::CaseSensitivity cs)
|
||||||
|
\since 5.14
|
||||||
|
|
||||||
|
Constructs a string matcher that will search for \a pattern, with
|
||||||
|
case sensitivity \a cs.
|
||||||
|
|
||||||
|
Call indexIn() to perform a search.
|
||||||
|
*/
|
||||||
|
QStringMatcher::QStringMatcher(QStringView str, Qt::CaseSensitivity cs)
|
||||||
|
: d_ptr(nullptr), q_cs(cs)
|
||||||
|
{
|
||||||
|
p.uc = str.data();
|
||||||
|
p.len = int(str.size());
|
||||||
|
bm_init_skiptable((const ushort *)p.uc, p.len, p.q_skiptable, cs);
|
||||||
|
}
|
||||||
/*!
|
/*!
|
||||||
Copies the \a other string matcher to this string matcher.
|
Copies the \a other string matcher to this string matcher.
|
||||||
*/
|
*/
|
||||||
@ -267,11 +281,7 @@ void QStringMatcher::setCaseSensitivity(Qt::CaseSensitivity cs)
|
|||||||
*/
|
*/
|
||||||
int QStringMatcher::indexIn(const QString &str, int from) const
|
int QStringMatcher::indexIn(const QString &str, int from) const
|
||||||
{
|
{
|
||||||
if (from < 0)
|
return int(indexIn(QStringView(str), from));
|
||||||
from = 0;
|
|
||||||
return bm_find((const ushort *)str.unicode(), str.size(), from,
|
|
||||||
(const ushort *)p.uc, p.len,
|
|
||||||
p.q_skiptable, q_cs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -287,10 +297,26 @@ int QStringMatcher::indexIn(const QString &str, int from) const
|
|||||||
\sa setPattern(), setCaseSensitivity()
|
\sa setPattern(), setCaseSensitivity()
|
||||||
*/
|
*/
|
||||||
int QStringMatcher::indexIn(const QChar *str, int length, int from) const
|
int QStringMatcher::indexIn(const QChar *str, int length, int from) const
|
||||||
|
{
|
||||||
|
return int(indexIn(QStringView(str, length), from));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 5.14
|
||||||
|
|
||||||
|
Searches the string \a str from character position \a from
|
||||||
|
(default 0, i.e. from the first character), for the string
|
||||||
|
pattern() that was set in the constructor or in the most recent
|
||||||
|
call to setPattern(). Returns the position where the pattern()
|
||||||
|
matched in \a str, or -1 if no match was found.
|
||||||
|
|
||||||
|
\sa setPattern(), setCaseSensitivity()
|
||||||
|
*/
|
||||||
|
qsizetype QStringMatcher::indexIn(QStringView str, qsizetype from) const
|
||||||
{
|
{
|
||||||
if (from < 0)
|
if (from < 0)
|
||||||
from = 0;
|
from = 0;
|
||||||
return bm_find((const ushort *)str, length, from,
|
return bm_find((const ushort *)str.data(), str.size(), from,
|
||||||
(const ushort *)p.uc, p.len,
|
(const ushort *)p.uc, p.len,
|
||||||
p.q_skiptable, q_cs);
|
p.q_skiptable, q_cs);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Copyright (C) 2019 Mail.ru Group.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the QtCore module of the Qt Toolkit.
|
** This file is part of the QtCore module of the Qt Toolkit.
|
||||||
@ -41,6 +42,7 @@
|
|||||||
#define QSTRINGMATCHER_H
|
#define QSTRINGMATCHER_H
|
||||||
|
|
||||||
#include <QtCore/qstring.h>
|
#include <QtCore/qstring.h>
|
||||||
|
#include <QtCore/qstringview.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -55,6 +57,8 @@ public:
|
|||||||
Qt::CaseSensitivity cs = Qt::CaseSensitive);
|
Qt::CaseSensitivity cs = Qt::CaseSensitive);
|
||||||
QStringMatcher(const QChar *uc, int len,
|
QStringMatcher(const QChar *uc, int len,
|
||||||
Qt::CaseSensitivity cs = Qt::CaseSensitive);
|
Qt::CaseSensitivity cs = Qt::CaseSensitive);
|
||||||
|
QStringMatcher(QStringView pattern,
|
||||||
|
Qt::CaseSensitivity cs = Qt::CaseSensitive);
|
||||||
QStringMatcher(const QStringMatcher &other);
|
QStringMatcher(const QStringMatcher &other);
|
||||||
~QStringMatcher();
|
~QStringMatcher();
|
||||||
|
|
||||||
@ -65,6 +69,7 @@ public:
|
|||||||
|
|
||||||
int indexIn(const QString &str, int from = 0) const;
|
int indexIn(const QString &str, int from = 0) const;
|
||||||
int indexIn(const QChar *str, int length, int from = 0) const;
|
int indexIn(const QChar *str, int length, int from = 0) const;
|
||||||
|
qsizetype indexIn(QStringView str, qsizetype from = 0) const;
|
||||||
QString pattern() const;
|
QString pattern() const;
|
||||||
inline Qt::CaseSensitivity caseSensitivity() const { return q_cs; }
|
inline Qt::CaseSensitivity caseSensitivity() const { return q_cs; }
|
||||||
|
|
||||||
|
@ -100,6 +100,11 @@ void tst_QStringMatcher::indexIn()
|
|||||||
matcher.setPattern(needle);
|
matcher.setPattern(needle);
|
||||||
|
|
||||||
QCOMPARE(matcher.indexIn(haystack, from), indexIn);
|
QCOMPARE(matcher.indexIn(haystack, from), indexIn);
|
||||||
|
|
||||||
|
const auto needleSV = QStringView(needle);
|
||||||
|
QStringMatcher matcherSV(needleSV);
|
||||||
|
|
||||||
|
QCOMPARE(matcherSV.indexIn(QStringView(haystack), from), indexIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QStringMatcher::setCaseSensitivity_data()
|
void tst_QStringMatcher::setCaseSensitivity_data()
|
||||||
@ -128,6 +133,7 @@ void tst_QStringMatcher::setCaseSensitivity()
|
|||||||
matcher.setCaseSensitivity(static_cast<Qt::CaseSensitivity> (cs));
|
matcher.setCaseSensitivity(static_cast<Qt::CaseSensitivity> (cs));
|
||||||
|
|
||||||
QCOMPARE(matcher.indexIn(haystack, from), indexIn);
|
QCOMPARE(matcher.indexIn(haystack, from), indexIn);
|
||||||
|
QCOMPARE(matcher.indexIn(QStringView(haystack), from), indexIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QStringMatcher::assignOperator()
|
void tst_QStringMatcher::assignOperator()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user