summaryrefslogtreecommitdiffstats
path: root/src/network/kernel/qhostaddress.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2011-10-17 13:46:44 +0200
committerQt by Nokia <qt-info@nokia.com>2012-03-23 19:43:00 +0100
commitbd384427c437f8e57a6543e7612c9b70ec908ff7 (patch)
tree1b887b0cd2de52cf4d370e09e648ee8e128b7784 /src/network/kernel/qhostaddress.cpp
parent1882cf1c9d68e0c325c89f0bdf368b47206f19e0 (diff)
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>
Diffstat (limited to 'src/network/kernel/qhostaddress.cpp')
-rw-r--r--src/network/kernel/qhostaddress.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp
index 230abb86aa..92404344b9 100644
--- a/src/network/kernel/qhostaddress.cpp
+++ b/src/network/kernel/qhostaddress.cpp
@@ -107,13 +107,14 @@ public:
bool parse();
void clear();
+ QString ipString;
+ QString scopeId;
+
quint32 a; // IPv4 address
Q_IPV6ADDR a6; // IPv6 address
QAbstractSocket::NetworkLayerProtocol protocol;
- QString ipString;
bool isParsed;
- QString scopeId;
friend class QHostAddress;
};
@@ -556,23 +557,27 @@ QHostAddress::QHostAddress(const QHostAddress &address)
QHostAddress::QHostAddress(SpecialAddress address)
: d(new QHostAddressPrivate)
{
+ Q_IPV6ADDR ip6;
+ memset(&ip6, 0, sizeof ip6);
+
switch (address) {
case Null:
break;
case Broadcast:
- setAddress(QLatin1String("255.255.255.255"));
+ d->setAddress(quint32(-1));
break;
case LocalHost:
- setAddress(QLatin1String("127.0.0.1"));
+ d->setAddress(0x7f000001);
break;
case LocalHostIPv6:
- setAddress(QLatin1String("::1"));
+ ip6[15] = 1;
+ d->setAddress(ip6);
break;
case AnyIPv4:
- setAddress(QLatin1String("0.0.0.0"));
+ setAddress(0u);
break;
case AnyIPv6:
- setAddress(QLatin1String("::"));
+ d->setAddress(ip6);
break;
case Any:
d->clear();