From f3fcf46a7acb06e179f2a120c590187d796aaf68 Mon Sep 17 00:00:00 2001
From: Fabian Paus <fabian.paus@kit.edu>
Date: Mon, 25 Apr 2022 11:03:18 +0200
Subject: [PATCH] Get rid of <ArmarXCore/util/CPPUtility/Iterator.h> uses

The header is very expensive and is often used in cases where a simple for loop does the exact same thing..
---
 .../components/ArViz/Client/elements/Mesh.h        | 14 ++++++--------
 .../components/DebugDrawer/DebugDrawerHelper.cpp   |  7 ++++---
 .../NJointCartesianNaturalPositionController.cpp   |  4 ++--
 .../NJointCartesianWaypointController.cpp          |  7 ++++---
 .../RobotUnitModules/RobotUnitModuleLogging.cpp    |  5 +++--
 .../RobotUnitPluginWidgetController.cpp            |  5 +++--
 .../SkillManagerMonitorWidgetController.cpp        |  2 --
 .../visitors/AronTreeWidgetConverter.cpp           |  2 --
 .../visitors/AronTreeWidgetCreator.cpp             |  2 --
 .../visitors/AronTreeWidgetModalCreator.cpp        |  2 --
 10 files changed, 22 insertions(+), 28 deletions(-)

diff --git a/source/RobotAPI/components/ArViz/Client/elements/Mesh.h b/source/RobotAPI/components/ArViz/Client/elements/Mesh.h
index a75475aee..b2530de11 100644
--- a/source/RobotAPI/components/ArViz/Client/elements/Mesh.h
+++ b/source/RobotAPI/components/ArViz/Client/elements/Mesh.h
@@ -1,17 +1,15 @@
 #pragma once
 
-#include <functional>
-#include <numeric>  // for std::accumulate
-#include <vector>
+#include "ElementOps.h"
 
-#include <Eigen/Core>
+#include <RobotAPI/interface/ArViz/Elements.h>
 
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
-#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+#include <Eigen/Core>
 
-#include <RobotAPI/interface/ArViz/Elements.h>
+#include <functional>
+#include <numeric>  // for std::accumulate
+#include <vector>
 
-#include "ElementOps.h"
 
 namespace CGAL
 {
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.cpp b/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.cpp
index 2edd13823..e65fa6a4f 100644
--- a/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.cpp
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerHelper.cpp
@@ -25,7 +25,6 @@
 
 #include <VirtualRobot/math/Helpers.h>
 
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
@@ -188,16 +187,18 @@ namespace armarx::detail::DebugDrawerHelper
     void FrameView::drawPoses(const std::string& prefix, const std::vector<Eigen::Matrix4f>& poses)
     {
         ARMARX_TRACE;
-        for (const auto& [idx, pose] : MakeIndexedContainer(poses))
+        for (std::size_t idx = 0; idx < poses.size(); ++idx)
         {
+            Eigen::Matrix4f const& pose = poses[idx];
             drawPose(prefix + std::to_string(idx), pose);
         }
     }
     void FrameView::drawPoses(const std::string& prefix, const std::vector<Eigen::Matrix4f>& poses, float scale)
     {
         ARMARX_TRACE;
-        for (const auto& [idx, pose] : MakeIndexedContainer(poses))
+        for (std::size_t idx = 0; idx < poses.size(); ++idx)
         {
+            Eigen::Matrix4f const& pose = poses[idx];
             drawPose(prefix + std::to_string(idx), pose, scale);
         }
     }
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp
index 3cbe59bdf..ff1afaf68 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp
@@ -1,4 +1,3 @@
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
 #include <RobotAPI/components/units/RobotUnit/ControlTargets/ControlTarget1DoFActuator.h>
@@ -356,8 +355,9 @@ namespace armarx
 
             //write targets
             ARMARX_CHECK_EQUAL(static_cast<std::size_t>(goal.size()), _rtVelTargets.size());
-            for (const auto& [idx, ptr] : MakeIndexedContainer(_rtVelTargets))
+            for (std::size_t idx = 0; idx < _rtVelTargets.size(); ++idx)
             {
+                float* ptr = _rtVelTargets[idx];
                 *ptr = goal(idx);
             }
         }
diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianWaypointController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianWaypointController.cpp
index 0ae54afc6..2b53ca18e 100644
--- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianWaypointController.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianWaypointController.cpp
@@ -1,4 +1,3 @@
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
 #include <RobotAPI/components/units/RobotUnit/ControlTargets/ControlTarget1DoFActuator.h>
