diff --git a/source/RobotAPI/components/ArViz/ArVizStorage.cpp b/source/RobotAPI/components/ArViz/ArVizStorage.cpp index 5430091b2b917f819e2acb0e8717e904e8d4e45f..8630c8a9f76cce5bb9b6d61005bed907786e8b3c 100644 --- a/source/RobotAPI/components/ArViz/ArVizStorage.cpp +++ b/source/RobotAPI/components/ArViz/ArVizStorage.cpp @@ -203,7 +203,7 @@ namespace armarx // Insert or create the layer bool found = false; - for (auto& layer : currentState) + for (viz::data::TimestampedLayerUpdate& layer : currentState) { if (layer.update.component == update.component && layer.update.name == update.name) @@ -298,9 +298,9 @@ namespace armarx std::unique_lock<std::mutex> lock(historyMutex); - for (auto& interaction : interactions) + for (viz::data::InteractionFeedback const& interaction : interactions) { - for (auto& entry : interactionBuffer) + for (viz::data::InteractionFeedback& entry : interactionBuffer) { if (entry.component == interaction.component && entry.layer == interaction.layer @@ -327,7 +327,7 @@ namespace armarx } result.updates.reserve(currentState.size()); - for (auto& layer : currentState) + for (viz::data::TimestampedLayerUpdate& layer : currentState) { if (layer.revision > revision) { diff --git a/source/RobotAPI/components/ArViz/ArVizStorage.h b/source/RobotAPI/components/ArViz/ArVizStorage.h index f01a68fba62bd7f9fb961dcb182480774ec848de..c484b6d21c28f8ba25ebf7c8f1ff1e40f816c8d7 100644 --- a/source/RobotAPI/components/ArViz/ArVizStorage.h +++ b/source/RobotAPI/components/ArViz/ArVizStorage.h @@ -43,8 +43,8 @@ namespace armarx * clients and provides them for visualizing components such as the * ArViz gui plugin. * - * In addition, the ArViz storage can be used to record and restore - * visualization episodes and restore. + * In addition, the ArViz storage can be used to record and replay + * visualization episodes. * * * @class ArVizStorage diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp b/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp index 0daa2db1c31eeef0ef6dcc1254693a93d82b8e21..5f6b068fccb635c596f2534068e4516fec63693d 100644 --- a/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp +++ b/source/RobotAPI/components/ArViz/Coin/VisualizationObject.cpp @@ -218,7 +218,7 @@ namespace armarx::viz::coin node->removeAllChildren(); - auto& object = *loaded.object; + VirtualRobot::ManipulationObject& object = *loaded.object; SoSeparator* nodeSep = new SoSeparator; @@ -228,7 +228,7 @@ namespace armarx::viz::coin nodeMat->setOverride(false); nodeSep->addChild(nodeMat); - auto nodeVisu = object.getVisualization<VirtualRobot::CoinVisualization>(visuType); + VirtualRobot::CoinVisualizationPtr nodeVisu = object.getVisualization<VirtualRobot::CoinVisualization>(visuType); if (nodeVisu) { SoNode* sepRobNode = nodeVisu->getCoinVisualization(); diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp index bca1b041325f5532e8205dbe43c9c0b09429953b..c7d941aa565e37ecd7b53c3035f844c139981d8a 100644 --- a/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp +++ b/source/RobotAPI/components/armem/server/ExampleMemory/ExampleMemory.cpp @@ -23,13 +23,14 @@ #include "ExampleMemory.h" #include <ArmarXCore/core/exceptions/local/ExpressionException.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <SimoxUtility/algorithm/string.h> #include <RobotAPI/libraries/armem/client/query/Builder.h> #include <RobotAPI/libraries/armem/core/error.h> #include <RobotAPI/libraries/armem/core/Prediction.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> +#include <RobotAPI/libraries/armem/core/ice_conversions.h> #include <RobotAPI/libraries/armem/server/MemoryRemoteGui.h> #include <RobotAPI/components/armem/server/ExampleMemory/aron/ExampleData.aron.generated.h> @@ -163,7 +164,7 @@ namespace armarx ExecuteActionOutputSeq output; for (const auto& [id, path] : input) { - auto memoryID = fromIce<armem::MemoryID>(id); + const armem::MemoryID memoryID = armarx::fromIce<armem::MemoryID>(id); if (path == ActionPath{"hi"}) { ARMARX_INFO << "Hello, " << memoryID.str() << "!"; diff --git a/source/RobotAPI/components/armem/server/ExampleMemory/test/ExampleMemoryTest.cpp b/source/RobotAPI/components/armem/server/ExampleMemory/test/ExampleMemoryTest.cpp index 362a2d2f338fe4e007a34756d006338ebd4611dc..bffeec398b2f5b1b913670f766a5e08d9a623563 100644 --- a/source/RobotAPI/components/armem/server/ExampleMemory/test/ExampleMemoryTest.cpp +++ b/source/RobotAPI/components/armem/server/ExampleMemory/test/ExampleMemoryTest.cpp @@ -41,7 +41,7 @@ BOOST_AUTO_TEST_CASE(test_ExampleData_type) { armarx::aron::type::ObjectPtr type = ExampleData::ToAronType(); - BOOST_CHECK_EQUAL(type->childrenSize(), 20); + BOOST_CHECK_EQUAL(type->childrenSize(), 21); armem::wm::Memory memory; armem::wm::CoreSegment& core = memory.addCoreSegment("ExampleData", type); diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp index 52fa8e1a0538dd41fb4ac6bb760464d31e78eb18..71eba7787783661f2c1dee98c605ab0122e5ece9 100644 --- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp +++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp @@ -22,12 +22,12 @@ #include "ObjectMemory.h" +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <ArmarXCore/core/time/ice_conversions.h> #include <RobotAPI/libraries/ArmarXObjects/aron_conversions.h> #include <RobotAPI/libraries/ArmarXObjects/ice_conversions.h> #include <RobotAPI/libraries/armem/client/query.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/core/Prediction.h> #include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h> diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp index ff79f501c35016154272c659db18233caf39a9d6..ff461269fd3c68bf57c6c69d77116c62dc807d5c 100644 --- a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp @@ -36,6 +36,12 @@ namespace armarx } + QIcon ArMemMemoryViewerWidgetController::GetWidgetIcon() + { + return QIcon(":icons/memory-128.png"); + } + + ArMemMemoryViewerWidgetController::ArMemMemoryViewerWidgetController() { widget.setupUi(getWidget()); diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.h b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.h index dc6789843bc3d079051591c6af992f26835084d0..ca4db2ac23e5756bd96726ef830c103327dd1d5e 100644 --- a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.h +++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.h @@ -73,7 +73,7 @@ namespace armarx public: static QString GetWidgetName(); - + static QIcon GetWidgetIcon(); explicit ArMemMemoryViewerWidgetController(); virtual ~ArMemMemoryViewerWidgetController() override; diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/CMakeLists.txt b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/CMakeLists.txt index c449d1100f0ed75d7ccabe34e7ab6446b2996a1a..8b46376363d31ce9b1818f95b1fccc73194fdc86 100644 --- a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/CMakeLists.txt +++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LIB_NAME "ArMemMemoryViewerGuiPlugin") +set(LIB_NAME ArMemMemoryViewerGuiPlugin) armarx_set_target("${LIB_NAME}") # most qt components will be linked against in the call armarx_gui_library @@ -26,8 +26,10 @@ set(COMPONENT_LIBS RobotAPI::armem_gui ) +qt5_add_resources(GUI_RCS icons.qrc) + if(ArmarXGui_FOUND) - armarx_gui_plugin("${LIB_NAME}" "${SOURCES}" "" "${GUI_UIS}" "" "${COMPONENT_LIBS}") + armarx_gui_plugin("${LIB_NAME}" "${SOURCES}" "" "${GUI_UIS}" "${GUI_RCS}" "${COMPONENT_LIBS}") #find_package(MyLib QUIET) #armarx_build_if(MyLib_FOUND "MyLib not available") diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons.qrc b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons.qrc new file mode 100644 index 0000000000000000000000000000000000000000..71239b0e21cfafe8e45db1fb599f243aefe3b04f --- /dev/null +++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons.qrc @@ -0,0 +1,7 @@ +<RCC> + <qresource prefix="/"> + <file>icons/memory-64.png</file> + <file>icons/memory-128.png</file> + <file>icons/memory-256.png</file> + </qresource> +</RCC> diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-128.png b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-128.png new file mode 100644 index 0000000000000000000000000000000000000000..930ef5066af85016d0e830e61a573e4577c99f5c Binary files /dev/null and b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-128.png differ diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-256.png b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-256.png new file mode 100644 index 0000000000000000000000000000000000000000..777319a1468c4a1987e618e5b7ac3be4605343aa Binary files /dev/null and b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-256.png differ diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-64.png b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-64.png new file mode 100644 index 0000000000000000000000000000000000000000..67d1e00324107fbf04d23e0cc41941a1279c95ca Binary files /dev/null and b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-64.png differ diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory.svg b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory.svg new file mode 100644 index 0000000000000000000000000000000000000000..c72f8838d719b0817a6eed536eb8ba452d3223b8 --- /dev/null +++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory.svg @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg854" + xml:space="preserve" + width="192" + height="128" + viewBox="0 0 192 128" + sodipodi:docname="memory.svg" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + inkscape:export-filename="/home/rkartmann/code/armarx/RobotAPI/source/RobotAPI/gui-plugins/ArMemMemoryViewer/icons/memory-128.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"><defs + id="defs858"><clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath868"><path + d="M 0,2.2888e-5 H 84.96 V 84.960023 H 0 Z" + clip-rule="evenodd" + id="path866" /></clipPath><clipPath + id="p.0"><path + d="M 0,0 H 64 V 64 H 0 Z" + clip-rule="nonzero" + id="path2" /></clipPath><clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath32362"><rect + style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:0.380907" + id="rect32364" + width="144.00002" + height="93.222496" + x="-2.3536728e-14" + y="-84.959999" + transform="scale(1,-1)" /></clipPath></defs><sodipodi:namedview + id="namedview856" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="false" + showgrid="false" + width="129px" + borderlayer="true" + inkscape:zoom="2.6915184" + inkscape:cx="49.725291" + inkscape:cy="110.97224" + inkscape:window-width="1848" + inkscape:window-height="1016" + inkscape:window-x="72" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g860" + inkscape:snap-page="true" /><g + id="g860" + inkscape:groupmode="layer" + inkscape:label="brain" + transform="matrix(1.3333333,0,0,-1.3333333,0,113.28)"><rect + style="fill:#073763;fill-opacity:1;stroke:none;stroke-width:0.522041" + id="rect13881" + width="96" + height="96" + x="-109.75572" + y="-84.959999" + transform="scale(1,-1)" + rx="7.5" + ry="7.5" /><path + d="m -18.59388,28.36877 c 3.299219,5.039641 3.07158,11.876525 -0.569091,16.674506 0.455279,1.440357 0.682903,2.87911 0.682903,4.319465 0,6.836884 -4.66501,12.595102 -10.920472,13.915427 -1.934914,5.878248 -7.053694,9.715993 -12.969209,9.715993 -1.024362,0 -2.162545,-0.120029 -3.185388,-0.360089 -2.390189,2.999139 -5.915517,4.799583 -9.556186,5.158072 -3.754479,0.240058 -7.39515,-1.078666 -10.125272,-3.717717 -3.526847,2.519022 -7.962725,3.239199 -11.944844,1.918874 -4.095941,-1.318726 -7.281334,-4.557923 -8.759455,-8.877387 -0.227634,0 -0.56909,0 -0.796726,0 -7.507453,0 -13.53678,-6.236736 -13.6506,-14.155486 0,-0.238459 0,-0.478518 0,-0.718579 -4.55122,-2.639049 -7.16752,-7.79712 -6.82606,-13.315278 0.45527,-7.558662 6.82606,-13.196851 14.105873,-13.196851 h 17.632723 c 7.50897,0 13.652121,-6.356766 13.765939,-14.273916 V -3.8999792 h 8.987092 V 6.8962822 c 0,0.4801164 0,1.0802642 0,1.5603829 0,4.4378929 -0.113829,10.0760819 2.843937,13.6753689 1.821087,2.038902 3.868306,3.837745 6.029332,5.398129 1.707279,1.078665 3.185406,2.39899 4.437382,3.957775 0.569107,0.960236 1.136682,1.920473 1.478134,2.879109 -2.388669,0.960237 -4.891148,1.320325 -7.393632,0.960237 -1.251999,-0.12003 -2.390189,0.720177 -2.617826,2.038903 -0.112303,1.320324 0.68291,2.519019 1.934916,2.75908 3.071573,0.480117 6.143137,0.120028 9.100904,-1.078667 0,0.358488 0,0.598547 0.113812,0.958635 0.113812,1.918872 -0.113812,3.839347 -0.682903,5.63819 -1.591953,4.319464 -5.574055,6.238336 -9.328539,7.79712 -0.682916,0.24006 -1.364308,0.480119 -2.274855,0.720177 l -0.68291,0.240059 h -0.113815 c -0.910547,-0.120027 -1.705753,-0.360087 -2.6163,-0.720176 l -1.024376,-0.24006 -1.136658,-0.240059 c -1.934902,-2.398991 -2.957755,-5.518158 -2.730122,-8.755757 0.227644,-3.239197 1.705753,-6.118307 3.980602,-8.15721 0.910554,-0.840206 0.910554,-2.280561 0.227644,-3.359226 -0.682918,-0.840207 -2.047219,-0.960237 -2.957759,-0.240059 -1.364304,1.198695 -2.502483,2.759079 -3.413031,4.437892 h -0.227637 c -3.185393,0.600149 -6.824543,1.200296 -9.7823,3.239199 -1.024364,0.720177 -1.252001,2.158931 -0.56909,3.239198 0.68291,1.078665 2.047211,1.438753 3.071575,0.720177 1.705756,-1.080266 3.640666,-1.800444 5.687878,-2.040504 -0.227638,0.600149 -0.341455,1.200297 -0.455273,1.920475 -0.227637,2.63905 0.227635,5.398129 1.252,7.797121 -1.593455,-0.24006 -3.071576,-0.36009 -4.665032,-0.36009 -1.364301,0 -2.730119,0.12003 -4.095939,0.36009 -2.502483,-3.239201 -6.029332,-5.638189 -9.896116,-6.598426 -5.120306,-2.759078 -9.897637,-6.238337 -9.897637,-12.114984 0,-1.320326 -1.024364,-2.400592 -2.274847,-2.400592 -1.252,0 -2.276365,1.080266 -2.276365,2.400592 0.113817,4.557923 2.048729,8.755757 5.34794,11.634864 -2.73012,0.36009 -5.234123,1.560387 -7.053696,3.719317 -0.796729,1.080266 -0.569091,2.51902 0.341455,3.359229 0.910546,0.840206 2.388666,0.720177 3.185393,-0.24006 0.910546,-1.200296 3.526848,-2.278961 7.279815,-2.158932 3.754485,0 7.508971,1.438753 10.35291,4.077805 -3.299213,1.440355 -6.029333,4.079405 -7.735087,7.437032 -0.682912,1.200295 -0.227639,2.640649 0.795208,3.239196 1.138181,0.720179 2.502484,0.240061 3.071575,-0.838606 3.41303,-6.478395 10.580544,-8.277238 21.842486,-5.518159 -2.047217,1.798843 -3.526853,4.677952 -3.413035,9.235875 0,1.320325 1.138184,2.398992 2.390178,2.27896 1.250487,0 2.274849,-1.198694 2.161034,-2.519019 -0.227637,-5.39813 2.616307,-6.476794 7.165997,-7.91715 0.68291,-0.240059 1.365827,-0.360088 2.048737,-0.600148 1.250481,2.99914 3.754484,5.2797 6.826039,6.118308 1.250494,0.360088 2.502504,-0.480119 2.843956,-1.798844 0.341451,-1.320324 -0.455288,-2.63905 -1.707274,-2.999139 -1.591946,-0.480118 -2.843949,-1.558784 -3.640674,-3.119168 0,-0.12003 0,-0.12003 0,-0.240058 3.526854,-1.798844 6.598426,-4.437893 8.19188,-8.877388 0.341451,-0.958636 0.569091,-1.918872 0.682903,-2.879109 0.453755,0.360088 0.795222,0.840207 1.022862,1.440356 0.796723,1.798842 1.365814,3.599285 1.593454,5.638188 0.113819,0.840207 0.682903,1.558783 1.478117,1.918873 0.796723,0.360089 1.707274,0.120029 2.274841,-0.480119 0.682911,-0.598547 0.910551,-1.438754 0.682911,-2.398991 -0.341459,-2.398992 -1.022846,-4.797983 -2.161029,-6.956913 -1.138182,-2.038903 -2.843932,-3.719315 -4.891156,-4.918011 -0.227632,-2.999139 -1.138175,-5.998278 -2.503997,-8.637328 1.479634,-1.800444 3.071579,-3.359228 5.006493,-4.559523 0.681387,-0.478519 1.136658,-1.318725 1.136658,-2.158932 0,-0.840207 -0.455271,-1.678814 -1.250478,-2.038904 -0.796723,-0.360088 -1.593454,-0.360088 -2.274849,0.120033 -1.934913,1.318723 -3.75449,2.999137 -5.347936,4.79798 -1.136682,-0.960237 -2.388669,-1.918872 -3.526853,-2.75908 -1.93339,-1.318724 -3.639142,-2.759078 -5.118778,-4.557922 -1.819582,-2.278961 -1.70576,-6.718456 -1.70576,-10.5562007 0,-0.6001479 0,-1.0802666 0,-1.6804121 V -3.8999792 h 9.100897 c 0,15.5942412 7.052185,16.4344492 7.96272,16.6745072 2.957768,0.840207 10.808193,5.158071 12.51395,14.035457 0.227624,0.480119 0.113812,1.080268 0.113812,1.558785 -0.113812,0 -0.113812,0 0,0 z" + style="fill:#9fc5e8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.3497" + id="path872" + clip-path="none" /><path + d="m 93.54506,-75.140297 c 3.481387,5.317909 3.241177,12.532297 -0.600513,17.595203 0.480417,1.519888 0.72061,3.038082 0.72061,4.557968 0,7.214389 -4.922593,13.290551 -11.523456,14.68378 -2.041752,6.20282 -7.44317,10.252469 -13.685314,10.252469 -1.080924,0 -2.281953,-0.126656 -3.361273,-0.379971 -2.522165,3.164739 -6.242147,5.064596 -10.083839,5.442879 -3.961786,0.253313 -7.80348,-1.138225 -10.684347,-3.922994 -3.721585,2.658113 -8.402394,3.418055 -12.604389,2.024826 -4.322102,-1.39154 -7.68338,-4.809592 -9.243116,-9.367559 -0.240203,0 -0.600513,0 -0.840718,0 -7.921983,0 -14.2842257,-6.581103 -14.4043303,-14.937093 0,-0.251626 0,-0.50494 0,-0.758256 -4.8025196,-2.784767 -7.56328092,-8.227645 -7.20296682,-14.050493 0.4804081,-7.97602 7.20296682,-13.925527 14.88474112,-13.925527 h 18.60633 c 7.923584,0 14.405934,-6.707759 14.526037,-15.062062 v -16.203663 h 9.483322 v 11.392383 c 0,0.506626 0,1.139912 0,1.646541 0,4.682935 -0.120114,10.632441 3.000967,14.430466 1.92164,2.151482 4.081898,4.049649 6.362246,5.696192 1.801549,1.138224 3.361291,2.531452 4.682397,4.176307 0.60053,1.013256 1.199444,2.026513 1.55975,3.038081 -2.520561,1.013257 -5.161217,1.393228 -7.801878,1.013257 -1.321129,-0.126657 -2.522165,0.759942 -2.762371,2.151484 -0.118504,1.393226 0.720618,2.658108 2.041754,2.911424 3.241173,0.506627 6.482336,0.126655 9.603419,-1.138226 0,0.378282 0,0.631596 0.120095,1.011566 0.120097,2.024825 -0.120095,4.05134 -0.72061,5.949508 -1.679854,4.557967 -5.881831,6.582791 -9.843622,8.227645 -0.720624,0.253315 -1.439639,0.506629 -2.400463,0.759942 l -0.720618,0.253314 h -0.120099 c -0.960824,-0.126655 -1.799937,-0.37997 -2.760761,-0.759941 l -1.080938,-0.253315 -1.19942,-0.253314 c -2.041739,-2.531454 -3.12107,-5.822849 -2.880867,-9.239214 0.240213,-3.418052 1.799937,-6.456134 4.200394,-8.607618 0.960831,-0.886598 0.960831,-2.406484 0.240214,-3.544708 -0.720626,-0.8866 -2.160259,-1.013257 -3.121075,-0.253314 -1.439635,1.264881 -2.640659,2.911424 -3.601484,4.682934 h -0.240206 c -3.361278,0.633287 -7.201367,1.266572 -10.322439,3.418054 -1.080924,0.759943 -1.32113,2.278139 -0.600512,3.418053 0.720617,1.138224 2.160249,1.518195 3.241175,0.759943 1.79994,-1.139915 3.841688,-1.899857 6.001938,-2.153172 -0.240207,0.633286 -0.360308,1.266571 -0.480411,2.026515 -0.240206,2.784767 0.240204,5.696191 1.321131,8.227646 -1.681439,-0.253315 -3.241176,-0.379973 -4.922616,-0.379973 -1.439633,0 -2.880865,0.126658 -4.322101,0.379973 -2.640659,-3.418057 -6.362246,-5.949507 -10.442537,-6.962764 -5.403028,-2.911423 -10.444144,-6.582792 -10.444144,-12.783924 0,-1.393228 -1.080926,-2.533142 -2.400455,-2.533142 -1.32113,0 -2.402056,1.139914 -2.402056,2.533142 0.120101,4.809594 2.161851,9.239214 5.64323,12.277293 -2.880865,0.379974 -5.523129,1.646546 -7.443171,3.924683 -0.840722,1.139914 -0.600514,2.65811 0.360308,3.544712 0.960823,0.886598 2.520559,0.759942 3.361278,-0.253315 0.960823,-1.266572 3.721585,-2.404796 7.681776,-2.27814 3.961793,0 7.923586,1.518195 10.924554,4.302965 -3.481381,1.519886 -6.362247,4.304652 -8.162185,7.847674 -0.72062,1.266571 -0.240209,2.786455 0.839115,3.418051 1.201027,0.759944 2.640661,0.253316 3.241175,-0.88491 3.601483,-6.836106 11.164758,-8.734273 23.048538,-5.82285 -2.160256,1.898169 -3.721591,4.93625 -3.601489,9.745843 0,1.393227 1.20103,2.531454 2.522154,2.404794 1.319533,0 2.400456,-1.264881 2.280357,-2.658108 -0.240206,-5.696193 2.760769,-6.834417 7.561674,-8.354302 0.720618,-0.253314 1.441242,-0.379971 2.16186,-0.633287 1.319527,3.16474 3.961791,5.571224 7.202944,6.456136 1.319541,0.37997 2.640682,-0.506629 3.000988,-1.898168 0.360304,-1.393228 -0.480427,-2.784768 -1.801543,-3.164739 -1.679846,-0.506628 -3.00098,-1.644855 -3.841697,-3.291396 0,-0.126658 0,-0.126658 0,-0.253313 3.721593,-1.898169 6.962764,-4.682935 8.644202,-9.367561 0.360305,-1.011568 0.600513,-2.024824 0.72061,-3.038082 0.478809,0.379971 0.839131,0.886601 1.07934,1.519887 0.840715,1.898166 1.441229,3.798023 1.681438,5.949506 0.120104,0.886599 0.72061,1.644852 1.559733,2.024825 0.840714,0.379971 1.801543,0.126656 2.400448,-0.506629 0.720619,-0.631597 0.960828,-1.518196 0.720619,-2.531454 -0.360313,-2.531455 -1.079324,-5.062907 -2.280353,-7.341045 -1.201027,-2.151482 -3.000962,-3.92468 -5.161225,-5.189563 -0.240201,-3.164739 -1.20102,-6.329478 -2.642257,-9.114245 1.561333,-1.899857 3.241179,-3.544711 5.282931,-4.811282 0.71901,-0.50494 1.199419,-1.391539 1.199419,-2.278138 0,-0.886601 -0.480409,-1.771512 -1.319524,-2.151484 -0.840715,-0.379971 -1.681438,-0.379971 -2.400457,0.12666 -2.041751,1.391537 -3.961797,3.164737 -5.643227,5.062904 -1.199445,-1.013257 -2.520561,-2.024823 -3.721591,-2.911424 -2.040144,-1.391539 -3.84008,-2.911423 -5.401416,-4.809592 -1.920051,-2.404795 -1.799945,-7.089421 -1.799945,-11.139071 0,-0.633285 0,-1.139914 0,-1.773197 v -11.392383 h 9.603411 c 0,16.455288 7.441578,17.341888 8.402389,17.595202 3.121083,0.886599 11.404977,5.442878 13.204918,14.810436 0.240193,0.50663 0.120096,1.139916 0.120096,1.644855 -0.120096,0 -0.120096,0 0,0 z" + style="fill:#073763;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.34969" + id="path872-9" + clip-path="none" /><path + d="m 127.94268,15.676127 c 4.22041,6.446784 3.92921,15.192627 -0.72799,21.330276 0.5824,1.842525 0.87358,3.683 0.87358,5.525523 0,8.745844 -5.96755,16.111841 -13.96963,17.800821 -2.47517,7.519542 -9.02319,12.428842 -16.590404,12.428842 -1.310379,0 -2.76636,-0.153543 -4.074796,-0.460631 -3.057565,3.836543 -7.567217,6.139698 -12.224415,6.598282 -4.802785,0.307086 -9.459985,-1.379846 -12.952397,-4.755759 -4.511595,3.22237 -10.186036,4.143632 -15.280022,2.454652 -5.239588,-1.686933 -9.314391,-5.830562 -11.205225,-11.356085 -0.291193,0 -0.727988,0 -1.019184,0 -9.603645,0 -17.316455,-7.978125 -17.462052,-18.107907 0,-0.305041 0,-0.612128 0,-0.919217 -5.82198,-3.375911 -9.168792,-9.974192 -8.731999,-17.033101 0.582392,-9.669153 8.731999,-16.881607 18.044447,-16.881607 h 22.55604 c 9.605586,0 17.463995,-8.1316702 17.609593,-18.2594053 V -25.602534 h 11.496421 v 13.810737 c 0,0.614172 0,1.38189 0,1.996065 0,5.6770185 -0.145611,12.8894734 3.638007,17.4937339 2.329561,2.6081941 4.948394,4.9093011 7.712811,6.9053671 2.183976,1.379844 4.074818,3.068824 5.676365,5.062844 0.72801,1.228348 1.45406,2.456698 1.89085,3.682999 -3.05562,1.228349 -6.256828,1.688979 -9.458043,1.228349 -1.601576,-0.153543 -3.057566,0.921262 -3.348762,2.608195 -0.14366,1.688979 0.873589,3.222367 2.475173,3.529456 3.929202,0.614173 7.858392,0.153542 11.642012,-1.379846 0,0.458583 0,0.76567 0.14559,1.2263 0.14559,2.45465 -0.14559,4.91135 -0.87358,7.212456 -2.03645,5.525523 -7.130414,7.980172 -11.933205,9.974191 -0.873597,0.307089 -1.745243,0.614176 -2.910029,0.921262 l -0.873588,0.307087 h -0.145594 c -1.164785,-0.153541 -2.182025,-0.460629 -3.34681,-0.92126 l -1.310397,-0.307089 -1.45403,-0.307086 c -2.475155,-3.068825 -3.783604,-7.05891 -3.492412,-11.200495 0.291205,-4.143629 2.182025,-7.826628 5.092045,-10.434823 1.164794,-1.074804 1.164794,-2.917328 0.291205,-4.297172 -0.873598,-1.074806 -2.618833,-1.228349 -3.783609,-0.307087 -1.745237,1.533388 -3.201213,3.529455 -4.366,5.677017 H 75.26145 c -4.074802,0.76772 -8.730056,1.535437 -12.513663,4.143631 -1.310382,0.921262 -1.601578,2.761737 -0.727989,4.14363 0.873589,1.379845 2.618823,1.840475 3.929205,0.921261 2.182028,-1.381892 4.657194,-2.303154 7.276017,-2.610242 -0.291197,0.767719 -0.436794,1.535437 -0.582392,2.4567 -0.291196,3.375911 0.291195,6.905366 1.601577,9.974192 -2.038371,-0.307088 -3.929205,-0.460632 -5.967577,-0.460632 -1.745234,0 -3.492409,0.153544 -5.239586,0.460632 C 59.835828,41.764206 55.324231,38.695384 50.377783,37.467035 43.827812,33.937581 37.71658,29.486862 37.71658,21.969368 c 0,-1.68898 -1.310382,-3.070873 -2.910019,-3.070873 -1.601577,0 -2.911959,1.381893 -2.911959,3.070873 0.145596,5.830562 2.620764,11.200494 6.841163,14.883491 -3.492409,0.460632 -6.695567,1.996069 -9.023192,4.757805 -1.019187,1.381892 -0.727989,3.222368 0.436795,4.297175 1.164784,1.074804 3.055616,0.921261 4.074802,-0.307088 1.164783,-1.535436 4.511595,-2.915281 9.312447,-2.761738 4.802793,0 9.605586,1.840475 13.243595,5.216389 -4.220401,1.842523 -7.712811,5.218435 -9.894838,9.513562 -0.87359,1.535434 -0.291198,3.377957 1.017242,4.143627 1.455979,0.921263 3.201215,0.307089 3.929205,-1.072757 4.365998,-8.287259 13.534789,-10.588366 27.941231,-7.058911 -2.61883,2.301106 -4.511602,5.984106 -4.366004,11.814668 0,1.68898 1.455981,3.068826 3.057551,2.91528 1.599641,0 2.91002,-1.533387 2.764426,-3.222367 -0.291196,-6.905368 3.346819,-8.285211 9.16685,-10.127735 0.873589,-0.307088 1.747186,-0.46063 2.620775,-0.767719 1.599633,3.836544 4.802791,6.753871 8.73197,7.82663 1.59965,0.460631 3.20124,-0.614175 3.63803,-2.301108 0.43679,-1.688978 -0.58241,-3.375911 -2.18397,-3.836543 -2.03644,-0.614173 -3.638021,-1.994019 -4.657204,-3.990085 0,-0.153545 0,-0.153545 0,-0.307086 4.511604,-2.301108 8.440804,-5.677019 10.479174,-11.356087 0.43679,-1.226301 0.72799,-2.454649 0.87358,-3.682998 0.58045,0.46063 1.01726,1.074805 1.30846,1.842524 1.01918,2.301106 1.74717,4.604259 2.03837,7.212454 0.1456,1.074805 0.87358,1.994019 1.89083,2.454651 1.01918,0.460631 2.18397,0.153543 2.91001,-0.614175 0.87359,-0.765671 1.16479,-1.840476 0.87359,-3.068825 -0.4368,-3.068826 -1.30844,-6.137651 -2.76442,-8.899386 -1.45598,-2.608195 -3.638,-4.757804 -6.25684,-6.291193 -0.29119,-3.836543 -1.45597,-7.673086 -3.20315,-11.048998 1.89277,-2.303155 3.92921,-4.297174 6.40438,-5.832609 0.87164,-0.612129 1.45403,-1.686933 1.45403,-2.7617381 0,-1.074806 -0.58239,-2.147564 -1.59963,-2.608197 -1.01918,-0.460629 -2.03837,-0.460629 -2.91002,0.153548 -2.47517,1.686931 -4.8028,3.8365411 -6.84116,6.1376481 -1.45406,-1.22835 -3.05562,-2.45465 -4.511602,-3.5294561 -2.473221,-1.686932 -4.655245,-3.5294544 -6.548017,-5.8305614 -2.327636,-2.9152814 -2.182033,-8.594348 -2.182033,-13.5036484 0,-0.7677181 0,-1.3818931 0,-2.1496081 v -13.810737 h 11.642002 c 0,19.9483841 9.02126,21.0231899 10.18603,21.3302761 3.78362,1.0748058 13.826,6.5982812 16.00803,17.9543649 0.29118,0.614175 0.14559,1.381894 0.14559,1.99402 -0.14559,0 -0.14559,0 0,0 z" + style="fill:#073763;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.22594" + id="path872-1" + clip-path="url(#clipPath32362)" + transform="matrix(1.100951,0,0,1.100951,-8.0715185,-1.9433978)" /></g></svg> diff --git a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp index 1559cd1cd6e29dc17397c48f20848759620a39d9..14343e6b918853b7b5e36ca4cb07789d8ece238f 100644 --- a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp +++ b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp @@ -20,6 +20,7 @@ namespace armarx::armem::client MemoryNameSystem::MemoryNameSystem(mns::MemoryNameSystemInterfacePrx mns, ManagedIceObject* component) : + util::MemoryListener(component), mns(mns), component(component) { } @@ -28,7 +29,7 @@ namespace armarx::armem::client void MemoryNameSystem::initialize(mns::MemoryNameSystemInterfacePrx mns, ManagedIceObject* component) { this->mns = mns; - this->component = component; + setComponent(component); } @@ -407,8 +408,10 @@ namespace armarx::armem::client this->mns = mns; } + void MemoryNameSystem::setComponent(ManagedIceObject* component) { + util::MemoryListener::setComponent(component); this->component = component; } diff --git a/source/RobotAPI/libraries/armem/client/Query.cpp b/source/RobotAPI/libraries/armem/client/Query.cpp index 09f8638b2c7be53b50c9a2dcbefe82de87a536a0..aeb21e97f5420e3394f17f0ff4ec8ceb7a02ae2c 100644 --- a/source/RobotAPI/libraries/armem/client/Query.cpp +++ b/source/RobotAPI/libraries/armem/client/Query.cpp @@ -1,9 +1,9 @@ #include "Query.h" #include <ArmarXCore/core/ice_conversions.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/core/wm/ice_conversions.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> namespace armarx::armem::client diff --git a/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp b/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp index 463c6443e11ddd0ec92d6c5bb4b1001e4e97dfed..96126b71241148187068990a18e61776cef5ba4a 100644 --- a/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp +++ b/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp @@ -14,8 +14,9 @@ namespace armarx::armem::client::plugins void ListeningPlugin::postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties) { + // This is now done by the client::util::MemoryListener class on subscription of a memory ID. // Subscribe topics by single servers, use this as a prefix. - properties->topic<MemoryListenerInterface>("MemoryUpdates"); + // properties->topic<MemoryListenerInterface>("MemoryUpdates"); } } diff --git a/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp b/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp index 3a40a9ffe27b1116fe5a78f5d1a3088652818b38..95eed974f77513f9186aed0d8b2633394b73f3be 100644 --- a/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp +++ b/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp @@ -26,4 +26,3 @@ namespace armarx::armem::client::plugins } } - diff --git a/source/RobotAPI/libraries/armem/client/query/selectors.cpp b/source/RobotAPI/libraries/armem/client/query/selectors.cpp index 5703aee11f5a18242635adeb5294726cf609160e..aeae579c070d8c54692997956589b423956df643 100644 --- a/source/RobotAPI/libraries/armem/client/query/selectors.cpp +++ b/source/RobotAPI/libraries/armem/client/query/selectors.cpp @@ -2,9 +2,9 @@ #include <ArmarXCore/core/ice_conversions.h> #include <ArmarXCore/core/time/ice_conversions.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/core/ice_conversions.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/core/wm/ice_conversions.h> diff --git a/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp b/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp index bc180c726f4d573fe69a3a77bfba2b0be12fe2c8..c8a7c6c683467194d6e2248edc0e5be57d3b547b 100644 --- a/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp +++ b/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp @@ -4,24 +4,39 @@ #include <ArmarXCore/core/exceptions/LocalException.h> #include <ArmarXCore/core/logging/Logging.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> +#include <ArmarXCore/core/ManagedIceObject.h> + #include <RobotAPI/libraries/armem/core/ice_conversions.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/core/error.h> namespace armarx::armem::client::util { - MemoryListener::MemoryListener() + std::string MemoryListener::MakeMemoryTopicName(const MemoryID& memoryID) + { + return "MemoryUpdates." + memoryID.memoryName; + } + + + MemoryListener::MemoryListener(ManagedIceObject* component) : + component(component) { } + void MemoryListener::setComponent(ManagedIceObject* component) + { + this->component = component; + } + + void MemoryListener::updated(const std::vector<data::MemoryID>& updatedSnapshotIDs) const { std::vector<MemoryID> bos; - fromIce(updatedSnapshotIDs, bos); + armarx::fromIce(updatedSnapshotIDs, bos); updated(bos); } @@ -108,6 +123,10 @@ namespace armarx::armem::client::util MemoryListener::subscribe(const MemoryID& id, Callback callback) { callbacks[id].push_back(callback); + if (component) + { + component->usingTopic(MakeMemoryTopicName(id)); + } } diff --git a/source/RobotAPI/libraries/armem/client/util/MemoryListener.h b/source/RobotAPI/libraries/armem/client/util/MemoryListener.h index 2d530097ce6394ddcf4cc815f8e44f93e057d916..ceb765e60db13404fbe170900342cff554b3affe 100644 --- a/source/RobotAPI/libraries/armem/client/util/MemoryListener.h +++ b/source/RobotAPI/libraries/armem/client/util/MemoryListener.h @@ -11,6 +11,12 @@ #include <RobotAPI/libraries/armem/core/MemoryID.h> + +namespace armarx +{ + class ManagedIceObject; +} + namespace armarx::armem::client::util { @@ -20,6 +26,7 @@ namespace armarx::armem::client::util */ class MemoryListener { + public: using Callback = std::function<void(const MemoryID& subscriptionID, const std::vector<MemoryID>& updatedSnapshotIDs)>; using CallbackUpdatedOnly = std::function<void(const std::vector<MemoryID>& updatedSnapshotIDs)>; @@ -29,11 +36,14 @@ namespace armarx::armem::client::util template <class CalleeT> using MemberCallbackUpdatedOnly = void(CalleeT::*)(const std::vector<MemoryID>& updatedSnapshotIDs); + static std::string MakeMemoryTopicName(const MemoryID& memoryID); + public: - MemoryListener(); + MemoryListener(ManagedIceObject* component = nullptr); + void setComponent(ManagedIceObject* component); void subscribe(const MemoryID& subscriptionID, Callback Callback); void subscribe(const MemoryID& subscriptionID, CallbackUpdatedOnly Callback); @@ -73,6 +83,10 @@ namespace armarx::armem::client::util std::unordered_map<MemoryID, std::vector<Callback>> callbacks; + private: + + armarx::ManagedIceObject* component; + }; } diff --git a/source/RobotAPI/libraries/armem/core/base/CoreSegmentBase.h b/source/RobotAPI/libraries/armem/core/base/CoreSegmentBase.h index 56526eb1c589aeaff0924dac1b6117a8942874ef..d7dfcfea91201e5aa817664ca7db3ac5c866d41a 100644 --- a/source/RobotAPI/libraries/armem/core/base/CoreSegmentBase.h +++ b/source/RobotAPI/libraries/armem/core/base/CoreSegmentBase.h @@ -209,22 +209,34 @@ namespace armarx::armem::base // forEachInstance() is provided by ForEachEntityInstanceMixin. - // Get child keys - std::vector<std::string> getProviderSegmentNames() const + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) { - return simox::alg::get_keys(this->_container); + return detail::forEachInstanceIn( + id, func, *this, + id.hasProviderSegmentName(), + id.hasProviderSegmentName() ? this->findProviderSegment(id.providerSegmentName) : nullptr); } - - - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline const auto& providerSegments() const + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) const { - return this->_container; + return detail::forEachInstanceIn( + id, func, *this, + id.hasProviderSegmentName(), + id.hasProviderSegmentName() ? this->findProviderSegment(id.providerSegmentName) : nullptr); } - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline auto& providerSegments() + + + // Get child keys + std::vector<std::string> getProviderSegmentNames() const { - return this->_container; + return simox::alg::get_keys(this->_container); } diff --git a/source/RobotAPI/libraries/armem/core/base/EntityBase.h b/source/RobotAPI/libraries/armem/core/base/EntityBase.h index 7395f1447d568aebfa7b1bcbf10325c0ab6728ec..9c9a8c88a535eb919029c16305f2af72e999423d 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntityBase.h +++ b/source/RobotAPI/libraries/armem/core/base/EntityBase.h @@ -386,6 +386,29 @@ namespace armarx::armem::base { return this->forEachChild(func); } + /** + * @param func Function like: bool process(EntitySnapshotT& snapshot) + */ + template <class SnapshotFunctionT> + bool forEachSnapshotIn(const MemoryID& id, SnapshotFunctionT&& func) + { + return this->forEachChild(func); + } + /** + * @param func Function like void process(const EntitySnapshotT& snapshot) + */ + template <class SnapshotFunctionT> + bool forEachSnapshotIn(const MemoryID& id, SnapshotFunctionT&& func) const + { + if (id.hasTimestamp()) + { + if (const auto* child = findSnapshot(id.timestamp)) + { + child->forEachChild(func); + } + } + return this->forEachChild(func); + } // forEachInstance() is provided by ForEachEntityInstanceMixin. @@ -483,23 +506,35 @@ namespace armarx::armem::base } - // Get child keys - /// @brief Get all timestamps in the history. - std::vector<Time> getTimestamps() const + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) { - return simox::alg::get_keys(this->_container); + return detail::forEachInstanceIn( + id, func, *this, + id.hasTimestamp(), + id.hasTimestamp() ? this->findSnapshot(id.timestamp) : nullptr); } - - - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline const ContainerT& history() const + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) const { - return this->_container; + return detail::forEachInstanceIn( + id, func, *this, + id.hasTimestamp(), + id.hasTimestamp() ? this->findSnapshot(id.timestamp) : nullptr); } - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline ContainerT& history() + + + // Get child keys + /// @brief Get all timestamps in the history. + std::vector<Time> getTimestamps() const { - return const_cast<ContainerT&>(const_cast<const EntityBase*>(this)->history()); + return simox::alg::get_keys(this->_container); } diff --git a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h index 0d0f091f59847cabd2b9d5f0982d634daaa2723a..c983dd8dec8a9a351b0a4cd1efc9d00320f59a1c 100644 --- a/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h +++ b/source/RobotAPI/libraries/armem/core/base/EntitySnapshotBase.h @@ -172,6 +172,39 @@ namespace armarx::armem::base return this->forEachChild(func); } + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) + { + if (id.hasInstanceIndex()) + { + EntityInstanceT* child = findInstance(id.instanceIndex); + return child ? base::detail::call(func, *child) : true; + } + else + { + return this->forEachInstance(func); + } + } + /** + * @param func Function like void process (const EntityInstanceT& instance) + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) const + { + if (id.hasInstanceIndex()) + { + const EntityInstanceT* child = findInstance(id.instanceIndex); + return child ? base::detail::call(func, *child) : true; + } + else + { + return this->forEachInstance(func); + } + } + // Get child keys std::vector<int> getInstanceIndices() const @@ -186,18 +219,6 @@ namespace armarx::armem::base } - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline const std::vector<EntityInstanceT>& instances() const - { - return this->_container; - } - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline std::vector<EntityInstanceT>& instances() - { - return const_cast<std::vector<EntityInstanceT>&>(const_cast<const EntitySnapshotBase*>(this)->instances()); - } - - // MODIFICATION void update(const EntityUpdate& update) diff --git a/source/RobotAPI/libraries/armem/core/base/MemoryBase.h b/source/RobotAPI/libraries/armem/core/base/MemoryBase.h index 991cc609edeb0135bd8fdce43cf19fd797fb0204..dd8d93c1c4698c88a0388f03dca11f8ce8d2696b 100644 --- a/source/RobotAPI/libraries/armem/core/base/MemoryBase.h +++ b/source/RobotAPI/libraries/armem/core/base/MemoryBase.h @@ -186,21 +186,33 @@ namespace armarx::armem::base // forEachInstance() is provided by ForEachEntityInstanceMixin. - std::vector<std::string> getCoreSegmentNames() const + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) { - return simox::alg::get_keys(this->_container); + return detail::forEachInstanceIn( + id, func, *this, + id.hasCoreSegmentName(), + id.hasCoreSegmentName() ? this->findCoreSegment(id.coreSegmentName) : nullptr); } - - - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline auto& coreSegments() const + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) const { - return this->_container; + return detail::forEachInstanceIn( + id, func, *this, + id.hasCoreSegmentName(), + id.hasCoreSegmentName() ? this->findCoreSegment(id.coreSegmentName) : nullptr); } - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline auto& coreSegments() + + + std::vector<std::string> getCoreSegmentNames() const { - return this->_container; + return simox::alg::get_keys(this->_container); } diff --git a/source/RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h b/source/RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h index ffa8bbda11cf691bce42c2966c0b8d6b790e25c4..88485aafd348ade0751ce9fa8fdd6ce8d313660c 100644 --- a/source/RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h +++ b/source/RobotAPI/libraries/armem/core/base/ProviderSegmentBase.h @@ -191,23 +191,34 @@ namespace armarx::armem::base // forEachSnapshot() is provided by ForEachEntitySnapshotMixin // forEachInstance() is provided by ForEachEntityInstanceMixin - - // Get child keys - std::vector<std::string> getEntityNames() const + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) { - return simox::alg::get_keys(this->_container); + return detail::forEachInstanceIn( + id, func, *this, + id.hasEntityName(), + id.hasEntityName() ? this->findEntity(id.entityName) : nullptr); } - - - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline const ContainerT& entities() const + /** + * @param func Function like void process(EntityInstanceT& instance)> + */ + template <class InstanceFunctionT> + bool forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) const { - return this->_container; + return detail::forEachInstanceIn( + id, func, *this, + id.hasEntityName(), + id.hasEntityName() ? this->findEntity(id.entityName) : nullptr); } - [[deprecated("Direct container access is deprecated. Use forEach*() instead.")]] - inline ContainerT& entities() + + + // Get child keys + std::vector<std::string> getEntityNames() const { - return this->_container; + return simox::alg::get_keys(this->_container); } diff --git a/source/RobotAPI/libraries/armem/core/base/detail/iteration_mixins.h b/source/RobotAPI/libraries/armem/core/base/detail/iteration_mixins.h index 876d0d6d73bed644d3b8316c5479f0c15b39b97f..b686b1cc7b304e780579808a6bd3b3f4d1b50ff9 100644 --- a/source/RobotAPI/libraries/armem/core/base/detail/iteration_mixins.h +++ b/source/RobotAPI/libraries/armem/core/base/detail/iteration_mixins.h @@ -3,6 +3,9 @@ #include <functional> #include <type_traits> +#include <RobotAPI/libraries/armem/core/MemoryID.h> + + namespace { template<typename F, typename Ret, typename A, typename... Rest> @@ -103,6 +106,31 @@ namespace armarx::armem::base::detail } + template <class FunctionT, class ParentT, class ChildT> + bool forEachInstanceIn( + const MemoryID& id, + FunctionT&& func, + ParentT& parent, + bool single, + ChildT* child + ) + { + auto childFn = [&id,&func](auto& child) + { + return child.forEachInstanceIn(id, func); + }; + if (single) + { + return child ? childFn(*child) : true; + } + else + { + return parent.forEachChild(childFn); + } + } + + + // We use auto instead of, e.g. DerivedT::EntitySnapshotT, // as we cannot use the typedef before DerivedT was completely defined. diff --git a/source/RobotAPI/libraries/armem/core/base/ice_conversions.cpp b/source/RobotAPI/libraries/armem/core/base/ice_conversions.cpp index a71881a57851833f91debb68c1f026f2b1fb7859..6ec40abd7ec808b8aca5aaf3cb4a93a5772e17b1 100644 --- a/source/RobotAPI/libraries/armem/core/base/ice_conversions.cpp +++ b/source/RobotAPI/libraries/armem/core/base/ice_conversions.cpp @@ -1,12 +1,12 @@ #include "ice_conversions.h" #include <ArmarXCore/core/time/ice_conversions.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <RobotAPI/libraries/aron/core/data/variant/container/Dict.h> #include <RobotAPI/libraries/aron/core/type/variant/container/Object.h> #include <RobotAPI/libraries/armem/core/ice_conversions.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> namespace armarx::armem::base @@ -71,11 +71,11 @@ namespace armarx::armem void base::toIce(data::EntityInstanceMetadataPtr& ice, const EntityInstanceMetadata& metadata) { - armem::toIce<data::EntityInstanceMetadata>(ice, metadata); + armarx::toIce<data::EntityInstanceMetadata>(ice, metadata); } void base::fromIce(const data::EntityInstanceMetadataPtr& ice, EntityInstanceMetadata& metadata) { - armem::fromIce<data::EntityInstanceMetadata>(ice, metadata); + armarx::fromIce<data::EntityInstanceMetadata>(ice, metadata); } } diff --git a/source/RobotAPI/libraries/armem/core/base/ice_conversions.h b/source/RobotAPI/libraries/armem/core/base/ice_conversions.h index b58e820917bd8784f355793c308a8f5fe4d0efdb..e808e01ace5165eb3fb38109cc850138e20061df 100644 --- a/source/RobotAPI/libraries/armem/core/base/ice_conversions.h +++ b/source/RobotAPI/libraries/armem/core/base/ice_conversions.h @@ -7,14 +7,13 @@ #include "CoreSegmentBase.h" #include "MemoryBase.h" -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/core/ice_conversions.h> - #include <RobotAPI/libraries/aron/core/type/variant/forward_declarations.h> #include <RobotAPI/interface/armem/memory.h> #include <ArmarXCore/core/exceptions/local/ExpressionException.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <ArmarXCore/core/time/ice_conversions.h> @@ -64,7 +63,7 @@ namespace armarx::armem::base ice.instances.clear(); snapshot.forEachInstance([&ice](const auto & instance) { - armem::toIce(ice.instances.emplace_back(), instance); + armarx::toIce(ice.instances.emplace_back(), instance); }); } template <class ...Args> @@ -75,7 +74,7 @@ namespace armarx::armem::base snapshot.clear(); for (const data::EntityInstancePtr& iceInstance : ice.instances) { - snapshot.addInstance(armem::fromIce<typename EntitySnapshotBase<Args...>::EntityInstanceT>(iceInstance)); + snapshot.addInstance(armarx::fromIce<typename EntitySnapshotBase<Args...>::EntityInstanceT>(iceInstance)); } } @@ -87,7 +86,7 @@ namespace armarx::armem::base ice.history.clear(); entity.forEachSnapshot([&ice](const auto & snapshot) { - armem::toIce(ice.history[armem::toIce<dto::Time>(snapshot.time())], snapshot); + armarx::toIce(ice.history[armarx::toIce<dto::Time>(snapshot.time())], snapshot); }); } template <class ...Args> @@ -98,7 +97,7 @@ namespace armarx::armem::base entity.clear(); for (const auto& [key, snapshot] : ice.history) { - entity.addSnapshot(armem::fromIce<typename EntityBase<Args...>::EntitySnapshotT>(snapshot)); + entity.addSnapshot(armarx::fromIce<typename EntityBase<Args...>::EntitySnapshotT>(snapshot)); } } @@ -114,7 +113,7 @@ namespace armarx::armem::base ice.entities.clear(); providerSegment.forEachEntity([&ice](const auto & entity) { - armem::toIce(ice.entities[entity.name()], entity); + armarx::toIce(ice.entities[entity.name()], entity); }); } template <class ...Args> @@ -129,7 +128,7 @@ namespace armarx::armem::base for (const auto& [key, entity] : ice.entities) { providerSegment.addEntity( - armem::fromIce<typename ProviderSegmentBase<Args...>::EntityT>(entity)); + armarx::fromIce<typename ProviderSegmentBase<Args...>::EntityT>(entity)); } } @@ -144,7 +143,7 @@ namespace armarx::armem::base ice.providerSegments.clear(); coreSegment.forEachProviderSegment([&ice](const auto & providerSegment) { - armem::toIce(ice.providerSegments[providerSegment.name()], providerSegment); + armarx::toIce(ice.providerSegments[providerSegment.name()], providerSegment); }); } template <class ...Args> @@ -160,7 +159,7 @@ namespace armarx::armem::base for (const auto& [key, providerSegment] : ice.providerSegments) { coreSegment.addProviderSegment( - armem::fromIce<typename CoreSegmentBase<Args...>::ProviderSegmentT>(providerSegment)); + armarx::fromIce<typename CoreSegmentBase<Args...>::ProviderSegmentT>(providerSegment)); } } @@ -172,7 +171,7 @@ namespace armarx::armem::base ice.coreSegments.clear(); memory.forEachCoreSegment([&ice](const auto & coreSegment) { - armem::toIce(ice.coreSegments[coreSegment.name()], coreSegment); + armarx::toIce(ice.coreSegments[coreSegment.name()], coreSegment); }); } template <class ...Args> @@ -184,7 +183,7 @@ namespace armarx::armem::base for (const auto& [key, coreSegment] : ice.coreSegments) { // We can avoid using CoreSegment's copy constructor this way: - armem::fromIce(coreSegment, memory.addCoreSegment(coreSegment->id.coreSegmentName)); + armarx::fromIce(coreSegment, memory.addCoreSegment(coreSegment->id.coreSegmentName)); } } diff --git a/source/RobotAPI/libraries/armem/core/ice_conversions.cpp b/source/RobotAPI/libraries/armem/core/ice_conversions.cpp index 1dd76ae471eab7f3041b7ea835891f53d6df3f3f..dfd25e3ba39ca2bc9a18be1b45684d004255297f 100644 --- a/source/RobotAPI/libraries/armem/core/ice_conversions.cpp +++ b/source/RobotAPI/libraries/armem/core/ice_conversions.cpp @@ -1,6 +1,7 @@ #include "ice_conversions.h" #include <ArmarXCore/core/time/ice_conversions.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <RobotAPI/libraries/aron/core/data/variant/container/Dict.h> @@ -8,8 +9,6 @@ #include <RobotAPI/interface/armem/commit.h> #include <RobotAPI/interface/armem/memory.h> -#include "ice_conversions_templates.h" - #include "actions.h" #include "Commit.h" #include "MemoryID.h" @@ -137,7 +136,7 @@ namespace armarx void armem::fromIce(const data::EntityUpdate& ice, EntityUpdate& update, Time timeArrived) { - armem::fromIce(ice, update); + fromIce(ice, update); update.timeArrived = timeArrived; } diff --git a/source/RobotAPI/libraries/armem/core/ice_conversions.h b/source/RobotAPI/libraries/armem/core/ice_conversions.h index 2a4daf725a32bb9ca12a5865be8207b87076871a..b88157c688bcaeefd301b1764bf6a78d33badf71 100644 --- a/source/RobotAPI/libraries/armem/core/ice_conversions.h +++ b/source/RobotAPI/libraries/armem/core/ice_conversions.h @@ -28,7 +28,6 @@ namespace armarx::armem void fromIce(const data::Commit& ice, Commit& commit, Time timeArrived); void fromIce(const data::EntityUpdate& ice, EntityUpdate& update, Time timeArrived); - void fromIce(const actions::data::MenuPtr& ice, actions::Menu& menu); void toIce(actions::data::MenuPtr& ice, const actions::Menu& menu); diff --git a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp index 930c1c15d2e3cbd9adf1882ab2e805a21a8027f8..12610c2ac042b237473f4fba8014f3c1b266d860 100644 --- a/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp +++ b/source/RobotAPI/libraries/armem/server/MemoryToIceAdapter.cpp @@ -3,14 +3,14 @@ #include "query_proc/wm/wm.h" #include "query_proc/ltm/disk/ltm.h" -#include <RobotAPI/libraries/armem/server/wm/ice_conversions.h> - +#include <RobotAPI/libraries/aron/core/Exception.h> #include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem/core/ice_conversions.h> #include <RobotAPI/libraries/armem/core/wm/ice_conversions.h> - -#include <RobotAPI/libraries/aron/core/Exception.h> +#include <RobotAPI/libraries/armem/server/wm/ice_conversions.h> #include <ArmarXCore/core/exceptions/local/ExpressionException.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <ArmarXCore/core/logging/Logging.h> #include <ArmarXCore/core/time/ice_conversions.h> @@ -123,7 +123,7 @@ namespace armarx::armem::server armem::Commit commit; try { - armem::fromIce(commitIce, commit, timeArrived); + ::armarx::armem::fromIce(commitIce, commit, timeArrived); } catch (const aron::error::AronNotValidException& e) { @@ -138,7 +138,7 @@ namespace armarx::armem::server armem::CommitResult result = this->commit(commit); data::CommitResult resultIce; - armem::toIce(resultIce, result); + toIce(resultIce, result); return resultIce; } @@ -229,7 +229,7 @@ namespace armarx::armem::server if (publishUpdates) { data::MemoryID& id = updatedIDs.emplace_back(); - armem::toIce(id, result.snapshotID); + toIce(id, result.snapshotID); } } catch (const error::ArMemError& e) @@ -310,7 +310,7 @@ namespace armarx::armem::server } } - result.memory = toIce<data::MemoryPtr>(wmResult); + result.memory = armarx::toIce<data::MemoryPtr>(wmResult); result.success = true; if (result.memory->coreSegments.size() == 0) @@ -352,8 +352,7 @@ namespace armarx::armem::server if (queryResult.success) { - armem::wm::Memory m; - fromIce(queryResult.memory, m); + armem::wm::Memory m = armarx::fromIce<armem::wm::Memory>(queryResult.memory); longtermMemory->store(m); } diff --git a/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp b/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp index 298983e478fbc03f5ec6187e9394da128e2a5171..40d22cead44dea33a993364415ea6cbe59d6413a 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp +++ b/source/RobotAPI/libraries/armem/server/plugins/Plugin.cpp @@ -1,6 +1,7 @@ #include "Plugin.h" #include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem/client/util/MemoryListener.h> #include <RobotAPI/libraries/armem/client/plugins/Plugin.h> #include <ArmarXCore/core/Component.h> @@ -37,9 +38,13 @@ namespace armarx::armem::server::plugins properties->optional(longtermMemory.enabled, prefix + "ltm.enabled"); } longtermMemory.createPropertyDefinitions(properties, prefix + "ltm."); + } + - // Publish memory updates topic - properties->topic(memoryTopic, memoryTopicDefaultName); + void Plugin::preOnInitComponent() + { + memoryTopicName = client::util::MemoryListener::MakeMemoryTopicName(MemoryID(workingMemory.name())); + parent().offeringTopic(memoryTopicName); } @@ -52,6 +57,7 @@ namespace armarx::armem::server::plugins { registerServer(parent); } + parent.getTopic(memoryTopic, memoryTopicName); iceAdapter.setMemoryListener(memoryTopic); } diff --git a/source/RobotAPI/libraries/armem/server/plugins/Plugin.h b/source/RobotAPI/libraries/armem/server/plugins/Plugin.h index 8a5a68934003997a9588117ecc985f2fa9dfe456..dcbe7adc4c3b519a55da2b234f6f3b28338fd74f 100644 --- a/source/RobotAPI/libraries/armem/server/plugins/Plugin.h +++ b/source/RobotAPI/libraries/armem/server/plugins/Plugin.h @@ -33,6 +33,7 @@ namespace armarx::armem::server::plugins virtual void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override; + virtual void preOnInitComponent() override; virtual void postOnConnectComponent() override; virtual void preOnDisconnectComponent() override; @@ -74,7 +75,9 @@ namespace armarx::armem::server::plugins // Working Memory Updates (publishing) - std::string memoryTopicDefaultName = "MemoryUpdates"; + /// Available at onInit(). + std::string memoryTopicName; + /// Available after onConnect(). client::MemoryListenerInterfacePrx memoryTopic; diff --git a/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h b/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h index 73a77eddd0d7efab69dc16f37e544049e743fc43..432453afbf5de7e1c4d1b0cdd21d18bef1b56787 100644 --- a/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h +++ b/source/RobotAPI/libraries/armem/server/query_proc/base/EntityQueryProcessorBase.h @@ -3,11 +3,11 @@ #include "BaseQueryProcessorBase.h" #include <ArmarXCore/core/time/ice_conversions.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/core/Time.h> #include <RobotAPI/libraries/armem/core/error.h> #include <RobotAPI/libraries/armem/core/ice_conversions.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> #include <RobotAPI/interface/armem/query.h> @@ -108,7 +108,7 @@ namespace armarx::armem::server::query_proc::base } else { - const Time time = armem::fromIce<Time>(query.timestamp); + const Time time = armarx::fromIce<Time>(query.timestamp); if (auto snapshot = entity.findSnapshot(time)) { this->addResultSnapshot(result, *snapshot); @@ -141,8 +141,8 @@ namespace armarx::armem::server::query_proc::base || query.minTimestamp.timeSinceEpoch.microSeconds < 0 || query.maxTimestamp.timeSinceEpoch.microSeconds < 0) { - const Time min = fromIce<Time>(query.minTimestamp); - const Time max = fromIce<Time>(query.maxTimestamp); + const Time min = armarx::fromIce<Time>(query.minTimestamp); + const Time max = armarx::fromIce<Time>(query.maxTimestamp); process(result, min, max, entity, query); } } @@ -181,7 +181,7 @@ namespace armarx::armem::server::query_proc::base const armem::query::data::entity::BeforeOrAtTime& query, const EntityT& entity) const { - const Time referenceTimestamp = fromIce<Time>(query.timestamp); + const Time referenceTimestamp = armarx::fromIce<Time>(query.timestamp); base::detail::checkReferenceTimestampNonNegative(referenceTimestamp); if (auto beforeOrAt = entity.findLatestSnapshotBeforeOrAt(referenceTimestamp)) @@ -195,7 +195,7 @@ namespace armarx::armem::server::query_proc::base const armem::query::data::entity::BeforeTime& query, const EntityT& entity) const { - const Time referenceTimestamp = fromIce<Time>(query.timestamp); + const Time referenceTimestamp = armarx::fromIce<Time>(query.timestamp); base::detail::checkReferenceTimestampNonNegative(referenceTimestamp); std::vector<const EntitySnapshotT*> befores; @@ -226,7 +226,7 @@ namespace armarx::armem::server::query_proc::base const armem::query::data::entity::TimeApprox& query, const EntityT& entity) const { - const Time referenceTimestamp = fromIce<Time>(query.timestamp); + const Time referenceTimestamp = armarx::fromIce<Time>(query.timestamp); base::detail::checkReferenceTimestampNonNegative(referenceTimestamp); // elements have to be in range [t_ref - eps, t_ref + eps] if eps is positive diff --git a/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp index 8cb721c4b724e0c6f307a6ee6b796c01c974680a..f1b5b362318e577dda941c1dd8fff97dd3cf72d7 100644 --- a/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp +++ b/source/RobotAPI/libraries/armem/test/ArMemForEachTest.cpp @@ -167,7 +167,6 @@ BOOST_AUTO_TEST_CASE(test_forEach) }); BOOST_TEST_INFO(toVector(cids)); BOOST_CHECK_EQUAL(cids.size(), 0); - } @@ -186,3 +185,240 @@ BOOST_AUTO_TEST_CASE(test_forEach_non_bool_func) }); BOOST_CHECK_EQUAL(i, 2); } + + + +BOOST_AUTO_TEST_CASE(test_forEachInstanceIn) +{ + armem::wm::EntitySnapshot snapshot(armem::Time::Now()); + snapshot.addInstance(); + snapshot.addInstance(); + + int i = 0; + auto count = [&i](const auto&) -> void + { + ++i; + }; + + { + auto test = [&](auto&& snapshot) + { + armem::MemoryID id; + + // Count any. + i = 0; + snapshot.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 2); + + // Just index 0. + id.instanceIndex = 0; + i = 0; + snapshot.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 1); + + // Just index 1. + id.instanceIndex = 1; + i = 0; + snapshot.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 1); + + // Just index 2, but does not exist. + id.instanceIndex = 2; + i = 0; + snapshot.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 0); + }; + test(snapshot); + test(const_cast<const armem::wm::EntitySnapshot&>(snapshot)); + } + + + armem::wm::Entity entity("entity"); + entity.addSnapshot(snapshot); + entity.addSnapshot(snapshot.time() + armem::Duration::Seconds(1)).addInstance(); + + { + auto test = [&](auto&& entity) + { + armem::MemoryID id; + + // Count any. + i = 0; + entity.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 3); + + // Count only one snapshot (with 2 instances). + id.timestamp = snapshot.time(); + i = 0; + entity.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 2); + + // Count only one snapshot and only one instance. + id.instanceIndex = 1; + i = 0; + entity.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 1); + + // Count non-existing snapshot. + id = {}; + id.timestamp = snapshot.time() - armem::Duration::Seconds(1); + i = 0; + entity.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 0); + }; + test(entity); + test(const_cast<const armem::wm::Entity&>(entity)); + } + + + armem::wm::ProviderSegment provSeg("provider"); + provSeg.addEntity(entity); + provSeg.addEntity(entity.name() + " 2") + .addSnapshot(armem::Time::Now()) + .addInstance(); + + { + auto test = [&](auto&& provSeg) + { + armem::MemoryID id; + + // Count all (2+1) + 1 instances. + i = 0; + provSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 4); + + // Count only one entity (with 2+1 instances). + id.entityName = entity.name(); + i = 0; + provSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 3); + + // Count only one entity and one snapshot with 2 instances. + id.timestamp = snapshot.time(); + i = 0; + provSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 2); + + // Count only one entity and one snapshot, 1 instance. + id.instanceIndex = 1; + i = 0; + provSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 1); + + // Count non-existing entity. + id = {}; + id.entityName = "non existing"; + i = 0; + provSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 0); + }; + test(provSeg); + test(const_cast<const armem::wm::ProviderSegment&>(provSeg)); + } + + + armem::wm::CoreSegment coreSeg("core"); + coreSeg.addProviderSegment(provSeg); + coreSeg.addProviderSegment("other prov segment") + .addEntity("other entity") + .addSnapshot(armem::Time::Now()) + .addInstance(); + + { + auto test = [&](auto&& coreSeg) + { + armem::MemoryID id; + + // Count all ( (2+1) + 1) + 1 instances. + i = 0; + coreSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 5); + + // Count only one provider segment (with (2+1) + 1 instances). + id.providerSegmentName = provSeg.name(); + i = 0; + coreSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 4); + + id.entityName = entity.name(); + i = 0; + coreSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 3); + + id.timestamp = snapshot.time(); + i = 0; + coreSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 2); + + id.instanceIndex = 1; + i = 0; + coreSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 1); + + // Count non-existing provider segment. + id = {}; + id.providerSegmentName = "non existing"; + i = 0; + coreSeg.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 0); + }; + test(coreSeg); + test(const_cast<const armem::wm::CoreSegment&>(coreSeg)); + } + + + armem::wm::Memory memory("memory"); + memory.addCoreSegment(coreSeg); + memory.addCoreSegment("other memory") + .addProviderSegment("other provider segment") + .addEntity("other entity") + .addSnapshot(armem::Time::Now()) + .addInstance(); + + { + auto test = [&](auto&& memory) + { + armem::MemoryID id; + + // Count all ( ( (2+1) + 1) + 1 ) + 1 instances. + i = 0; + memory.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 6); + + // Count only one provider segment (with (2+1) + 1 instances). + id.coreSegmentName = coreSeg.name(); + i = 0; + memory.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 5); + + id.providerSegmentName = provSeg.name(); + i = 0; + memory.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 4); + + id.entityName = entity.name(); + i = 0; + memory.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 3); + + id.timestamp = snapshot.time(); + i = 0; + memory.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 2); + + id.instanceIndex = 1; + i = 0; + memory.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 1); + + // Count non-existing provider segment. + id = {}; + id.coreSegmentName = "non existing"; + i = 0; + memory.forEachInstanceIn(id, count); + BOOST_CHECK_EQUAL(i, 0); + }; + test(memory); + test(const_cast<const armem::wm::Memory&>(memory)); + } +} diff --git a/source/RobotAPI/libraries/armem/test/ArMemIceConversionsTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemIceConversionsTest.cpp index 07ea4e3acc307aa3d7abb97c7f9bd3f450a4129e..071b0bc4b38882bbd7e87307d946312ba50d6f10 100644 --- a/source/RobotAPI/libraries/armem/test/ArMemIceConversionsTest.cpp +++ b/source/RobotAPI/libraries/armem/test/ArMemIceConversionsTest.cpp @@ -26,7 +26,7 @@ #include <RobotAPI/Test.h> #include <RobotAPI/libraries/armem/core/wm/ice_conversions.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <iostream> #include <SimoxUtility/algorithm/get_map_keys_values.h> @@ -52,7 +52,7 @@ BOOST_AUTO_TEST_CASE(test_entity) entity.addSnapshot(snapshot); armem::data::EntityPtr ice; - armem::toIce(ice, entity); + armarx::toIce(ice, entity); BOOST_CHECK_EQUAL(ice->id.memoryName, entity.id().memoryName); BOOST_CHECK_EQUAL(ice->id.coreSegmentName, entity.id().coreSegmentName); @@ -62,7 +62,7 @@ BOOST_AUTO_TEST_CASE(test_entity) BOOST_CHECK_EQUAL(ice->history.size(), entity.size()); armem::wm::Entity entityOut; - armem::fromIce(ice, entityOut); + armarx::fromIce(ice, entityOut); BOOST_CHECK_EQUAL(entityOut.size(), entity.size()); diff --git a/source/RobotAPI/libraries/armem/test/ArMemQueryBuilderTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemQueryBuilderTest.cpp index 535ce2b80b6b9b5ac7c95fcf3f9847ab943d1729..1f92ff883c67fe070328bd51ff6a9baad7afa81b 100644 --- a/source/RobotAPI/libraries/armem/test/ArMemQueryBuilderTest.cpp +++ b/source/RobotAPI/libraries/armem/test/ArMemQueryBuilderTest.cpp @@ -28,7 +28,7 @@ #include <ArmarXCore/core/time/ice_conversions.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/client/query/Builder.h> #include <RobotAPI/libraries/armem/client/query/query_fns.h> @@ -147,7 +147,7 @@ BOOST_AUTO_TEST_CASE(test_mixed) { auto atTime = query::entity::SinglePtr::dynamicCast(*it); BOOST_REQUIRE(atTime); - BOOST_CHECK_EQUAL(atTime->timestamp, armem::toIce<armem::dto::Time>(armem::Time(armem::Duration::MilliSeconds(3000)))); + BOOST_CHECK_EQUAL(atTime->timestamp, armarx::toIce<armem::dto::Time>(armem::Time(armem::Duration::MilliSeconds(3000)))); ++it; } { @@ -160,8 +160,8 @@ BOOST_AUTO_TEST_CASE(test_mixed) { auto timeRange = query::entity::TimeRangePtr::dynamicCast(*it); BOOST_REQUIRE(timeRange); - BOOST_CHECK_EQUAL(timeRange->minTimestamp, armem::toIce<armem::dto::Time>(armem::Time(armem::Duration::MilliSeconds(1000)))); - BOOST_CHECK_EQUAL(timeRange->maxTimestamp, armem::toIce<armem::dto::Time>(armem::Time(armem::Duration::MilliSeconds(2000)))); + BOOST_CHECK_EQUAL(timeRange->minTimestamp, armarx::toIce<armem::dto::Time>(armem::Time(armem::Duration::MilliSeconds(1000)))); + BOOST_CHECK_EQUAL(timeRange->maxTimestamp, armarx::toIce<armem::dto::Time>(armem::Time(armem::Duration::MilliSeconds(2000)))); ++it; } } diff --git a/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp b/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp index 4572bb8d645123296d5d7026ac21eb27032e9be4..1c2b1a25a9a050e4ea597477780ccc340fdcb60b 100644 --- a/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp +++ b/source/RobotAPI/libraries/armem_gui/MemoryViewer.cpp @@ -19,6 +19,7 @@ #include <ArmarXCore/core/ManagedIceObject.h> #include <ArmarXCore/core/time/TimeUtil.h> #include <ArmarXCore/observers/variant/Variant.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <ArmarXGui/libraries/SimpleConfigDialog/SimpleConfigDialog.h> diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp index 2c8ca4e7d00a27665104e6002e09c39ff52284f2..6bad86c0f05ccdaa33855d9411c27d9cc04d50f6 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp @@ -9,7 +9,6 @@ #include <RobotAPI/libraries/armem/core/aron_conversions.h> #include <RobotAPI/libraries/armem/core/error.h> -#include <RobotAPI/libraries/armem/core/ice_conversions_templates.h> #include <RobotAPI/libraries/armem/client/Writer.h> #include <RobotAPI/libraries/armem/client/query/Builder.h> #include <RobotAPI/libraries/armem/client/query/query_fns.h> @@ -28,6 +27,7 @@ #include <RobotAPI/libraries/core/FramedPose.h> #include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h> +#include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> #include <ArmarXCore/core/logging/Logging.h> #include <ArmarXCore/core/system/cmake/CMakePackageFinder.h> #include <ArmarXCore/core/time/DateTime.h> diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.cpp b/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.cpp index deed74c9ada113f05d10286a370b703d6a712642..8b738d098d56b40796fc427f6d69dd744beab9cc 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.cpp +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.cpp @@ -24,4 +24,15 @@ namespace armarx::aron dto = bo.matrix(); } + void fromAron(const AronPose& dto, Eigen::Isometry3d& bo) + { + bo.matrix() = dto.cast<double>(); + } + + void toAron(AronPose& dto, const Eigen::Isometry3d& bo) + { + dto = bo.matrix().cast<float>(); + } + + } // namespace armarx::aron diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.h b/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.h index 3520b2dedd7c10f2d358cb7997269871979b52ed..3ace8f400192823bd7c59cce605ef50e77dfdbff 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/eigen.h @@ -12,4 +12,7 @@ namespace armarx::aron void fromAron(const AronPose& dto, Eigen::Isometry3f& bo); void toAron(AronPose& dto, const Eigen::Isometry3f& bo); + void fromAron(const AronPose& dto, Eigen::Isometry3d& bo); + void toAron(AronPose& dto, const Eigen::Isometry3d& bo); + } // namespace armarx diff --git a/source/RobotAPI/libraries/aron/core/test/aronCodeGenerationTest.cpp b/source/RobotAPI/libraries/aron/core/test/aronCodeGenerationTest.cpp index e62f3d3d786bdd232631daa00d28f4724d03bd01..392739b2d4de4681cbfda63abbd41b93a10ff692 100644 --- a/source/RobotAPI/libraries/aron/core/test/aronCodeGenerationTest.cpp +++ b/source/RobotAPI/libraries/aron/core/test/aronCodeGenerationTest.cpp @@ -61,6 +61,16 @@ using namespace armarx; using namespace aron; + +namespace std +{ + ostream& operator<<(ostream& os, const type_info& i) + { + return os << "'" << i.name() << "'"; + } +} + + BOOST_AUTO_TEST_CASE(AronCodeGenerationAnyTest) { std::cout << "Running Code Gen Any test" << std::endl; @@ -84,6 +94,7 @@ BOOST_AUTO_TEST_CASE(AronCodeGenerationAnyTest) BOOST_CHECK_EQUAL(int_var2->getValue(), 5); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationTemplateTest) { std::cout << "Running Code Gen Tmpl test" << std::endl; @@ -136,148 +147,156 @@ BOOST_AUTO_TEST_CASE(AronCodeGenerationTemplateTest) BOOST_CHECK_EQUAL(tt_daimpl_dablarg->getTemplateInstantiations(), std::vector<std::string>{}); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationListTest) { std::cout << "Running Code Gen List test" << std::endl; ListTest p_tmp; ListTest p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); - - BOOST_CHECK_EQUAL(typeid(p.intList) == typeid(std::vector<int>), true); - BOOST_CHECK_EQUAL(typeid(p.longList) == typeid(std::vector<long>), true); - BOOST_CHECK_EQUAL(typeid(p.floatList) == typeid(std::vector<float>), true); - BOOST_CHECK_EQUAL(typeid(p.doubleList) == typeid(std::vector<double>), true); - BOOST_CHECK_EQUAL(typeid(p.stringList) == typeid(std::vector<std::string>), true); - BOOST_CHECK_EQUAL(typeid(p.boolList) == typeid(std::vector<bool>), true); - //BOOST_CHECK_EQUAL(typeid(p.objectList) == typeid(std::vector<ListTest::ListClass>), true); - - BOOST_CHECK_EQUAL(p.intList.size() == 0, true); - BOOST_CHECK_EQUAL(p.longList.size() == 0, true); - BOOST_CHECK_EQUAL(p.floatList.size() == 0, true); - BOOST_CHECK_EQUAL(p.doubleList.size() == 0, true); - BOOST_CHECK_EQUAL(p.stringList.size() == 0, true); - BOOST_CHECK_EQUAL(p.boolList.size() == 0, true); - BOOST_CHECK_EQUAL(p.objectList.size() == 0, true); + BOOST_CHECK(p_tmp == p); + + BOOST_CHECK_EQUAL(typeid(p.intList), typeid(std::vector<int>)); + BOOST_CHECK_EQUAL(typeid(p.longList), typeid(std::vector<long>)); + BOOST_CHECK_EQUAL(typeid(p.floatList), typeid(std::vector<float>)); + BOOST_CHECK_EQUAL(typeid(p.doubleList), typeid(std::vector<double>)); + BOOST_CHECK_EQUAL(typeid(p.stringList), typeid(std::vector<std::string>)); + BOOST_CHECK_EQUAL(typeid(p.boolList), typeid(std::vector<bool>)); + //BOOST_CHECK_EQUAL(typeid(p.objectList), typeid(std::vector<ListTest::ListClass>)); + + BOOST_CHECK_EQUAL(p.intList.size(), 0); + BOOST_CHECK_EQUAL(p.longList.size(), 0); + BOOST_CHECK_EQUAL(p.floatList.size(), 0); + BOOST_CHECK_EQUAL(p.doubleList.size(), 0); + BOOST_CHECK_EQUAL(p.stringList.size(), 0); + BOOST_CHECK_EQUAL(p.boolList.size(), 0); + BOOST_CHECK_EQUAL(p.objectList.size(), 0); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationDictTest) { std::cout << "Running Code Gen Dict test" << std::endl; DictTest p_tmp; DictTest p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); + BOOST_CHECK(p_tmp == p); - BOOST_CHECK_EQUAL(p.dict.size() == 0, true); + BOOST_CHECK_EQUAL(p.dict.size(), 0); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationEigenMatrixTest) { std::cout << "Running Code Gen EigenMatrix test" << std::endl; EigenMatrixTest p_tmp; EigenMatrixTest p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); - - BOOST_CHECK_EQUAL(p.the_short_eigen_matrix.rows() == 5, true); - BOOST_CHECK_EQUAL(p.the_short_eigen_matrix.cols() == 7, true); - BOOST_CHECK_EQUAL(p.the_int_eigen_matrix.rows() == 7, true); - BOOST_CHECK_EQUAL(p.the_int_eigen_matrix.cols() == 7, true); - BOOST_CHECK_EQUAL(p.the_long_eigen_matrix.rows() == 7, true); - BOOST_CHECK_EQUAL(p.the_long_eigen_matrix.cols() == 5, true); - BOOST_CHECK_EQUAL(p.the_float_eigen_matrix.rows() == 1, true); - BOOST_CHECK_EQUAL(p.the_float_eigen_matrix.cols() == 9, true); - BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.rows() == 25, true); - BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.cols() == 1, true); + BOOST_CHECK(p_tmp == p); + + BOOST_CHECK_EQUAL(p.the_short_eigen_matrix.rows(), 5); + BOOST_CHECK_EQUAL(p.the_short_eigen_matrix.cols(), 7); + BOOST_CHECK_EQUAL(p.the_int_eigen_matrix.rows(), 7); + BOOST_CHECK_EQUAL(p.the_int_eigen_matrix.cols(), 7); + BOOST_CHECK_EQUAL(p.the_long_eigen_matrix.rows(), 7); + BOOST_CHECK_EQUAL(p.the_long_eigen_matrix.cols(), 5); + BOOST_CHECK_EQUAL(p.the_float_eigen_matrix.rows(), 1); + BOOST_CHECK_EQUAL(p.the_float_eigen_matrix.cols(), 9); + BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.rows(), 5); + BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.cols(), 1); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationEigenQuaternionTest) { std::cout << "Running Code Gen EigenQuaternion test" << std::endl; EigenQuaternionTest p_tmp; EigenQuaternionTest p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); + BOOST_CHECK(p_tmp == p); - //BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.w() == 0, true); - //BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.x() == 0, true); - //BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.y() == 0, true); - //BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.z() == 0, true); + //BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.w(), 0); + //BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.x(), 0); + //BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.y(), 0); + //BOOST_CHECK_EQUAL(p.the_double_eigen_matrix.z(), 0); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationEigenPositionTest) { std::cout << "Running Code Gen EigenPosition test" << std::endl; PositionTest p_tmp; PositionTest p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); + BOOST_CHECK(p_tmp == p); - BOOST_CHECK_EQUAL(p.position.rows() == 3, true); - BOOST_CHECK_EQUAL(p.position.cols() == 1, true); + BOOST_CHECK_EQUAL(p.position.rows(), 3); + BOOST_CHECK_EQUAL(p.position.cols(), 1); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationEigenPoseTest) { std::cout << "Running Code Gen EigenPose test" << std::endl; PoseTest p_tmp; PoseTest p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); + BOOST_CHECK(p_tmp == p); - BOOST_CHECK_EQUAL(p.pose.rows() == 4, true); - BOOST_CHECK_EQUAL(p.pose.cols() == 4, true); + BOOST_CHECK_EQUAL(p.pose.rows(), 4); + BOOST_CHECK_EQUAL(p.pose.cols(), 4); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationIntEnumTest) { std::cout << "Running Code Gen IntEnum test" << std::endl; TheObjectThatUsesTheIntEnum p_tmp; TheObjectThatUsesTheIntEnum p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); + BOOST_CHECK(p_tmp == p); - BOOST_CHECK_EQUAL(p.the_int_enum.value == TheIntEnum::INT_ENUM_VALUE_0, true); + BOOST_CHECK(p.the_int_enum.value == TheIntEnum::INT_ENUM_VALUE_0); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationPrimitiveTest) { std::cout << "Running Code Gen Primitive test" << std::endl; PrimitiveTest p_tmp; PrimitiveTest p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); - - BOOST_CHECK_EQUAL(p.the_bool == false, true); - BOOST_CHECK_EQUAL(p.the_double == 0.0, true); - BOOST_CHECK_EQUAL(p.the_float == 0.0, true); - BOOST_CHECK_EQUAL(p.the_int == 0, true); - BOOST_CHECK_EQUAL(p.the_long == 0, true); - BOOST_CHECK_EQUAL(p.the_string == "", true); - BOOST_CHECK_EQUAL(p.the_time == IceUtil::Time(), true); + BOOST_CHECK(p_tmp == p); + + BOOST_CHECK_EQUAL(p.the_bool, false); + BOOST_CHECK_EQUAL(p.the_double, 0.0); + BOOST_CHECK_EQUAL(p.the_float, 0.0); + BOOST_CHECK_EQUAL(p.the_int, 0); + BOOST_CHECK_EQUAL(p.the_long, 0); + BOOST_CHECK_EQUAL(p.the_string, ""); + BOOST_CHECK(p.the_time == IceUtil::Time()); } + BOOST_AUTO_TEST_CASE(AronCodeGenerationOptionalTest) { std::cout << "Running Code Gen Optional test" << std::endl; OptionalTest p_tmp; OptionalTest p = p_tmp; // test assignment - BOOST_CHECK_EQUAL(p_tmp == p, true); - - BOOST_CHECK_EQUAL(typeid(p.some_dict) == typeid(std::optional<std::map<std::string, float>>), true); - BOOST_CHECK_EQUAL(typeid(p.some_dict_with_optional_type) == typeid(std::map<std::string, std::optional<float>>), true); - BOOST_CHECK_EQUAL(typeid(p.some_eigen_matrix) == typeid(std::optional<Eigen::Matrix<long, 25, 10>>), true); - BOOST_CHECK_EQUAL(typeid(p.some_float) == typeid(std::optional<float>), true); - BOOST_CHECK_EQUAL(typeid(p.some_list) == typeid(std::optional<std::vector<double>>), true); - BOOST_CHECK_EQUAL(typeid(p.some_list_with_optional_list) == typeid(std::optional<std::vector<std::optional<std::vector<std::optional<float>>>>>), true); - BOOST_CHECK_EQUAL(typeid(p.some_list_with_optional_type) == typeid(std::vector<std::optional<double>>), true); - BOOST_CHECK_EQUAL(typeid(p.some_obj) == typeid(std::optional<armarx::OptionalTestElement>), true); - BOOST_CHECK_EQUAL(typeid(p.some_string) == typeid(std::optional<std::string>), true); - + BOOST_CHECK(p_tmp == p); + + BOOST_CHECK_EQUAL(typeid(p.some_dict), typeid(std::optional<std::map<std::string, float>>)); + BOOST_CHECK_EQUAL(typeid(p.some_dict_with_optional_type), typeid(std::map<std::string, std::optional<float>>)); + BOOST_CHECK_EQUAL(typeid(p.some_eigen_matrix), typeid(std::optional<Eigen::Matrix<long, 25, 10>>)); + BOOST_CHECK_EQUAL(typeid(p.some_float), typeid(std::optional<float>)); + BOOST_CHECK_EQUAL(typeid(p.some_list), typeid(std::optional<std::vector<double>>)); + BOOST_CHECK_EQUAL(typeid(p.some_list_with_optional_list), typeid(std::optional<std::vector<std::optional<std::vector<std::optional<float>>>>>)); + BOOST_CHECK_EQUAL(typeid(p.some_list_with_optional_type), typeid(std::vector<std::optional<double>>)); + BOOST_CHECK_EQUAL(typeid(p.some_obj), typeid(std::optional<armarx::OptionalTestElement>)); + BOOST_CHECK_EQUAL(typeid(p.some_string), typeid(std::optional<std::string>)); auto aronType = p.ToAronType(); - BOOST_CHECK_EQUAL(aronType->getMemberType("some_float")->getMaybe() == aron::type::Maybe::eOptional, true); + BOOST_CHECK_EQUAL(aronType->getMemberType("some_float")->getMaybe(), aron::type::Maybe::eOptional); - BOOST_CHECK_EQUAL(p.some_float.has_value() == false, true); + BOOST_CHECK(not p.some_float.has_value()); auto aron = p.toAron(); - BOOST_CHECK_EQUAL(aron->getElement("some_float") == nullptr, true); + BOOST_CHECK(aron->getElement("some_float") == nullptr); p.some_float = 5.0f; - BOOST_CHECK_EQUAL(p.some_float.has_value() == true, true); + BOOST_CHECK(p.some_float.has_value()); aron = p.toAron(); - BOOST_CHECK_EQUAL(*aron->getElement("some_float") == std::make_shared<armarx::aron::data::Float>(5.0f), true); - BOOST_CHECK_EQUAL(*aron->getElement("some_float") == nullptr, false); + BOOST_CHECK(aron->getElement("some_float")); + BOOST_CHECK(*aron->getElement("some_float") == armarx::aron::data::Float(5.0f)); }