Optimize QHostAddress::operator== for SpecialAddress
There's no need to allocate memory for the special address. Change-Id: I5f3760565807731ab595e91fc934c21d10df212a Reviewed-by: Richard J. Moore <rich@kde.org>
This commit is contained in:
parent
8761b2b5d9
commit
05d39ec9c0
@ -778,18 +778,34 @@ bool QHostAddress::operator==(const QHostAddress &other) const
|
|||||||
bool QHostAddress::operator ==(SpecialAddress other) const
|
bool QHostAddress::operator ==(SpecialAddress other) const
|
||||||
{
|
{
|
||||||
QT_ENSURE_PARSED(this);
|
QT_ENSURE_PARSED(this);
|
||||||
QHostAddress otherAddress(other);
|
switch (other) {
|
||||||
QT_ENSURE_PARSED(&otherAddress);
|
case Null:
|
||||||
|
return d->protocol == QAbstractSocket::UnknownNetworkLayerProtocol;
|
||||||
|
|
||||||
if (d->protocol == QAbstractSocket::IPv4Protocol)
|
case Broadcast:
|
||||||
return otherAddress.d->protocol == QAbstractSocket::IPv4Protocol && d->a == otherAddress.d->a;
|
return d->protocol == QAbstractSocket::IPv4Protocol && d->a == INADDR_BROADCAST;
|
||||||
if (d->protocol == QAbstractSocket::IPv6Protocol) {
|
|
||||||
return otherAddress.d->protocol == QAbstractSocket::IPv6Protocol
|
case LocalHost:
|
||||||
&& memcmp(&d->a6, &otherAddress.d->a6, sizeof(Q_IPV6ADDR)) == 0;
|
return d->protocol == QAbstractSocket::IPv4Protocol && d->a == INADDR_LOOPBACK;
|
||||||
|
|
||||||
|
case Any:
|
||||||
|
return d->protocol == QAbstractSocket::AnyIPProtocol;
|
||||||
|
|
||||||
|
case AnyIPv4:
|
||||||
|
return d->protocol == QAbstractSocket::IPv4Protocol && d->a == INADDR_ANY;
|
||||||
|
|
||||||
|
case LocalHostIPv6:
|
||||||
|
case AnyIPv6:
|
||||||
|
if (d->protocol == QAbstractSocket::IPv6Protocol) {
|
||||||
|
Q_IPV6ADDR ip6 = { { 0 } };
|
||||||
|
ip6[15] = quint8(other == LocalHostIPv6); // 1 for localhost, 0 for any
|
||||||
|
return memcmp(&d->a6, &ip6, sizeof ip6) == 0;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (d->protocol == QAbstractSocket::AnyIPProtocol)
|
|
||||||
return other == QHostAddress::Any;
|
Q_UNREACHABLE();
|
||||||
return int(other) == int(Null);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user