From 69b2ea72f50f6f9f5341fe033a8a82f80a452e43 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Mon, 26 Jun 2023 15:33:05 +0200
Subject: [PATCH] Move code

---
 .../display_visitors/DataDisplayVisitor.cpp   | 72 +++++++++++++++----
 .../display_visitors/DataDisplayVisitor.h     |  4 ++
 .../display_visitors/StringStreamMixin.cpp    |  5 ++
 .../display_visitors/StringStreamMixin.h      | 11 ++-
 .../TypedDataDisplayVisitor.cpp               | 26 +------
 .../TypedDataDisplayVisitor.h                 |  5 --
 6 files changed, 80 insertions(+), 43 deletions(-)

diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp
index 99f95201e..ff3c4df2e 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp
@@ -5,26 +5,30 @@
 namespace armarx::aron
 {
 
-    std::string DataDisplayVisitor::getValue(const data::VariantPtr& n)
+    std::string
+    DataDisplayVisitor::getValue(const data::VariantPtr& n)
     {
         DataDisplayVisitor v;
         data::visit(v, n);
         return v.value.str();
     }
 
-    void DataDisplayVisitor::visitDict(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitDict(const data::VariantPtr& n)
     {
         auto x = data::Dict::DynamicCastAndCheck(n);
         value << x->childrenSize() << " items";
     }
 
-    void DataDisplayVisitor::visitList(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitList(const data::VariantPtr& n)
     {
         auto x = data::List::DynamicCastAndCheck(n);
         value << x->childrenSize() << " items";
     }
 
-    void DataDisplayVisitor::visitBool(const data::VariantPtr& b)
+    void
+    DataDisplayVisitor::visitBool(const data::VariantPtr& b)
     {
         auto x = data::Bool::DynamicCastAndCheck(b);
         if (x->getValue())
@@ -37,41 +41,83 @@ namespace armarx::aron
         }
     }
 
-    void DataDisplayVisitor::visitDouble(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitDouble(const data::VariantPtr& n)
     {
         auto x = data::Double::DynamicCastAndCheck(n);
         value << x->getValue();
     }
 
-    void DataDisplayVisitor::visitFloat(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitFloat(const data::VariantPtr& n)
     {
         auto x = data::Float::DynamicCastAndCheck(n);
         value << x->getValue();
     }
 
-    void DataDisplayVisitor::visitInt(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitInt(const data::VariantPtr& n)
     {
         auto x = data::Int::DynamicCastAndCheck(n);
         value << x->getValue();
     }
 
-    void DataDisplayVisitor::visitLong(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitLong(const data::VariantPtr& n)
     {
         auto x = data::Long::DynamicCastAndCheck(n);
         value << x->getValue();
     }
 
-    void DataDisplayVisitor::visitString(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitString(const data::VariantPtr& n)
     {
         auto x = data::String::DynamicCastAndCheck(n);
         value << "'" << x->getValue() << "'";
     }
 
-    void DataDisplayVisitor::visitNDArray(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitNDArray(const data::VariantPtr& data)
     {
-        auto x = data::NDArray::DynamicCastAndCheck(n);
-        value << "shape " << aron::data::NDArray::DimensionsToString(x->getShape()) << ", type '" << x->getType() << "'";
+        auto d = data::NDArray::DynamicCastAndCheck(data);
+
+        auto base = [this, &d]()
+        {
+            value << "shape " << aron::data::NDArray::DimensionsToString(d->getShape())
+                  << ", type '" << d->getType() << "'";
+        };
+
+        if (std::max(d->getShape().at(0), d->getShape().at(1)) > 10)
+        {
+            // Just show the shape.
+            base();
+        }
+        else if (d->getType() == "float")
+        {
+            setStreamPrecision();
+            processMatrix<float>(*d);
+        }
+        else if (d->getType() == "double")
+        {
+            setStreamPrecision();
+            processMatrix<double>(*d);
+        }
+        else
+        {
+            base();
+        }
+    }
+
+    template <typename ScalarT>
+    void
+    DataDisplayVisitor::processMatrix(const data::NDArray& data)
+    {
+        Eigen::Map<Eigen::Matrix<ScalarT, Eigen::Dynamic, Eigen::Dynamic>> m(
+            reinterpret_cast<ScalarT*>(data.getData()),
+            data.getShape().at(0),
+            data.getShape().at(1));
+        value << m.format(eigenIof);
     }
 
 
-}
+} // namespace armarx::aron
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h
index d63410012..8f15373c0 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h
@@ -27,6 +27,10 @@ namespace armarx::aron
         void visitString(const data::VariantPtr& n) override;
 
         void visitNDArray(const data::VariantPtr& n) override;
+
+    private:
+        template <typename ScalarT>
+        void processMatrix(const data::NDArray& data);
     };
 
 } // namespace armarx::aron
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp
index 72ee86e05..768a69b88 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp
@@ -4,6 +4,11 @@
 
 namespace armarx::aron
 {
+    StringStreamMixin::StringStreamMixin() :
+        coeffSep("  "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "")
+    {
+    }
+
     void
     StringStreamMixin::setStreamPrecision()
     {
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h
index 1b3316af4..01dfb9d91 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h
@@ -2,17 +2,26 @@
 
 #include <sstream>
 
+#include <Eigen/Core>
+
 namespace armarx::aron
 {
 
     class StringStreamMixin
     {
     public:
-        std::stringstream value;
+        StringStreamMixin();
 
     protected:
         void setStreamPrecision();
         void setStreamPrecision(std::ostream& os);
+
+    public:
+        std::stringstream value;
+
+    protected:
+        const std::string coeffSep;
+        const Eigen::IOFormat eigenIof;
     };
 
 } // namespace armarx::aron
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
index b51cf38df..e9bb7bc44 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
@@ -24,8 +24,7 @@ namespace armarx::aron
         return v.value.str();
     }
 
-    TypedDataDisplayVisitor::TypedDataDisplayVisitor() :
-        coeffSep("  "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "")
+    TypedDataDisplayVisitor::TypedDataDisplayVisitor()
     {
     }
 
@@ -160,28 +159,7 @@ namespace armarx::aron
     void
     TypedDataDisplayVisitor::visitMatrix(const data::VariantPtr& data, const type::VariantPtr& type)
     {
-        auto t = *type::Matrix::DynamicCastAndCheck(type);
-        auto d = *data::NDArray::DynamicCastAndCheck(data);
-
-        if (std::max(d.getShape().at(0), d.getShape().at(1)) > 10)
-        {
-            // Just show the shape.
-            value << DataDisplayVisitor::getValue(data);
-        }
-        else if (d.getType() == "float")
-        {
-            setStreamPrecision();
-            processMatrix<float>(t, d);
-        }
-        else if (d.getType() == "double")
-        {
-            setStreamPrecision();
-            processMatrix<double>(t, d);
-        }
-        else
-        {
-            value << DataDisplayVisitor::getValue(data);
-        }
+        value << DataDisplayVisitor::getValue(data);
     }
 
     void
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h
index 6700f9569..cdbcf6912 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h
@@ -45,11 +45,6 @@ namespace armarx::aron
         // What about NDArray? currently defaulted
 
 
-    protected:
-        std::string coeffSep;
-        Eigen::IOFormat eigenIof;
-
-
     private:
         template <typename ScalarT>
         void processMatrix(const type::Matrix&, const data::NDArray& data);
-- 
GitLab