Optimise QHostAddress a little

In QHostAddress::setAddress(SpecialAddress), avoid parsing strings.

Change-Id: Icb756b4c8b06c21dbc231f8c7f0b0dac29ed97c3
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
This commit is contained in:
Thiago Macieira 2011-10-17 13:46:44 +02:00 committed by Qt by Nokia
parent 1882cf1c9d
commit bd384427c4

View File

@ -107,13 +107,14 @@ public:
bool parse(); bool parse();
void clear(); void clear();
QString ipString;
QString scopeId;
quint32 a; // IPv4 address quint32 a; // IPv4 address
Q_IPV6ADDR a6; // IPv6 address Q_IPV6ADDR a6; // IPv6 address
QAbstractSocket::NetworkLayerProtocol protocol; QAbstractSocket::NetworkLayerProtocol protocol;
QString ipString;
bool isParsed; bool isParsed;
QString scopeId;
friend class QHostAddress; friend class QHostAddress;
}; };
@ -556,23 +557,27 @@ QHostAddress::QHostAddress(const QHostAddress &address)
QHostAddress::QHostAddress(SpecialAddress address) QHostAddress::QHostAddress(SpecialAddress address)
: d(new QHostAddressPrivate) : d(new QHostAddressPrivate)
{ {
Q_IPV6ADDR ip6;
memset(&ip6, 0, sizeof ip6);
switch (address) { switch (address) {
case Null: case Null:
break; break;
case Broadcast: case Broadcast:
setAddress(QLatin1String("255.255.255.255")); d->setAddress(quint32(-1));
break; break;
case LocalHost: case LocalHost:
setAddress(QLatin1String("127.0.0.1")); d->setAddress(0x7f000001);
break; break;
case LocalHostIPv6: case LocalHostIPv6:
setAddress(QLatin1String("::1")); ip6[15] = 1;
d->setAddress(ip6);
break; break;
case AnyIPv4: case AnyIPv4:
setAddress(QLatin1String("0.0.0.0")); setAddress(0u);
break; break;
case AnyIPv6: case AnyIPv6:
setAddress(QLatin1String("::")); d->setAddress(ip6);
break; break;
case Any: case Any:
d->clear(); d->clear();