From 6eac22e2cabc51ce3b0ef0eda38b6c50bb343f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Tue, 23 May 2023 12:31:40 +0200 Subject: [PATCH] Network chat: avoid double lookups into hash Task-number: QTBUG-108873 Change-Id: Iafa5a7a1ec99d2414f175f2d30fe03a90c6716f3 Reviewed-by: Konrad Kujawa Reviewed-by: Timur Pocheptsov --- examples/network/network-chat/client.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/examples/network/network-chat/client.cpp b/examples/network/network-chat/client.cpp index 126319c9087..8d33a016423 100644 --- a/examples/network/network-chat/client.cpp +++ b/examples/network/network-chat/client.cpp @@ -7,6 +7,9 @@ #include +#include +#include + Client::Client() : peerManager(new PeerManager(this)) { @@ -36,14 +39,15 @@ QString Client::nickName() const bool Client::hasConnection(const QHostAddress &senderIp, int senderPort) const { - if (senderPort == -1) - return peers.contains(senderIp); - - if (!peers.contains(senderIp)) + auto [begin, end] = peers.equal_range(senderIp); + if (begin == peers.constEnd()) return false; - const QList connections = peers.values(senderIp); - for (const Connection *connection : connections) { + if (senderPort == -1) + return true; + + for (; begin != end; ++begin) { + Connection *connection = *begin; if (connection->peerPort() == senderPort) return true; } @@ -90,8 +94,7 @@ void Client::connectionError(QAbstractSocket::SocketError /* socketError */) void Client::removeConnection(Connection *connection) { - if (peers.contains(connection->peerAddress())) { - peers.remove(connection->peerAddress()); + if (peers.remove(connection->peerAddress()) > 0) { QString nick = connection->name(); if (!nick.isEmpty()) emit participantLeft(nick);