void QUrl::setUrl(const QString &url, ParsingMode parsingMode)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
detach(lock);
d->clear();
void QUrl::setEncodedUrl(const QByteArray &encodedUrl, ParsingMode parsingMode)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
detach(lock);
+
d->clear();
d->setEncodedUrl(encodedUrl, parsingMode);
}
void QUrl::setScheme(const QString &scheme)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QString QUrl::scheme() const
{
if (!d) return QString();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
return d->scheme;
}
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QURL_UNSETFLAG(d->stateFlags, QUrlPrivate::Validated | QUrlPrivate::Normalized | QUrlPrivate::HostCanonicalized);
+
d->setAuthority(authority);
}
void QUrl::setEncodedUserName(const QByteArray &userName)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QByteArray QUrl::encodedUserName() const
{
if (!d) return QByteArray();
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
QString QUrl::password() const
{
if (!d) return QString();
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
void QUrl::setEncodedPassword(const QByteArray &password)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QByteArray QUrl::encodedPassword() const
{
if (!d) return QByteArray();
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
void QUrl::setHost(const QString &host)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QString QUrl::host() const
{
if (!d) return QString();
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
void QUrl::setPort(int port)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QURL_UNSETFLAG(d->stateFlags, QUrlPrivate::Validated | QUrlPrivate::Normalized);
- if (port < -1 || port > 65535) {
+ if (Q_UNLIKELY(port < -1 || port > 65535)) {
qWarning("QUrl::setPort: Out of range");
port = -1;
}
int QUrl::port(int defaultPort) const
{
if (!d) return defaultPort;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
+
return d->port == -1 ? defaultPort : d->port;
}
void QUrl::setPath(const QString &path)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QString QUrl::path() const
{
if (!d) return QString();
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
void QUrl::setEncodedPath(const QByteArray &path)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QByteArray QUrl::encodedPath() const
{
if (!d) return QByteArray();
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
bool QUrl::hasQuery() const
{
if (!d) return false;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
return d->hasQuery;
}
void QUrl::setQueryDelimiters(char valueDelimiter, char pairDelimiter)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
detach(lock);
void QUrl::setEncodedQuery(const QByteArray &query)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
void QUrl::setQueryItems(const QList<QPair<QString, QString> > &query)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
void QUrl::setEncodedQueryItems(const QList<QPair<QByteArray, QByteArray> > &query)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
void QUrl::addQueryItem(const QString &key, const QString &value)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
void QUrl::addEncodedQueryItem(const QByteArray &key, const QByteArray &value)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QList<QPair<QString, QString> > QUrl::queryItems() const
{
if (!d) return QList<QPair<QString, QString> >();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
QList<QPair<QString, QString> > itemMap;
QList<QPair<QByteArray, QByteArray> > QUrl::encodedQueryItems() const
{
if (!d) return QList<QPair<QByteArray, QByteArray> >();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
QList<QPair<QByteArray, QByteArray> > itemMap;
*/
bool QUrl::hasQueryItem(const QString &key) const
{
- if (!d) return false;
return hasEncodedQueryItem(toPercentEncoding(key, queryExcludeChars));
}
bool QUrl::hasEncodedQueryItem(const QByteArray &key) const
{
if (!d) return false;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
int pos = 0;
const char *query = d->query.constData();
QByteArray QUrl::encodedQueryItemValue(const QByteArray &key) const
{
if (!d) return QByteArray();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
int pos = 0;
const char *query = d->query.constData();
QStringList QUrl::allQueryItemValues(const QString &key) const
{
if (!d) return QStringList();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
QByteArray encodedKey = toPercentEncoding(key, queryExcludeChars);
QStringList values;
QList<QByteArray> QUrl::allEncodedQueryItemValues(const QByteArray &key) const
{
if (!d) return QList<QByteArray>();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
QList<QByteArray> values;
*/
void QUrl::removeQueryItem(const QString &key)
{
- if (!d) return;
removeEncodedQueryItem(toPercentEncoding(key, queryExcludeChars));
}
void QUrl::removeEncodedQueryItem(const QByteArray &key)
{
if (!d) return;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
*/
void QUrl::removeAllQueryItems(const QString &key)
{
- if (!d) return;
removeAllEncodedQueryItems(toPercentEncoding(key, queryExcludeChars));
}
void QUrl::removeAllEncodedQueryItems(const QByteArray &key)
{
if (!d) return;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QByteArray QUrl::encodedQuery() const
{
if (!d) return QByteArray();
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
return d->query;
}
void QUrl::setFragment(const QString &fragment)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QString QUrl::fragment() const
{
if (!d) return QString();
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
void QUrl::setEncodedFragment(const QByteArray &fragment)
{
if (!d) d = new QUrlPrivate;
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach(lock);
QByteArray QUrl::encodedFragment() const
{
if (!d) return QByteArray();
+
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
bool QUrl::hasFragment() const
{
if (!d) return false;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
return d->hasFragment;
}
bool QUrl::isRelative() const
{
if (!d) return true;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
return d->scheme.isEmpty();
}
QString QUrl::toString(FormattingOptions options) const
{
if (!d) return QString();
+
QString ourPath = path();
QMutexLocker lock(&d->mutex);
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
QByteArray QUrl::toEncoded(FormattingOptions options) const
{
if (!d) return QByteArray();
+
QMutexLocker lock(&d->mutex);
+
return d->toEncoded(options);
}
bool QUrl::isLocalFile() const
{
if (!d) return false;
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
- QMutexLocker lock(&d->mutex);
- d->parse();
- }
+
+ QMutexLocker lock(&d->mutex);
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
if (d->scheme.compare(QLatin1String("file"), Qt::CaseInsensitive) != 0)
return false; // not file
&& (childUrl.authority().isEmpty())
&& childPath.length() > 0 && childPath.at(0) == QLatin1Char('/'));
- if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) {
+ {
QMutexLocker lock(&d->mutex);
- d->parse();
+ if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
}
QString ourPath = path();