From 5832004dd97d96926ad01d1ed97bde29104bac9d Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Wed, 4 Aug 2021 18:22:54 +0200
Subject: [PATCH] Add forward_declarations headers for ARON navigators, use
 them (reduces compile time)

---
 .../RobotAPI/libraries/armem/core/Commit.cpp  |  4 ++-
 source/RobotAPI/libraries/armem/core/Commit.h |  9 ++---
 .../armem/core/base/EntitySnapshotBase.cpp    | 10 ++++++
 .../armem/core/base/EntitySnapshotBase.h      |  4 +++
 .../armem/core/diskmemory/EntityInstance.cpp  | 12 ++++---
 .../armem/core/diskmemory/EntityInstance.h    |  3 +-
 .../armem/core/diskmemory/EntitySnapshot.h    |  2 ++
 .../libraries/armem/core/ice_conversions.cpp  |  2 ++
 .../armem/core/longtermmemory/CoreSegment.cpp |  6 ++--
 .../armem/core/longtermmemory/CoreSegment.h   |  4 +--
 .../armem/core/longtermmemory/Entity.cpp      |  2 ++
 .../armem/core/longtermmemory/Entity.h        |  4 +--
 .../core/longtermmemory/EntityInstance.cpp    |  3 +-
 .../core/longtermmemory/EntityInstance.h      |  7 +---
 .../core/longtermmemory/EntitySnapshot.h      |  6 ++--
 .../armem/core/longtermmemory/Memory.h        |  8 ++---
 .../core/longtermmemory/ProviderSegment.h     |  4 +--
 .../core/workingmemory/EntityInstance.cpp     |  2 ++
 .../core/workingmemory/ice_conversions.cpp    |  2 ++
 .../libraries/armem/server/segment/Segment.h  |  6 ++--
 .../armem/server/segment/SpecializedSegment.h | 16 ++++-----
 .../armem/test/ArMemMemoryIDTest.cpp          |  4 +--
 source/RobotAPI/libraries/armem/util/util.h   |  6 +++-
 .../libraries/aron/core/CMakeLists.txt        |  2 ++
 .../navigator/data/forward_declarations.h     | 22 ++++++++++++
 .../aron/core/navigator/type/AllNavigators.h  |  1 -
 .../navigator/type/forward_declarations.h     | 34 +++++++++++++++++++
 27 files changed, 133 insertions(+), 52 deletions(-)
 create mode 100644 source/RobotAPI/libraries/aron/core/navigator/data/forward_declarations.h
 create mode 100644 source/RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h

diff --git a/source/RobotAPI/libraries/armem/core/Commit.cpp b/source/RobotAPI/libraries/armem/core/Commit.cpp
index fed7ed660..fed012450 100644
--- a/source/RobotAPI/libraries/armem/core/Commit.cpp
+++ b/source/RobotAPI/libraries/armem/core/Commit.cpp
@@ -1,9 +1,11 @@
 #include "Commit.h"
 
