From 3a1e9f3023a0d84b81f27e74ef8490d1f35f0f27 Mon Sep 17 00:00:00 2001 From: Zach Nelson Date: Sun, 7 Jun 2026 07:27:20 -0500 Subject: [PATCH] refactor: Dedupe wifi scan in-place without std::map (#2262) ## Summary `std::map` heap-allocates each node. Avoid using it for wifi SSID dedupe, and instead just dedupe in-place with the existing `networks` vector. Removed dead `ipAddress` member in `WifiNetworkInfo` struct. --- ### AI Usage Did you use AI tools to help write this code? _**PARTIALLY**_ --- .../network/WifiSelectionActivity.cpp | 32 ++++++++----------- .../network/WifiSelectionActivity.h | 1 - 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/activities/network/WifiSelectionActivity.cpp b/src/activities/network/WifiSelectionActivity.cpp index 515cb9e1..9d473699 100644 --- a/src/activities/network/WifiSelectionActivity.cpp +++ b/src/activities/network/WifiSelectionActivity.cpp @@ -6,8 +6,6 @@ #include #include -#include - #include "CrossPointSettings.h" #include "MappedInputManager.h" #include "WifiCredentialStore.h" @@ -118,39 +116,35 @@ void WifiSelectionActivity::processWifiScanResults() { return; } - // Scan complete, process results - // Use a map to deduplicate networks by SSID, keeping the strongest signal - std::map uniqueNetworks; + // Scan complete, process results — deduplicate in-place, keeping strongest signal + networks.clear(); + networks.reserve(scanResult); for (int i = 0; i < scanResult; i++) { - std::string ssid = WiFi.SSID(i).c_str(); + char ssid[33]; + strlcpy(ssid, WiFi.SSID(i).c_str(), sizeof(ssid)); const int32_t rssi = WiFi.RSSI(i); // Skip hidden networks (empty SSID) - if (ssid.empty()) { + if (ssid[0] == '\0') { continue; } - // Check if we've already seen this SSID - auto it = uniqueNetworks.find(ssid); - if (it == uniqueNetworks.end() || rssi > it->second.rssi) { - // New network or stronger signal than existing entry + auto it = + std::find_if(networks.begin(), networks.end(), [&ssid](const WifiNetworkInfo& n) { return n.ssid == ssid; }); + if (it == networks.end()) { WifiNetworkInfo network; network.ssid = ssid; network.rssi = rssi; network.isEncrypted = (WiFi.encryptionType(i) != WIFI_AUTH_OPEN); network.hasSavedPassword = WIFI_STORE.hasSavedCredential(network.ssid); - uniqueNetworks[ssid] = network; + networks.push_back(std::move(network)); + } else if (rssi > it->rssi) { + it->rssi = rssi; + it->isEncrypted = (WiFi.encryptionType(i) != WIFI_AUTH_OPEN); } } - // Convert map to vector - networks.clear(); - for (const auto& pair : uniqueNetworks) { - // cppcheck-suppress useStlAlgorithm - networks.push_back(pair.second); - } - // Sort: saved-password networks first, then by signal strength (strongest first) std::sort(networks.begin(), networks.end(), [](const WifiNetworkInfo& a, const WifiNetworkInfo& b) { if (a.hasSavedPassword != b.hasSavedPassword) { diff --git a/src/activities/network/WifiSelectionActivity.h b/src/activities/network/WifiSelectionActivity.h index baacf4da..4b534d17 100644 --- a/src/activities/network/WifiSelectionActivity.h +++ b/src/activities/network/WifiSelectionActivity.h @@ -18,7 +18,6 @@ struct WifiNetworkInfo { int32_t rssi; bool isEncrypted; bool hasSavedPassword; // Whether we have saved credentials for this network - std::string ipAddress; // Populated after connection for display }; // WiFi selection states