@@ -150,8 +149,9 @@ namespace armarx
         {
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-            for (const auto& [idx, ptr] : MakeIndexedContainer(_rtVelSensors))
+            for (std::size_t idx = 0; idx < _rtVelSensors.size(); ++idx)
             {
+                const float* ptr = _rtVelSensors[idx];
                 _rtJointVelocityFeedbackBuffer(idx) = *ptr;
             }
             _rtWpController->setCurrentJointVelocity(_rtJointVelocityFeedbackBuffer);
@@ -272,8 +272,9 @@ namespace armarx
             const Eigen::VectorXf& goal = _rtWpController->calculate(timeSinceLastIteration.toSecondsDouble());
             //write targets
             ARMARX_CHECK_EQUAL(static_cast<std::size_t>(goal.size()), _rtVelTargets.size());
-            for (const auto& [idx, ptr] : MakeIndexedContainer(_rtVelTargets))
+            for (std::size_t idx = 0; idx < _rtVelTargets.size(); ++idx)
             {
+                float* ptr = _rtVelTargets[idx];
                 *ptr = goal(idx);
             }
         }
diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleLogging.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleLogging.cpp
index 5cf5fed08..c1b9e88ca 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleLogging.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleLogging.cpp
@@ -27,7 +27,6 @@
 
 #include <ArmarXCore/core/ArmarXManager.h>
 #include <ArmarXCore/core/util/FileSystemPathBuilder.h>
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
 #include <ArmarXCore/util/CPPUtility/trace.h>
 
 #include "../util/ControlThreadOutputBuffer.h"
@@ -893,8 +892,10 @@ Logging::_postFinishDeviceInitialization()
             ValueMetaData data;
             const auto names = val->getDataFieldNames();
             data.fields.resize(names.size());
-            for (const auto& [fieldIdx, fieldName] : MakeIndexedContainer(names))
+
+            for (std::size_t fieldIdx = 0; fieldIdx < names.size(); ++fieldIdx)
             {
+                std::string const& fieldName = names[fieldIdx];
                 data.fields.at(fieldIdx).name = namePre + '.' + fieldName;
                 data.fields.at(fieldIdx).type = &(val->getDataFieldType(fieldIdx));
             }
diff --git a/source/RobotAPI/gui-plugins/RobotUnitPlugin/RobotUnitPlugin/RobotUnitPluginWidgetController.cpp b/source/RobotAPI/gui-plugins/RobotUnitPlugin/RobotUnitPlugin/RobotUnitPluginWidgetController.cpp
index 273a2d631..5e117d1e6 100644
--- a/source/RobotAPI/gui-plugins/RobotUnitPlugin/RobotUnitPlugin/RobotUnitPluginWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/RobotUnitPlugin/RobotUnitPlugin/RobotUnitPluginWidgetController.cpp
@@ -31,7 +31,6 @@
 #include <QSortFilterProxyModel>
 #include <QAction>
 
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
 #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 #include <ArmarXCore/core/util/FileSystemPathBuilder.h>
@@ -523,8 +522,10 @@ void armarx::RobotUnitPluginWidgetController::on_lineEditLoggingFilter_textChang
         }
     }
     widget.treeWidgetLoggingNames->blockSignals(true);
-    for (auto item : MakeReversedRange(loggingData.allItems))
+    // Iterate in reverse order
+    for (auto iter = loggingData.allItems.rbegin(); iter != loggingData.allItems.rend(); ++iter)
     {
+        QTreeWidgetItem* item = *iter;
         loggingData.updateCheckStateUpward(item, false);
     }
     widget.treeWidgetLoggingNames->blockSignals(false);
diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
index 431ce92ca..e9942f7ec 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp
@@ -22,8 +22,6 @@
 
 #include <string>
 
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
-
 #include "SkillManagerMonitorWidgetController.h"
 
 #include "aronTreeWidget/visitors/AronTreeWidgetCreator.h"
diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.cpp
index e9effb321..0da02a754 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.cpp
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetConverter.cpp
@@ -22,8 +22,6 @@
 
 #include <string>
 
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
-
 #include "AronTreeWidgetConverter.h"
 
 // debug
diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.cpp
index b3a868208..37a59c62a 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.cpp
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetCreator.cpp
@@ -22,8 +22,6 @@
 
 #include <string>
 
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
-
 #include "AronTreeWidgetCreator.h"
 
 // debug
diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.cpp
index a2a2240d3..201089459 100644
--- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.cpp
+++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/aronTreeWidget/visitors/AronTreeWidgetModalCreator.cpp
@@ -22,8 +22,6 @@
 
 #include <string>
 
-#include <ArmarXCore/util/CPPUtility/Iterator.h>
-
 #include "AronTreeWidgetModalCreator.h"
 
 #include <SimoxUtility/algorithm/string.h>
-- 
GitLab