-#include <SimoxUtility/algorithm/apply.hpp>
+#include <RobotAPI/libraries/aron/core/navigator/data/container/Dict.h>
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
+#include <SimoxUtility/algorithm/apply.hpp>
+
 
 namespace armarx::armem
 {
diff --git a/source/RobotAPI/libraries/armem/core/Commit.h b/source/RobotAPI/libraries/armem/core/Commit.h
index fc69a4b53..685886a7f 100644
--- a/source/RobotAPI/libraries/armem/core/Commit.h
+++ b/source/RobotAPI/libraries/armem/core/Commit.h
@@ -1,11 +1,12 @@
 #pragma once
 
-#include <vector>
+#include <RobotAPI/libraries/armem/core/Time.h>
+#include <RobotAPI/libraries/armem/core/MemoryID.h>
 
-#include <RobotAPI/libraries/aron/core/navigator/data/container/Dict.h>
+#include <RobotAPI/libraries/aron/core/navigator/data/forward_declarations.h>
 
-#include "../core/MemoryID.h"
-#include "../core/Time.h"
+#include <memory>
+#include <vector>
 
 
 namespace armarx::armem
diff --git a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.cpp b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.cpp
index 5f7899f50..72b4c4887 100644
--- a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.cpp
+++ b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.cpp
@@ -1 +1,11 @@
 #include "EntitySnapshotBase.h"
+
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+
+
+void armarx::armem::base::detail::throwIfNotEqual(const Time& ownTime, const Time& updateTime)
+{
+    ARMARX_CHECK_EQUAL(ownTime, updateTime)
+            << "Cannot update a snapshot to an update with another timestamp. \n"
+            << "Note: A snapshot's timestamp must not be changed after construction.";
+}
diff --git a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h
index 1322802a3..00f996ca4 100644
--- a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h
+++ b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h
@@ -11,6 +11,10 @@
 #include "detail/iteration_mixins.h"
 
 
+namespace armarx::armem::base::detail
+{
+    void throwIfNotEqual(const Time& ownTime, const Time& updateTime);
+}
 namespace armarx::armem::base
 {
     /**
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp
index f464fed5a..5fbfa91d5 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.cpp
@@ -1,13 +1,17 @@
 #include "EntityInstance.h"
 
-#include <iostream>
-#include <fstream>
-
 #include "../../core/error.h"
-#include "ArmarXCore/core/exceptions/LocalException.h"
+#include "../workingmemory/json_conversions.h"
+#include "../workingmemory/entityInstance_conversions.h"
 
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
+#include <SimoxUtility/json/json.hpp>
+
+#include <iostream>
+#include <fstream>
+
+
 namespace armarx::armem::d_ltm
 {
 
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
index cdc841a56..54d3c4cb8 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntityInstance.h
@@ -5,8 +5,7 @@
 #include "../base/EntityInstanceBase.h"
 #include "../workingmemory/EntityInstance.h"
 
-#include "../workingmemory/entityInstance_conversions.h"
-#include "../workingmemory/json_conversions.h"
+#include <RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h>
 
 
 namespace armarx::armem::d_ltm
diff --git a/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h
index 545a8c0d6..be36a8a77 100644
--- a/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h
+++ b/source/RobotAPI/libraries/armem/core/diskmemory/EntitySnapshot.h
@@ -7,6 +7,8 @@
 
 #include "EntityInstance.h"
 
+#include <RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h>
+
 
 namespace armarx::armem::d_ltm
 {
diff --git a/source/RobotAPI/libraries/armem/core/ice_conversions.cpp b/source/RobotAPI/libraries/armem/core/ice_conversions.cpp
index d79acf1da..88ed8fd29 100644
--- a/source/RobotAPI/libraries/armem/core/ice_conversions.cpp
+++ b/source/RobotAPI/libraries/armem/core/ice_conversions.cpp
@@ -1,5 +1,7 @@
 #include "ice_conversions.h"
 
+#include <RobotAPI/libraries/aron/core/navigator/data/container/Dict.h>
+
 
 namespace armarx
 {
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.cpp b/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.cpp
index 6adea4d68..1fc021d65 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.cpp
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.cpp
@@ -1,8 +1,10 @@
 #include "CoreSegment.h"
 
+#include "error.h"
+
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
-#include "error.h"
+#include <SimoxUtility/json/json.hpp>
 
 
 namespace armarx::armem::ltm
@@ -33,7 +35,7 @@ namespace armarx::armem::ltm
             nlohmann::json json = nlohmann::json::parse(bsoncxx::to_json(doc));
             ARMARX_INFO << "CoreSegment: Found foreign key: " << json.at("foreign_key");
 
-            MemoryID i((std::string) json.at("foreign_key"));
+            MemoryID i = MemoryID::fromString(json.at("foreign_key").get<std::string>());
             if (i.coreSegmentName != id().coreSegmentName)
             {
                 throw error::InvalidMemoryID(i, "A MemoryID in mongodb was invalid. Found the wrong coreSegment name. Expected " + id().coreSegmentName);
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h b/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h
index 4c0a2c820..adb325791 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/CoreSegment.h
@@ -1,9 +1,9 @@
 #pragma once
 
-#include "../base/CoreSegmentBase.h"
-
 #include "ProviderSegment.h"
+#include "mongodb/MongoDBConnectionManager.h"
 
+#include "../base/CoreSegmentBase.h"
 #include "../workingmemory/CoreSegment.h"
 
 
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.cpp b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.cpp
index 99a8808c9..4e92467af 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.cpp
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.cpp
@@ -1,5 +1,7 @@
 #include "Entity.h"
 
+#include <SimoxUtility/json/json.hpp>
+
 
 namespace armarx::armem::ltm
 {
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
index 4aef4251f..c17e10208 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/Entity.h
@@ -1,9 +1,9 @@
 #pragma once
 
-#include "../base/EntityBase.h"
-
 #include "EntitySnapshot.h"
+#include "mongodb/MongoDBConnectionManager.h"
 
+#include "../base/EntityBase.h"
 #include "../workingmemory/Entity.h"
 
 
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.cpp
index 4f844d8fc..30297767a 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.cpp
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.cpp
@@ -1,9 +1,8 @@
 #include "EntityInstance.h"
 
-#include "../../core/error.h"
-
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
+
 namespace armarx::armem::ltm
 {
 
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
index cc4e13580..81bd70fd3 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntityInstance.h
@@ -1,12 +1,7 @@
 #pragma once
 
-#include "../base/EntityInstanceBase.h"
+#include <RobotAPI/libraries/armem/core/base/EntityInstanceBase.h>
 
-#include "../workingmemory/EntityInstance.h"
-#include "mongodb/MongoDBConnectionManager.h"
-
-#include "../workingmemory/entityInstance_conversions.h"
-#include "../workingmemory/json_conversions.h"
 
 namespace armarx::armem::ltm
 {
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h b/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h
index fef528c3d..b55760247 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/EntitySnapshot.h
@@ -1,11 +1,13 @@
 #pragma once
 
-#include "../base/EntitySnapshotBase.h"
-
 #include "EntityInstance.h"
+#include "mongodb/MongoDBConnectionManager.h"
 
+#include "../base/EntitySnapshotBase.h"
 #include "../workingmemory/EntitySnapshot.h"
 
+#include <RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h>
+
 
 namespace armarx::armem::ltm
 {
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.h b/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.h
index 73a9f0fc3..18b655ef5 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/Memory.h
@@ -1,15 +1,11 @@
 #pragma once
 
-// BaseClass
-#include "../base/MemoryBase.h"
-
-// CoreSegment
 #include "CoreSegment.h"
+#include "mongodb/MongoDBConnectionManager.h"
 
-// WM
+#include "../base/MemoryBase.h"
 #include "../workingmemory/Memory.h"
 
-// Properties
 #include <ArmarXCore/core/application/properties/forward_declarations.h>
 
 
diff --git a/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h b/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h
index 5aecdb21a..c18100e96 100644
--- a/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h
+++ b/source/RobotAPI/libraries/armem/core/longtermmemory/ProviderSegment.h
@@ -1,9 +1,9 @@
 #pragma once
 
-#include "../base/ProviderSegmentBase.h"
-
 #include "Entity.h"
+#include "mongodb/MongoDBConnectionManager.h"
 
+#include "../base/ProviderSegmentBase.h"
 #include "../workingmemory/ProviderSegment.h"
 
 
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp
index 0e3dd4ceb..9158bd7e3 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/EntityInstance.cpp
@@ -1,5 +1,7 @@
 #include "EntityInstance.h"
 
+#include <RobotAPI/libraries/aron/core/navigator/data/container/Dict.h>
+
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
 
 
diff --git a/source/RobotAPI/libraries/armem/core/workingmemory/ice_conversions.cpp b/source/RobotAPI/libraries/armem/core/workingmemory/ice_conversions.cpp
index 71cdd52ea..4e429f170 100644
--- a/source/RobotAPI/libraries/armem/core/workingmemory/ice_conversions.cpp
+++ b/source/RobotAPI/libraries/armem/core/workingmemory/ice_conversions.cpp
@@ -1,5 +1,7 @@
 #include "ice_conversions.h"
 
+#include <RobotAPI/libraries/aron/core/navigator/data/container/Dict.h>
+
 
 namespace armarx::armem
 {
diff --git a/source/RobotAPI/libraries/armem/server/segment/Segment.h b/source/RobotAPI/libraries/armem/server/segment/Segment.h
index e59b63fc3..52d12980e 100644
--- a/source/RobotAPI/libraries/armem/server/segment/Segment.h
+++ b/source/RobotAPI/libraries/armem/server/segment/Segment.h
@@ -8,11 +8,9 @@
 #include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/application/properties/forward_declarations.h>
 
+#include <RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h>
+
 
-namespace armarx::aron::typenavigator
-{
-    using ObjectNavigatorPtr = std::shared_ptr<class ObjectNavigator>;
-}
 namespace armarx::armem
 {
     namespace server
diff --git a/source/RobotAPI/libraries/armem/server/segment/SpecializedSegment.h b/source/RobotAPI/libraries/armem/server/segment/SpecializedSegment.h
index fd3a456c5..d6601c39b 100644
--- a/source/RobotAPI/libraries/armem/server/segment/SpecializedSegment.h
+++ b/source/RobotAPI/libraries/armem/server/segment/SpecializedSegment.h
@@ -6,11 +6,9 @@
 #include <ArmarXCore/core/application/properties/forward_declarations.h>
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include <RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h>
+
 
-namespace armarx::aron::typenavigator
-{
-    using ObjectNavigatorPtr = std::shared_ptr<class ObjectNavigator>;
-}
 namespace armarx::armem
 {
     namespace server
@@ -31,15 +29,15 @@ namespace armarx::armem::server::segment
      * @brief Specialized management of a core segment.
      */
     class SpecializedSegment :
-            public armarx::Logging
+        public armarx::Logging
     {
     public:
 
         SpecializedSegment(
-                server::MemoryToIceAdapter& iceMemory,
-                aron::typenavigator::ObjectNavigatorPtr aronType = nullptr,
-                const std::string& defaultCoreSegmentName = "",
-                int64_t defaultMaxHistorySize = -1);
+            server::MemoryToIceAdapter& iceMemory,
+            aron::typenavigator::ObjectNavigatorPtr aronType = nullptr,
+            const std::string& defaultCoreSegmentName = "",
+            int64_t defaultMaxHistorySize = -1);
 
         virtual ~SpecializedSegment();
 
diff --git a/source/RobotAPI/libraries/armem/test/ArMemMemoryIDTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemMemoryIDTest.cpp
index aad3359b0..72f09fb22 100644
--- a/source/RobotAPI/libraries/armem/test/ArMemMemoryIDTest.cpp
+++ b/source/RobotAPI/libraries/armem/test/ArMemMemoryIDTest.cpp
@@ -25,8 +25,8 @@
 #define ARMARX_BOOST_TEST
 
 #include <RobotAPI/Test.h>
-#include "../core/MemoryID.h"
-#include "../core/error.h"
+#include <RobotAPI/libraries/armem/core/MemoryID.h>
+#include <RobotAPI/libraries/armem/core/error.h>
 
 #include <iostream>
 
diff --git a/source/RobotAPI/libraries/armem/util/util.h b/source/RobotAPI/libraries/armem/util/util.h
index 35fc1538b..b1e3e7f3d 100644
--- a/source/RobotAPI/libraries/armem/util/util.h
+++ b/source/RobotAPI/libraries/armem/util/util.h
@@ -24,12 +24,13 @@
 #include <vector>
 #include <optional>
 
-#include "ArmarXCore/core/logging/Logging.h"
+#include <ArmarXCore/core/logging/Logging.h>
 
 #include <RobotAPI/libraries/armem/core/workingmemory/Entity.h>
 #include <RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h>
 #include <RobotAPI/libraries/aron/core/codegenerator/codeWriter/cpp/AronCppClass.h>
 
+
 namespace armarx::armem
 {
 
@@ -52,10 +53,13 @@ namespace armarx::armem
             return std::nullopt;
         }
 
+#if 0
+        // item.data() is by definition a DictNavigator
         if (item.data()->getDescriptor() != aron::data::Descriptor::eDict)
         {
             return std::nullopt;
         }
+#endif
 
         try
         {
diff --git a/source/RobotAPI/libraries/aron/core/CMakeLists.txt b/source/RobotAPI/libraries/aron/core/CMakeLists.txt
index 62548c297..c5282fb54 100644
--- a/source/RobotAPI/libraries/aron/core/CMakeLists.txt
+++ b/source/RobotAPI/libraries/aron/core/CMakeLists.txt
@@ -151,6 +151,7 @@ set(LIB_HEADERS
     navigator/data/primitive/Bool.h
     navigator/data/AllNavigators.h
     navigator/data/NavigatorFactory.h
+    navigator/data/forward_declarations.h
 
     navigator/type/Navigator.h
     navigator/type/detail/NavigatorBase.h
@@ -181,6 +182,7 @@ set(LIB_HEADERS
     navigator/type/primitive/Time.h
     navigator/type/AllNavigators.h
     navigator/type/NavigatorFactory.h
+    navigator/type/forward_declarations.h
 
     navigator/visitors/DataVisitor.h
     navigator/visitors/TypedDataVisitor.h
diff --git a/source/RobotAPI/libraries/aron/core/navigator/data/forward_declarations.h b/source/RobotAPI/libraries/aron/core/navigator/data/forward_declarations.h
new file mode 100644
index 000000000..d76939c31
--- /dev/null
+++ b/source/RobotAPI/libraries/aron/core/navigator/data/forward_declarations.h
@@ -0,0 +1,22 @@
+#pragma once
+
+#include <memory>
+
+
+namespace armarx::aron::datanavigator
+{
+    class Navigator;
+    using NavigatorPtr = std::shared_ptr<Navigator>;
+
+    using DictNavigatorPtr = std::shared_ptr<class DictNavigator>;
+    using ListNavigatorPtr = std::shared_ptr<class ListNavigator>;
+    using NDArrayNavigatorPtr = std::shared_ptr<class NDArrayNavigator>;
+
+    using IntNavigatorPtr = std::shared_ptr<class IntNavigator>;
+    using LongNavigatorPtr = std::shared_ptr<class LongNavigator>;
+    using FloatNavigatorPtr = std::shared_ptr<class FloatNavigator>;
+    using DoubleNavigatorPtr = std::shared_ptr<class DoubleNavigator>;
+    using StringNavigatorPtr = std::shared_ptr<class StringNavigator>;
+    using BoolNavigatorPtr = std::shared_ptr<class BoolNavigator>;
+
+}
diff --git a/source/RobotAPI/libraries/aron/core/navigator/type/AllNavigators.h b/source/RobotAPI/libraries/aron/core/navigator/type/AllNavigators.h
index 51ea5a762..82702de99 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/type/AllNavigators.h
+++ b/source/RobotAPI/libraries/aron/core/navigator/type/AllNavigators.h
@@ -12,7 +12,6 @@
 #include "ndarray/OpenCVMat.h"
 #include "ndarray/Orientation.h"
 #include "ndarray/PCLPointCloud.h"
-#include "ndarray/PCLPointCloud.h"
 #include "ndarray/Pose.h"
 #include "ndarray/Position.h"
 #include "enum/IntEnum.h"
diff --git a/source/RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h b/source/RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h
new file mode 100644
index 000000000..af5d62e7c
--- /dev/null
+++ b/source/RobotAPI/libraries/aron/core/navigator/type/forward_declarations.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <memory>
+
+
+namespace armarx::aron::typenavigator
+{
+    using NavigatorPtr = std::shared_ptr<class Navigator>;
+
+    using DictNavigatorPtr = std::shared_ptr<class DictNavigator>;
+    using ListNavigatorPtr = std::shared_ptr<class ListNavigator>;
+    using ObjectNavigatorPtr = std::shared_ptr<class ObjectNavigator>;
+    using PoseNavigatorPtr = std::shared_ptr<class PoseNavigator>;
+    using TupleNavigatorPtr = std::shared_ptr<class TupleNavigator>;
+    using NDArrayNavigatorPtr = std::shared_ptr<class NDArrayNavigator>;
+    using EigenMatrixNavigatorPtr = std::shared_ptr<class EigenMatrixNavigator>;
+    using EigenQuaternionNavigatorPtr = std::shared_ptr<class EigenQuaternionNavigator>;
+    using IVTCByteImageNavigatorPtr = std::shared_ptr<class IVTCByteImageNavigator>;
+    using OpenCVMatNavigatorPtr = std::shared_ptr<class OpenCVMatNavigator>;
+    using OrientationNavigatorPtr = std::shared_ptr<class OrientationNavigator>;
+    using PCLPointCloudNavigatorPtr = std::shared_ptr<class PCLPointCloudNavigator>;
+    using PositionNavigatorPtr = std::shared_ptr<class PositionNavigator>;
+    using IntEnumNavigatorPtr = std::shared_ptr<class IntEnumNavigator>;
+
+    using IntNavigatorPtr = std::shared_ptr<class IntNavigator>;
+    using LongNavigatorPtr = std::shared_ptr<class LongNavigator>;
+    using FloatNavigatorPtr = std::shared_ptr<class FloatNavigator>;
+    using DoubleNavigatorPtr = std::shared_ptr<class DoubleNavigator>;
+    using StringNavigatorPtr = std::shared_ptr<class StringNavigator>;
+    using BoolNavigatorPtr = std::shared_ptr<class BoolNavigator>;
+    using TimeNavigatorPtr = std::shared_ptr<class TimeNavigator>;
+
+}
+
-- 
GitLab