ExitAirTempSensor: Replace iterator pairs with structured bindings

Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
Change-Id: I9d536105564c725ee29c34ef0162cca6172daa43
diff --git a/src/ExitAirTempSensor.cpp b/src/ExitAirTempSensor.cpp
index e256bb1..3c1d7e4 100644
--- a/src/ExitAirTempSensor.cpp
+++ b/src/ExitAirTempSensor.cpp
@@ -593,25 +593,27 @@
         {
             return;
         }
-        for (const auto& item : subtree)
+        for (const auto& [path, matches] : subtree)
         {
-            size_t lastSlash = item.first.rfind('/');
-            if (lastSlash == std::string::npos ||
-                lastSlash == item.first.size() || item.second.empty())
+            size_t lastSlash = path.rfind('/');
+            if (lastSlash == std::string::npos || lastSlash == path.size() ||
+                matches.empty())
             {
                 continue;
             }
-            std::string sensorName = item.first.substr(lastSlash + 1);
+            std::string sensorName = path.substr(lastSlash + 1);
             if (boost::starts_with(sensorName, "PS") &&
                 boost::ends_with(sensorName, "Input_Power"))
             {
-                const std::string& path = item.first;
+                // lambda capture requires a proper variable (not a structured
+                // binding)
+                const std::string& cbPath = path;
                 self->dbusConnection->async_method_call(
-                    [weakRef, path](boost::system::error_code ec,
-                                    const std::variant<double>& value) {
+                    [weakRef, cbPath](boost::system::error_code ec,
+                                      const std::variant<double>& value) {
                     if (ec)
                     {
-                        std::cerr << "Error getting value from " << path
+                        std::cerr << "Error getting value from " << cbPath
                                   << "\n";
                     }
                     auto self = weakRef.lock();
@@ -623,11 +625,11 @@
                         std::visit(VariantToDoubleVisitor(), value);
                     if constexpr (debug)
                     {
-                        std::cerr << path << "Reading " << reading << "\n";
+                        std::cerr << cbPath << "Reading " << reading << "\n";
                     }
-                    self->powerReadings[path] = reading;
+                    self->powerReadings[cbPath] = reading;
                     },
-                    item.second[0].first, item.first, properties::interface,
+                    matches[0].first, cbPath, properties::interface,
                     properties::get, sensorValueInterface, "Value");
             }
         }
@@ -718,13 +720,13 @@
     }
 
     double totalPower = 0;
-    for (const auto& reading : powerReadings)
+    for (const auto& [path, reading] : powerReadings)
     {
-        if (std::isnan(reading.second))
+        if (std::isnan(reading))
         {
             continue;
         }
-        totalPower += reading.second;
+        totalPower += reading;
     }
 
     // Calculate power correction factor
@@ -869,58 +871,48 @@
         [&objectServer, &dbusConnection,
          &exitAirSensor](const ManagedObjectType& resp) {
         cfmSensors.clear();
-        for (const auto& pathPair : resp)
+        for (const auto& [path, interfaces] : resp)
         {
-            for (const auto& entry : pathPair.second)
+            for (const auto& [intf, cfg] : interfaces)
             {
-                if (entry.first == exitAirIface)
+                if (intf == exitAirIface)
                 {
                     // thresholds should be under the same path
                     std::vector<thresholds::Threshold> sensorThresholds;
-                    parseThresholdsFromConfig(pathPair.second,
-                                              sensorThresholds);
+                    parseThresholdsFromConfig(interfaces, sensorThresholds);
 
-                    std::string name =
-                        loadVariant<std::string>(entry.second, "Name");
+                    std::string name = loadVariant<std::string>(cfg, "Name");
                     exitAirSensor = std::make_shared<ExitAirTempSensor>(
-                        dbusConnection, name, pathPair.first.str, objectServer,
+                        dbusConnection, name, path.str, objectServer,
                         std::move(sensorThresholds));
                     exitAirSensor->powerFactorMin =
-                        loadVariant<double>(entry.second, "PowerFactorMin");
+                        loadVariant<double>(cfg, "PowerFactorMin");
                     exitAirSensor->powerFactorMax =
-                        loadVariant<double>(entry.second, "PowerFactorMax");
-                    exitAirSensor->qMin =
-                        loadVariant<double>(entry.second, "QMin");
-                    exitAirSensor->qMax =
-                        loadVariant<double>(entry.second, "QMax");
-                    exitAirSensor->alphaS =
-                        loadVariant<double>(entry.second, "AlphaS");
-                    exitAirSensor->alphaF =
-                        loadVariant<double>(entry.second, "AlphaF");
+                        loadVariant<double>(cfg, "PowerFactorMax");
+                    exitAirSensor->qMin = loadVariant<double>(cfg, "QMin");
+                    exitAirSensor->qMax = loadVariant<double>(cfg, "QMax");
+                    exitAirSensor->alphaS = loadVariant<double>(cfg, "AlphaS");
+                    exitAirSensor->alphaF = loadVariant<double>(cfg, "AlphaF");
                 }
-                else if (entry.first == cfmIface)
-
+                else if (intf == cfmIface)
                 {
                     // thresholds should be under the same path
                     std::vector<thresholds::Threshold> sensorThresholds;
-                    parseThresholdsFromConfig(pathPair.second,
-                                              sensorThresholds);
-                    std::string name =
-                        loadVariant<std::string>(entry.second, "Name");
+                    parseThresholdsFromConfig(interfaces, sensorThresholds);
+                    std::string name = loadVariant<std::string>(cfg, "Name");
                     auto sensor = std::make_shared<CFMSensor>(
-                        dbusConnection, name, pathPair.first.str, objectServer,
+                        dbusConnection, name, path.str, objectServer,
                         std::move(sensorThresholds), exitAirSensor);
-                    loadVariantPathArray(entry.second, "Tachs", sensor->tachs);
-                    sensor->maxCFM =
-                        loadVariant<double>(entry.second, "MaxCFM");
+                    loadVariantPathArray(cfg, "Tachs", sensor->tachs);
+                    sensor->maxCFM = loadVariant<double>(cfg, "MaxCFM");
 
                     // change these into percent upon getting the data
-                    sensor->c1 = loadVariant<double>(entry.second, "C1") / 100;
-                    sensor->c2 = loadVariant<double>(entry.second, "C2") / 100;
+                    sensor->c1 = loadVariant<double>(cfg, "C1") / 100;
+                    sensor->c2 = loadVariant<double>(cfg, "C2") / 100;
                     sensor->tachMinPercent =
-                        loadVariant<double>(entry.second, "TachMinPercent");
+                        loadVariant<double>(cfg, "TachMinPercent");
                     sensor->tachMaxPercent =
-                        loadVariant<double>(entry.second, "TachMaxPercent");
+                        loadVariant<double>(cfg, "TachMaxPercent");
                     sensor->createMaxCFMIface();
                     sensor->setupMatches();